~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
 
16
16
"""Tests for the test framework."""
17
17
 
 
18
import cStringIO
18
19
import os
19
20
from StringIO import StringIO
20
21
import sys
22
23
import unittest
23
24
import warnings
24
25
 
25
 
from bzrlib import osutils
26
26
import bzrlib
 
27
from bzrlib import (
 
28
    bzrdir,
 
29
    memorytree,
 
30
    osutils,
 
31
    repository,
 
32
    )
27
33
from bzrlib.progress import _BaseProgressBar
28
34
from bzrlib.tests import (
29
35
                          ChrootedTestCase,
30
36
                          TestCase,
31
37
                          TestCaseInTempDir,
 
38
                          TestCaseWithMemoryTransport,
32
39
                          TestCaseWithTransport,
33
40
                          TestSkipped,
34
41
                          TestSuite,
35
42
                          TextTestRunner,
36
43
                          )
 
44
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
37
45
from bzrlib.tests.TestUtil import _load_module_by_name
38
46
import bzrlib.errors as errors
39
47
from bzrlib import symbol_versioning
40
48
from bzrlib.symbol_versioning import zero_ten, zero_eleven
41
49
from bzrlib.trace import note
 
50
from bzrlib.transport.memory import MemoryServer, MemoryTransport
42
51
from bzrlib.version import _get_bzr_source_tree
43
52
 
44
53
 
60
69
        """Test logs are captured when a test fails."""
61
70
        self.log('a test message')
62
71
        self._log_file.flush()
63
 
        self.assertContainsRe(self._get_log(), 'a test message\n')
 
72
        self.assertContainsRe(self._get_log(keep_log_file=True),
 
73
                              'a test message\n')
64
74
 
65
75
 
66
76
class TestTreeShape(TestCaseInTempDir):
420
430
        self.assertEqual(tests[1].transport_server, server1)
421
431
        self.assertEqual(tests[1].transport_readonly_server, server2)
422
432
 
 
433
 
 
434
class TestTestCaseInTempDir(TestCaseInTempDir):
 
435
 
 
436
    def test_home_is_not_working(self):
 
437
        self.assertNotEqual(self.test_dir, self.test_home_dir)
 
438
        cwd = osutils.getcwd()
 
439
        self.assertEqual(self.test_dir, cwd)
 
440
        self.assertEqual(self.test_home_dir, os.environ['HOME'])
 
441
 
 
442
 
 
443
class TestTestCaseWithMemoryTransport(TestCaseWithMemoryTransport):
 
444
 
 
445
    def test_home_is_non_existant_dir_under_root(self):
 
446
        """The test_home_dir for TestCaseWithMemoryTransport is missing.
 
447
 
 
448
        This is because TestCaseWithMemoryTransport is for tests that do not
 
449
        need any disk resources: they should be hooked into bzrlib in such a 
 
450
        way that no global settings are being changed by the test (only a 
 
451
        few tests should need to do that), and having a missing dir as home is
 
452
        an effective way to ensure that this is the case.
 
453
        """
 
454
        self.assertEqual(self.TEST_ROOT + "/MemoryTransportMissingHomeDir",
 
455
            self.test_home_dir)
 
456
        self.assertEqual(self.test_home_dir, os.environ['HOME'])
 
457
        
 
458
    def test_cwd_is_TEST_ROOT(self):
 
459
        self.assertEqual(self.test_dir, self.TEST_ROOT)
 
460
        cwd = osutils.getcwd()
 
461
        self.assertEqual(self.test_dir, cwd)
 
462
 
 
463
    def test_make_branch_and_memory_tree(self):
 
464
        """In TestCaseWithMemoryTransport we should not make the branch on disk.
 
465
 
 
466
        This is hard to comprehensively robustly test, so we settle for making
 
467
        a branch and checking no directory was created at its relpath.
 
468
        """
 
469
        tree = self.make_branch_and_memory_tree('dir')
 
470
        self.failIfExists('dir')
 
471
        self.assertIsInstance(tree, memorytree.MemoryTree)
 
472
 
 
473
    def test_make_branch_and_memory_tree_with_format(self):
 
474
        """make_branch_and_memory_tree should accept a format option."""
 
475
        format = bzrdir.BzrDirMetaFormat1()
 
476
        format.repository_format = repository.RepositoryFormat7()
 
477
        tree = self.make_branch_and_memory_tree('dir', format=format)
 
478
        self.failIfExists('dir')
 
479
        self.assertIsInstance(tree, memorytree.MemoryTree)
 
480
        self.assertEqual(format.repository_format.__class__,
 
481
            tree.branch.repository._format.__class__)
 
482
 
 
483
 
423
484
class TestTestCaseWithTransport(TestCaseWithTransport):
424
485
    """Tests for the convenience functions TestCaseWithTransport introduces."""
425
486
 
464
525
        self.assertRaises(AssertionError, self.assertIsDirectory, 'not_here', t)
465
526
 
466
527
 
 
528
class TestTestCaseTransports(TestCaseWithTransport):
 
529
 
 
530
    def setUp(self):
 
531
        super(TestTestCaseTransports, self).setUp()
 
532
        self.transport_server = MemoryServer
 
533
 
 
534
    def test_make_bzrdir_preserves_transport(self):
 
535
        t = self.get_transport()
 
536
        result_bzrdir = self.make_bzrdir('subdir')
 
537
        self.assertIsInstance(result_bzrdir.transport, 
 
538
                              MemoryTransport)
 
539
        # should not be on disk, should only be in memory
 
540
        self.failIfExists('subdir')
 
541
 
 
542
 
467
543
class TestChrootedTest(ChrootedTestCase):
468
544
 
469
545
    def test_root_is_root(self):
719
795
        output_string = output.getvalue()
720
796
        self.assertContainsRe(output_string, "--date [0-9.]+")
721
797
        if workingtree is not None:
722
 
            revision_id = workingtree.last_revision()
 
798
            revision_id = workingtree.get_parent_ids()[0]
723
799
            self.assertEndsWith(output_string.rstrip(), revision_id)
724
800
 
 
801
    def test_success_log_deleted(self):
 
802
        """Successful tests have their log deleted"""
 
803
 
 
804
        class LogTester(TestCase):
 
805
 
 
806
            def test_success(self):
 
807
                self.log('this will be removed\n')
 
808
 
 
809
        sio = cStringIO.StringIO()
 
810
        runner = TextTestRunner(stream=sio)
 
811
        test = LogTester('test_success')
 
812
        result = self.run_test_runner(runner, test)
 
813
 
 
814
        log = test._get_log()
 
815
        self.assertEqual("DELETED log file to reduce memory footprint", log)
 
816
        self.assertEqual('', test._log_contents)
 
817
        self.assertIs(None, test._log_file_name)
 
818
 
 
819
    def test_fail_log_kept(self):
 
820
        """Failed tests have their log kept"""
 
821
 
 
822
        class LogTester(TestCase):
 
823
 
 
824
            def test_fail(self):
 
825
                self.log('this will be kept\n')
 
826
                self.fail('this test fails')
 
827
 
 
828
        sio = cStringIO.StringIO()
 
829
        runner = TextTestRunner(stream=sio)
 
830
        test = LogTester('test_fail')
 
831
        result = self.run_test_runner(runner, test)
 
832
 
 
833
        text = sio.getvalue()
 
834
        self.assertContainsRe(text, 'this will be kept')
 
835
        self.assertContainsRe(text, 'this test fails')
 
836
 
 
837
        log = test._get_log()
 
838
        self.assertContainsRe(log, 'this will be kept')
 
839
        self.assertEqual(log, test._log_contents)
 
840
 
 
841
    def test_error_log_kept(self):
 
842
        """Tests with errors have their log kept"""
 
843
 
 
844
        class LogTester(TestCase):
 
845
 
 
846
            def test_error(self):
 
847
                self.log('this will be kept\n')
 
848
                raise ValueError('random exception raised')
 
849
 
 
850
        sio = cStringIO.StringIO()
 
851
        runner = TextTestRunner(stream=sio)
 
852
        test = LogTester('test_error')
 
853
        result = self.run_test_runner(runner, test)
 
854
 
 
855
        text = sio.getvalue()
 
856
        self.assertContainsRe(text, 'this will be kept')
 
857
        self.assertContainsRe(text, 'random exception raised')
 
858
 
 
859
        log = test._get_log()
 
860
        self.assertContainsRe(log, 'this will be kept')
 
861
        self.assertEqual(log, test._log_contents)
 
862
 
725
863
 
726
864
class TestTestCase(TestCase):
727
865
    """Tests that test the core bzrlib TestCase."""
893
1031
        self.assertIsInstance(bzrlib.bzrdir.BzrDir.open('b')._format,
894
1032
                              bzrlib.bzrdir.BzrDirFormat6)
895
1033
 
 
1034
    def test_make_branch_and_memory_tree(self):
 
1035
        # we should be able to get a new branch and a mutable tree from
 
1036
        # TestCaseWithTransport
 
1037
        tree = self.make_branch_and_memory_tree('a')
 
1038
        self.assertIsInstance(tree, bzrlib.memorytree.MemoryTree)
 
1039
 
 
1040
 
 
1041
class TestSFTPMakeBranchAndTree(TestCaseWithSFTPServer):
 
1042
 
 
1043
    def test_make_tree_for_sftp_branch(self):
 
1044
        """Transports backed by local directories create local trees."""
 
1045
 
 
1046
        tree = self.make_branch_and_tree('t1')
 
1047
        base = tree.bzrdir.root_transport.base
 
1048
        self.failIf(base.startswith('sftp'),
 
1049
                'base %r is on sftp but should be local' % base)
 
1050
        self.assertEquals(tree.bzrdir.root_transport,
 
1051
                tree.branch.bzrdir.root_transport)
 
1052
        self.assertEquals(tree.bzrdir.root_transport,
 
1053
                tree.branch.repository.bzrdir.root_transport)
 
1054
 
896
1055
 
897
1056
class TestSelftest(TestCase):
898
1057
    """Tests of bzrlib.tests.selftest."""