/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

  • Committer: Robert Collins
  • Date: 2009-08-04 04:36:34 UTC
  • mfrom: (4583 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4593.
  • Revision ID: robertc@robertcollins.net-20090804043634-2iu9wpcgs273i97s
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Tests for the test framework."""
18
18
 
19
 
import cStringIO
 
19
from cStringIO import StringIO
20
20
import os
21
 
from StringIO import StringIO
22
21
import sys
23
22
import time
24
23
import unittest
33
32
    lockdir,
34
33
    memorytree,
35
34
    osutils,
 
35
    progress,
36
36
    remote,
37
37
    repository,
38
38
    symbol_versioning,
39
39
    tests,
40
40
    workingtree,
41
41
    )
42
 
from bzrlib.progress import _BaseProgressBar
43
42
from bzrlib.repofmt import (
44
43
    pack_repo,
45
44
    weaverepo,
50
49
    deprecated_method,
51
50
    )
52
51
from bzrlib.tests import (
53
 
                          ChrootedTestCase,
54
 
                          ExtendedTestResult,
55
 
                          Feature,
56
 
                          KnownFailure,
57
 
                          TestCase,
58
 
                          TestCaseInTempDir,
59
 
                          TestCaseWithMemoryTransport,
60
 
                          TestCaseWithTransport,
61
 
                          TestNotApplicable,
62
 
                          TestSkipped,
63
 
                          TestSuite,
64
 
                          TestUtil,
65
 
                          TextTestRunner,
66
 
                          UnavailableFeature,
67
 
                          condition_id_re,
68
 
                          condition_isinstance,
69
 
                          exclude_tests_by_condition,
70
 
                          exclude_tests_by_re,
71
 
                          filter_suite_by_condition,
72
 
                          filter_suite_by_re,
73
 
                          iter_suite_tests,
74
 
                          preserve_input,
75
 
                          randomize_suite,
76
 
                          run_suite,
77
 
                          split_suite_by_condition,
78
 
                          split_suite_by_re,
79
 
                          test_lsprof,
80
 
                          test_suite,
81
 
                          )
82
 
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
83
 
from bzrlib.tests.TestUtil import _load_module_by_name
 
52
    test_lsprof,
 
53
    test_sftp_transport,
 
54
    TestUtil,
 
55
    )
84
56
from bzrlib.trace import note
85
57
from bzrlib.transport.memory import MemoryServer, MemoryTransport
86
58
from bzrlib.version import _get_bzr_source_tree
88
60
 
89
61
def _test_ids(test_suite):
90
62
    """Get the ids for the tests in a test suite."""
91
 
    return [t.id() for t in iter_suite_tests(test_suite)]
92
 
 
93
 
 
94
 
class SelftestTests(TestCase):
 
63
    return [t.id() for t in tests.iter_suite_tests(test_suite)]
 
64
 
 
65
 
 
66
class SelftestTests(tests.TestCase):
95
67
 
96
68
    def test_import_tests(self):
97
 
        mod = _load_module_by_name('bzrlib.tests.test_selftest')
 
69
        mod = TestUtil._load_module_by_name('bzrlib.tests.test_selftest')
98
70
        self.assertEqual(mod.SelftestTests, SelftestTests)
99
71
 
100
72
    def test_import_test_failure(self):
101
73
        self.assertRaises(ImportError,
102
 
                          _load_module_by_name,
 
74
                          TestUtil._load_module_by_name,
103
75
                          'bzrlib.no-name-yet')
104
76
 
105
 
class MetaTestLog(TestCase):
 
77
class MetaTestLog(tests.TestCase):
106
78
 
107
79
    def test_logging(self):
108
80
        """Test logs are captured when a test fails."""
112
84
                              'a test message\n')
113
85
 
114
86
 
115
 
class TestUnicodeFilename(TestCase):
 
87
class TestUnicodeFilename(tests.TestCase):
116
88
 
117
89
    def test_probe_passes(self):
118
90
        """UnicodeFilename._probe passes."""
121
93
        tests.UnicodeFilename._probe()
122
94
 
123
95
 
124
 
class TestTreeShape(TestCaseInTempDir):
 
96
class TestTreeShape(tests.TestCaseInTempDir):
125
97
 
126
98
    def test_unicode_paths(self):
127
99
        self.requireFeature(tests.UnicodeFilename)
131
103
        self.failUnlessExists(filename)
132
104
 
133
105
 
134
 
class TestTransportScenarios(TestCase):
 
106
class TestTransportScenarios(tests.TestCase):
135
107
    """A group of tests that test the transport implementation adaption core.
136
108
 
137
109
    This is a meta test that the tests are applied to all available
148
120
            def get_test_permutations(self):
149
121
                return sample_permutation
150
122
        sample_permutation = [(1,2), (3,4)]
151
 
        from bzrlib.tests.test_transport_implementations \
152
 
            import get_transport_test_permutations
 
123
        from bzrlib.tests.per_transport import get_transport_test_permutations
153
124
        self.assertEqual(sample_permutation,
154
125
                         get_transport_test_permutations(MockModule()))
155
126
 
158
129
        # as there are in all the registered transport modules - we assume if
159
130
        # this matches its probably doing the right thing especially in
160
131
        # combination with the tests for setting the right classes below.
161
 
        from bzrlib.tests.test_transport_implementations \
162
 
            import transport_test_permutations
 
132
        from bzrlib.tests.per_transport import transport_test_permutations
163
133
        from bzrlib.transport import _get_transport_modules
164
134
        modules = _get_transport_modules()
165
135
        permutation_count = 0
177
147
        # This test used to know about all the possible transports and the
178
148
        # order they were returned but that seems overly brittle (mbp
179
149
        # 20060307)
180
 
        from bzrlib.tests.test_transport_implementations \
181
 
            import transport_test_permutations
 
150
        from bzrlib.tests.per_transport import transport_test_permutations
182
151
        scenarios = transport_test_permutations()
183
152
        # there are at least that many builtin transports
184
153
        self.assertTrue(len(scenarios) > 6)
190
159
                                   bzrlib.transport.Server))
191
160
 
192
161
 
193
 
class TestBranchScenarios(TestCase):
 
162
class TestBranchScenarios(tests.TestCase):
194
163
 
195
164
    def test_scenarios(self):
196
165
        # check that constructor parameters are passed through to the adapted
197
166
        # test.
198
 
        from bzrlib.tests.branch_implementations import make_scenarios
 
167
        from bzrlib.tests.per_branch import make_scenarios
199
168
        server1 = "a"
200
169
        server2 = "b"
201
170
        formats = [("c", "C"), ("d", "D")]
215
184
            scenarios)
216
185
 
217
186
 
218
 
class TestBzrDirScenarios(TestCase):
 
187
class TestBzrDirScenarios(tests.TestCase):
219
188
 
220
189
    def test_scenarios(self):
221
190
        # check that constructor parameters are passed through to the adapted
222
191
        # test.
223
 
        from bzrlib.tests.bzrdir_implementations import make_scenarios
 
192
        from bzrlib.tests.per_bzrdir import make_scenarios
224
193
        vfs_factory = "v"
225
194
        server1 = "a"
226
195
        server2 = "b"
240
209
            scenarios)
241
210
 
242
211
 
243
 
class TestRepositoryScenarios(TestCase):
 
212
class TestRepositoryScenarios(tests.TestCase):
244
213
 
245
214
    def test_formats_to_scenarios(self):
246
215
        from bzrlib.tests.per_repository import formats_to_scenarios
280
249
            vfs_scenarios)
281
250
 
282
251
 
283
 
class TestTestScenarioApplication(TestCase):
 
252
class TestTestScenarioApplication(tests.TestCase):
284
253
    """Tests for the test adaption facilities."""
285
254
 
286
255
    def test_apply_scenario(self):
316
285
            adapted_test2.id())
317
286
 
318
287
 
319
 
class TestInterRepositoryScenarios(TestCase):
 
288
class TestInterRepositoryScenarios(tests.TestCase):
320
289
 
321
290
    def test_scenarios(self):
322
291
        # check that constructor parameters are passed through to the adapted
323
292
        # test.
324
 
        from bzrlib.tests.interrepository_implementations import \
325
 
            make_scenarios
 
293
        from bzrlib.tests.per_interrepository import make_scenarios
326
294
        server1 = "a"
327
295
        server2 = "b"
328
296
        formats = [(str, "C1", "C2"), (int, "D1", "D2")]
343
311
            scenarios)
344
312
 
345
313
 
346
 
class TestWorkingTreeScenarios(TestCase):
 
314
class TestWorkingTreeScenarios(tests.TestCase):
347
315
 
348
316
    def test_scenarios(self):
349
317
        # check that constructor parameters are passed through to the adapted
350
318
        # test.
351
 
        from bzrlib.tests.workingtree_implementations \
352
 
            import make_scenarios
 
319
        from bzrlib.tests.per_workingtree import make_scenarios
353
320
        server1 = "a"
354
321
        server2 = "b"
355
322
        formats = [workingtree.WorkingTreeFormat2(),
369
336
            scenarios)
370
337
 
371
338
 
372
 
class TestTreeScenarios(TestCase):
 
339
class TestTreeScenarios(tests.TestCase):
373
340
 
374
341
    def test_scenarios(self):
375
342
        # the tree implementation scenario generator is meant to setup one
379
346
        # workingtree_to_test_tree attribute set to 'return_parameter' and the
380
347
        # revision one set to revision_tree_from_workingtree.
381
348
 
382
 
        from bzrlib.tests.tree_implementations import (
 
349
        from bzrlib.tests.per_tree import (
383
350
            _dirstate_tree_from_workingtree,
384
351
            make_scenarios,
385
352
            preview_tree_pre,
448
415
        self.assertEqual(expected_scenarios, scenarios)
449
416
 
450
417
 
451
 
class TestInterTreeScenarios(TestCase):
 
418
class TestInterTreeScenarios(tests.TestCase):
452
419
    """A group of tests that test the InterTreeTestAdapter."""
453
420
 
454
421
    def test_scenarios(self):
461
428
        # unlike the TestProviderAdapter we dont want to automatically add a
462
429
        # parameterized one for WorkingTree - the optimisers will tell us what
463
430
        # ones to add.
464
 
        from bzrlib.tests.tree_implementations import (
 
431
        from bzrlib.tests.per_tree import (
465
432
            return_parameter,
466
433
            revision_tree_from_workingtree
467
434
            )
468
 
        from bzrlib.tests.intertree_implementations import (
 
435
        from bzrlib.tests.per_intertree import (
469
436
            make_scenarios,
470
437
            )
471
438
        from bzrlib.workingtree import WorkingTreeFormat2, WorkingTreeFormat3
504
471
        self.assertEqual(scenarios, expected_scenarios)
505
472
 
506
473
 
507
 
class TestTestCaseInTempDir(TestCaseInTempDir):
 
474
class TestTestCaseInTempDir(tests.TestCaseInTempDir):
508
475
 
509
476
    def test_home_is_not_working(self):
510
477
        self.assertNotEqual(self.test_dir, self.test_home_dir)
526
493
            os.lstat("foo"), os.lstat("bar"))
527
494
 
528
495
 
529
 
class TestTestCaseWithMemoryTransport(TestCaseWithMemoryTransport):
 
496
class TestTestCaseWithMemoryTransport(tests.TestCaseWithMemoryTransport):
530
497
 
531
498
    def test_home_is_non_existant_dir_under_root(self):
532
499
        """The test_home_dir for TestCaseWithMemoryTransport is missing.
622
589
        self.assertRaises(AssertionError, self._check_safety_net)
623
590
 
624
591
    def test_dangling_locks_cause_failures(self):
625
 
        class TestDanglingLock(TestCaseWithMemoryTransport):
 
592
        class TestDanglingLock(tests.TestCaseWithMemoryTransport):
626
593
            def test_function(self):
627
594
                t = self.get_transport('.')
628
595
                l = lockdir.LockDir(t, 'lock')
633
600
        self.assertEqual(1, len(result.errors))
634
601
 
635
602
 
636
 
class TestTestCaseWithTransport(TestCaseWithTransport):
 
603
class TestTestCaseWithTransport(tests.TestCaseWithTransport):
637
604
    """Tests for the convenience functions TestCaseWithTransport introduces."""
638
605
 
639
606
    def test_get_readonly_url_none(self):
690
657
        self.assertEqual((1, rev_id), a_branch.last_revision_info())
691
658
 
692
659
 
693
 
class TestTestCaseTransports(TestCaseWithTransport):
 
660
class TestTestCaseTransports(tests.TestCaseWithTransport):
694
661
 
695
662
    def setUp(self):
696
663
        super(TestTestCaseTransports, self).setUp()
705
672
        self.failIfExists('subdir')
706
673
 
707
674
 
708
 
class TestChrootedTest(ChrootedTestCase):
 
675
class TestChrootedTest(tests.ChrootedTestCase):
709
676
 
710
677
    def test_root_is_root(self):
711
678
        from bzrlib.transport import get_transport
714
681
        self.assertEqual(url, t.clone('..').base)
715
682
 
716
683
 
717
 
class MockProgress(_BaseProgressBar):
 
684
class MockProgress(progress._BaseProgressBar):
718
685
    """Progress-bar standin that records calls.
719
686
 
720
687
    Useful for testing pb using code.
721
688
    """
722
689
 
723
690
    def __init__(self):
724
 
        _BaseProgressBar.__init__(self)
 
691
        progress._BaseProgressBar.__init__(self)
725
692
        self.calls = []
726
693
 
727
694
    def tick(self):
737
704
        self.calls.append(('note', msg, args))
738
705
 
739
706
 
740
 
class TestTestResult(TestCase):
 
707
class TestTestResult(tests.TestCase):
741
708
 
742
709
    def check_timing(self, test_case, expected_re):
743
710
        result = bzrlib.tests.TextTestResult(self._log_file,
749
716
        self.assertContainsRe(timed_string, expected_re)
750
717
 
751
718
    def test_test_reporting(self):
752
 
        class ShortDelayTestCase(TestCase):
 
719
        class ShortDelayTestCase(tests.TestCase):
753
720
            def test_short_delay(self):
754
721
                time.sleep(0.003)
755
722
            def test_short_benchmark(self):
756
723
                self.time(time.sleep, 0.003)
757
724
        self.check_timing(ShortDelayTestCase('test_short_delay'),
758
725
                          r"^ +[0-9]+ms$")
759
 
        # if a benchmark time is given, we want a x of y style result.
 
726
        # if a benchmark time is given, we now show just that time followed by
 
727
        # a star
760
728
        self.check_timing(ShortDelayTestCase('test_short_benchmark'),
761
 
                          r"^ +[0-9]+ms/ +[0-9]+ms$")
 
729
                          r"^ +[0-9]+ms\*$")
762
730
 
763
731
    def test_unittest_reporting_unittest_class(self):
764
732
        # getting the time from a non-bzrlib test works ok
848
816
 
849
817
    def test_known_failure(self):
850
818
        """A KnownFailure being raised should trigger several result actions."""
851
 
        class InstrumentedTestResult(ExtendedTestResult):
 
819
        class InstrumentedTestResult(tests.ExtendedTestResult):
852
820
            def done(self): pass
853
821
            def startTests(self): pass
854
822
            def report_test_start(self, test): pass
856
824
                self._call = test, err
857
825
        result = InstrumentedTestResult(None, None, None, None)
858
826
        def test_function():
859
 
            raise KnownFailure('failed!')
 
827
            raise tests.KnownFailure('failed!')
860
828
        test = unittest.FunctionTestCase(test_function)
861
829
        test.run(result)
862
830
        # it should invoke 'report_known_failure'.
863
831
        self.assertEqual(2, len(result._call))
864
832
        self.assertEqual(test, result._call[0])
865
 
        self.assertEqual(KnownFailure, result._call[1][0])
866
 
        self.assertIsInstance(result._call[1][1], KnownFailure)
 
833
        self.assertEqual(tests.KnownFailure, result._call[1][0])
 
834
        self.assertIsInstance(result._call[1][1], tests.KnownFailure)
867
835
        # we dont introspec the traceback, if the rest is ok, it would be
868
836
        # exceptional for it not to be.
869
837
        # it should update the known_failure_count on the object.
886
854
        # (class, exception object, traceback)
887
855
        # KnownFailures dont get their tracebacks shown though, so we
888
856
        # can skip that.
889
 
        err = (KnownFailure, KnownFailure('foo'), None)
 
857
        err = (tests.KnownFailure, tests.KnownFailure('foo'), None)
890
858
        result.report_known_failure(test, err)
891
859
        output = result_stream.getvalue()[prefix:]
892
860
        lines = output.splitlines()
910
878
        # (class, exception object, traceback)
911
879
        # KnownFailures dont get their tracebacks shown though, so we
912
880
        # can skip that.
913
 
        err = (KnownFailure, KnownFailure('foo'), None)
 
881
        err = (tests.KnownFailure, tests.KnownFailure('foo'), None)
914
882
        result.report_known_failure(test, err)
915
883
        self.assertEqual(
916
884
            [
937
905
 
938
906
    def test_add_not_supported(self):
939
907
        """Test the behaviour of invoking addNotSupported."""
940
 
        class InstrumentedTestResult(ExtendedTestResult):
 
908
        class InstrumentedTestResult(tests.ExtendedTestResult):
941
909
            def done(self): pass
942
910
            def startTests(self): pass
943
911
            def report_test_start(self, test): pass
945
913
                self._call = test, feature
946
914
        result = InstrumentedTestResult(None, None, None, None)
947
915
        test = SampleTestCase('_test_pass')
948
 
        feature = Feature()
 
916
        feature = tests.Feature()
949
917
        result.startTest(test)
950
918
        result.addNotSupported(test, feature)
951
919
        # it should invoke 'report_unsupported'.
970
938
            verbosity=2,
971
939
            )
972
940
        test = self.get_passing_test()
973
 
        feature = Feature()
 
941
        feature = tests.Feature()
974
942
        result.startTest(test)
975
943
        prefix = len(result_stream.getvalue())
976
944
        result.report_unsupported(test, feature)
977
945
        output = result_stream.getvalue()[prefix:]
978
946
        lines = output.splitlines()
979
 
        self.assertEqual(lines, ['NODEP                   0ms', "    The feature 'Feature' is not available."])
 
947
        self.assertEqual(lines, ['NODEP        0ms',
 
948
                                 "    The feature 'Feature' is not available."])
980
949
 
981
950
    def test_text_report_unsupported(self):
982
951
        # text test output formatting
988
957
            pb=pb,
989
958
            )
990
959
        test = self.get_passing_test()
991
 
        feature = Feature()
 
960
        feature = tests.Feature()
992
961
        # this seeds the state to handle reporting the test.
993
962
        result.startTest(test)
994
963
        result.report_unsupported(test, feature)
1009
978
 
1010
979
    def test_unavailable_exception(self):
1011
980
        """An UnavailableFeature being raised should invoke addNotSupported."""
1012
 
        class InstrumentedTestResult(ExtendedTestResult):
 
981
        class InstrumentedTestResult(tests.ExtendedTestResult):
1013
982
            def done(self): pass
1014
983
            def startTests(self): pass
1015
984
            def report_test_start(self, test): pass
1016
985
            def addNotSupported(self, test, feature):
1017
986
                self._call = test, feature
1018
987
        result = InstrumentedTestResult(None, None, None, None)
1019
 
        feature = Feature()
 
988
        feature = tests.Feature()
1020
989
        def test_function():
1021
 
            raise UnavailableFeature(feature)
 
990
            raise tests.UnavailableFeature(feature)
1022
991
        test = unittest.FunctionTestCase(test_function)
1023
992
        test.run(result)
1024
993
        # it should invoke 'addNotSupported'.
1041
1010
        result = bzrlib.tests.TextTestResult(self._log_file, descriptions=0,
1042
1011
                                             verbosity=1)
1043
1012
        test = self.get_passing_test()
1044
 
        err = (KnownFailure, KnownFailure('foo'), None)
 
1013
        err = (tests.KnownFailure, tests.KnownFailure('foo'), None)
1045
1014
        result._addKnownFailure(test, err)
1046
1015
        self.assertFalse(result.wasStrictlySuccessful())
1047
1016
        self.assertEqual(None, result._extractBenchmarkTime(test))
1056
1025
 
1057
1026
    def test_startTests(self):
1058
1027
        """Starting the first test should trigger startTests."""
1059
 
        class InstrumentedTestResult(ExtendedTestResult):
 
1028
        class InstrumentedTestResult(tests.ExtendedTestResult):
1060
1029
            calls = 0
1061
1030
            def startTests(self): self.calls += 1
1062
1031
            def report_test_start(self, test): pass
1068
1037
        self.assertEquals(1, result.calls)
1069
1038
 
1070
1039
 
1071
 
class TestUnicodeFilenameFeature(TestCase):
 
1040
class TestUnicodeFilenameFeature(tests.TestCase):
1072
1041
 
1073
1042
    def test_probe_passes(self):
1074
1043
        """UnicodeFilenameFeature._probe passes."""
1077
1046
        tests.UnicodeFilenameFeature._probe()
1078
1047
 
1079
1048
 
1080
 
class TestRunner(TestCase):
 
1049
class TestRunner(tests.TestCase):
1081
1050
 
1082
1051
    def dummy_test(self):
1083
1052
        pass
1088
1057
        This current saves and restores:
1089
1058
        TestCaseInTempDir.TEST_ROOT
1090
1059
 
1091
 
        There should be no tests in this file that use bzrlib.tests.TextTestRunner
1092
 
        without using this convenience method, because of our use of global state.
 
1060
        There should be no tests in this file that use
 
1061
        bzrlib.tests.TextTestRunner without using this convenience method,
 
1062
        because of our use of global state.
1093
1063
        """
1094
 
        old_root = TestCaseInTempDir.TEST_ROOT
 
1064
        old_root = tests.TestCaseInTempDir.TEST_ROOT
1095
1065
        try:
1096
 
            TestCaseInTempDir.TEST_ROOT = None
 
1066
            tests.TestCaseInTempDir.TEST_ROOT = None
1097
1067
            return testrunner.run(test)
1098
1068
        finally:
1099
 
            TestCaseInTempDir.TEST_ROOT = old_root
 
1069
            tests.TestCaseInTempDir.TEST_ROOT = old_root
1100
1070
 
1101
1071
    def test_known_failure_failed_run(self):
1102
1072
        # run a test that generates a known failure which should be printed in
1103
1073
        # the final output when real failures occur.
1104
1074
        def known_failure_test():
1105
 
            raise KnownFailure('failed')
 
1075
            raise tests.KnownFailure('failed')
1106
1076
        test = unittest.TestSuite()
1107
1077
        test.addTest(unittest.FunctionTestCase(known_failure_test))
1108
1078
        def failing_test():
1109
1079
            raise AssertionError('foo')
1110
1080
        test.addTest(unittest.FunctionTestCase(failing_test))
1111
1081
        stream = StringIO()
1112
 
        runner = TextTestRunner(stream=stream)
 
1082
        runner = tests.TextTestRunner(stream=stream)
1113
1083
        result = self.run_test_runner(runner, test)
1114
1084
        lines = stream.getvalue().splitlines()
1115
1085
        self.assertEqual([
1129
1099
    def test_known_failure_ok_run(self):
1130
1100
        # run a test that generates a known failure which should be printed in the final output.
1131
1101
        def known_failure_test():
1132
 
            raise KnownFailure('failed')
 
1102
            raise tests.KnownFailure('failed')
1133
1103
        test = unittest.FunctionTestCase(known_failure_test)
1134
1104
        stream = StringIO()
1135
 
        runner = TextTestRunner(stream=stream)
 
1105
        runner = tests.TextTestRunner(stream=stream)
1136
1106
        result = self.run_test_runner(runner, test)
1137
1107
        self.assertContainsRe(stream.getvalue(),
1138
1108
            '\n'
1145
1115
        # run a test that is skipped, and check the suite as a whole still
1146
1116
        # succeeds.
1147
1117
        # skipping_test must be hidden in here so it's not run as a real test
1148
 
        class SkippingTest(TestCase):
 
1118
        class SkippingTest(tests.TestCase):
1149
1119
            def skipping_test(self):
1150
 
                raise TestSkipped('test intentionally skipped')
1151
 
        runner = TextTestRunner(stream=self._log_file)
 
1120
                raise tests.TestSkipped('test intentionally skipped')
 
1121
        runner = tests.TextTestRunner(stream=self._log_file)
1152
1122
        test = SkippingTest("skipping_test")
1153
1123
        result = self.run_test_runner(runner, test)
1154
1124
        self.assertTrue(result.wasSuccessful())
1155
1125
 
1156
1126
    def test_skipped_from_setup(self):
1157
1127
        calls = []
1158
 
        class SkippedSetupTest(TestCase):
 
1128
        class SkippedSetupTest(tests.TestCase):
1159
1129
 
1160
1130
            def setUp(self):
1161
1131
                calls.append('setUp')
1162
1132
                self.addCleanup(self.cleanup)
1163
 
                raise TestSkipped('skipped setup')
 
1133
                raise tests.TestSkipped('skipped setup')
1164
1134
 
1165
1135
            def test_skip(self):
1166
1136
                self.fail('test reached')
1168
1138
            def cleanup(self):
1169
1139
                calls.append('cleanup')
1170
1140
 
1171
 
        runner = TextTestRunner(stream=self._log_file)
 
1141
        runner = tests.TextTestRunner(stream=self._log_file)
1172
1142
        test = SkippedSetupTest('test_skip')
1173
1143
        result = self.run_test_runner(runner, test)
1174
1144
        self.assertTrue(result.wasSuccessful())
1177
1147
 
1178
1148
    def test_skipped_from_test(self):
1179
1149
        calls = []
1180
 
        class SkippedTest(TestCase):
 
1150
        class SkippedTest(tests.TestCase):
1181
1151
 
1182
1152
            def setUp(self):
1183
 
                TestCase.setUp(self)
 
1153
                tests.TestCase.setUp(self)
1184
1154
                calls.append('setUp')
1185
1155
                self.addCleanup(self.cleanup)
1186
1156
 
1187
1157
            def test_skip(self):
1188
 
                raise TestSkipped('skipped test')
 
1158
                raise tests.TestSkipped('skipped test')
1189
1159
 
1190
1160
            def cleanup(self):
1191
1161
                calls.append('cleanup')
1192
1162
 
1193
 
        runner = TextTestRunner(stream=self._log_file)
 
1163
        runner = tests.TextTestRunner(stream=self._log_file)
1194
1164
        test = SkippedTest('test_skip')
1195
1165
        result = self.run_test_runner(runner, test)
1196
1166
        self.assertTrue(result.wasSuccessful())
1200
1170
    def test_not_applicable(self):
1201
1171
        # run a test that is skipped because it's not applicable
1202
1172
        def not_applicable_test():
1203
 
            from bzrlib.tests import TestNotApplicable
1204
 
            raise TestNotApplicable('this test never runs')
 
1173
            raise tests.TestNotApplicable('this test never runs')
1205
1174
        out = StringIO()
1206
 
        runner = TextTestRunner(stream=out, verbosity=2)
 
1175
        runner = tests.TextTestRunner(stream=out, verbosity=2)
1207
1176
        test = unittest.FunctionTestCase(not_applicable_test)
1208
1177
        result = self.run_test_runner(runner, test)
1209
1178
        self._log_file.write(out.getvalue())
1216
1185
 
1217
1186
    def test_not_applicable_demo(self):
1218
1187
        # just so you can see it in the test output
1219
 
        raise TestNotApplicable('this test is just a demonstation')
 
1188
        raise tests.TestNotApplicable('this test is just a demonstation')
1220
1189
 
1221
1190
    def test_unsupported_features_listed(self):
1222
1191
        """When unsupported features are encountered they are detailed."""
1223
 
        class Feature1(Feature):
 
1192
        class Feature1(tests.Feature):
1224
1193
            def _probe(self): return False
1225
 
        class Feature2(Feature):
 
1194
        class Feature2(tests.Feature):
1226
1195
            def _probe(self): return False
1227
1196
        # create sample tests
1228
1197
        test1 = SampleTestCase('_test_pass')
1233
1202
        test.addTest(test1)
1234
1203
        test.addTest(test2)
1235
1204
        stream = StringIO()
1236
 
        runner = TextTestRunner(stream=stream)
 
1205
        runner = tests.TextTestRunner(stream=stream)
1237
1206
        result = self.run_test_runner(runner, test)
1238
1207
        lines = stream.getvalue().splitlines()
1239
1208
        self.assertEqual([
1250
1219
        workingtree = _get_bzr_source_tree()
1251
1220
        test = TestRunner('dummy_test')
1252
1221
        output = StringIO()
1253
 
        runner = TextTestRunner(stream=self._log_file, bench_history=output)
 
1222
        runner = tests.TextTestRunner(stream=self._log_file,
 
1223
                                      bench_history=output)
1254
1224
        result = self.run_test_runner(runner, test)
1255
1225
        output_string = output.getvalue()
1256
1226
        self.assertContainsRe(output_string, "--date [0-9.]+")
1267
1237
    def test_success_log_deleted(self):
1268
1238
        """Successful tests have their log deleted"""
1269
1239
 
1270
 
        class LogTester(TestCase):
 
1240
        class LogTester(tests.TestCase):
1271
1241
 
1272
1242
            def test_success(self):
1273
1243
                self.log('this will be removed\n')
1274
1244
 
1275
 
        sio = cStringIO.StringIO()
1276
 
        runner = TextTestRunner(stream=sio)
 
1245
        sio = StringIO()
 
1246
        runner = tests.TextTestRunner(stream=sio)
1277
1247
        test = LogTester('test_success')
1278
1248
        result = self.run_test_runner(runner, test)
1279
1249
 
1282
1252
    def test_skipped_log_deleted(self):
1283
1253
        """Skipped tests have their log deleted"""
1284
1254
 
1285
 
        class LogTester(TestCase):
 
1255
        class LogTester(tests.TestCase):
1286
1256
 
1287
1257
            def test_skipped(self):
1288
1258
                self.log('this will be removed\n')
1289
1259
                raise tests.TestSkipped()
1290
1260
 
1291
 
        sio = cStringIO.StringIO()
1292
 
        runner = TextTestRunner(stream=sio)
 
1261
        sio = StringIO()
 
1262
        runner = tests.TextTestRunner(stream=sio)
1293
1263
        test = LogTester('test_skipped')
1294
1264
        result = self.run_test_runner(runner, test)
1295
1265
 
1298
1268
    def test_not_aplicable_log_deleted(self):
1299
1269
        """Not applicable tests have their log deleted"""
1300
1270
 
1301
 
        class LogTester(TestCase):
 
1271
        class LogTester(tests.TestCase):
1302
1272
 
1303
1273
            def test_not_applicable(self):
1304
1274
                self.log('this will be removed\n')
1305
1275
                raise tests.TestNotApplicable()
1306
1276
 
1307
 
        sio = cStringIO.StringIO()
1308
 
        runner = TextTestRunner(stream=sio)
 
1277
        sio = StringIO()
 
1278
        runner = tests.TextTestRunner(stream=sio)
1309
1279
        test = LogTester('test_not_applicable')
1310
1280
        result = self.run_test_runner(runner, test)
1311
1281
 
1314
1284
    def test_known_failure_log_deleted(self):
1315
1285
        """Know failure tests have their log deleted"""
1316
1286
 
1317
 
        class LogTester(TestCase):
 
1287
        class LogTester(tests.TestCase):
1318
1288
 
1319
1289
            def test_known_failure(self):
1320
1290
                self.log('this will be removed\n')
1321
1291
                raise tests.KnownFailure()
1322
1292
 
1323
 
        sio = cStringIO.StringIO()
1324
 
        runner = TextTestRunner(stream=sio)
 
1293
        sio = StringIO()
 
1294
        runner = tests.TextTestRunner(stream=sio)
1325
1295
        test = LogTester('test_known_failure')
1326
1296
        result = self.run_test_runner(runner, test)
1327
1297
 
1330
1300
    def test_fail_log_kept(self):
1331
1301
        """Failed tests have their log kept"""
1332
1302
 
1333
 
        class LogTester(TestCase):
 
1303
        class LogTester(tests.TestCase):
1334
1304
 
1335
1305
            def test_fail(self):
1336
1306
                self.log('this will be kept\n')
1337
1307
                self.fail('this test fails')
1338
1308
 
1339
 
        sio = cStringIO.StringIO()
1340
 
        runner = TextTestRunner(stream=sio)
 
1309
        sio = StringIO()
 
1310
        runner = tests.TextTestRunner(stream=sio)
1341
1311
        test = LogTester('test_fail')
1342
1312
        result = self.run_test_runner(runner, test)
1343
1313
 
1352
1322
    def test_error_log_kept(self):
1353
1323
        """Tests with errors have their log kept"""
1354
1324
 
1355
 
        class LogTester(TestCase):
 
1325
        class LogTester(tests.TestCase):
1356
1326
 
1357
1327
            def test_error(self):
1358
1328
                self.log('this will be kept\n')
1359
1329
                raise ValueError('random exception raised')
1360
1330
 
1361
 
        sio = cStringIO.StringIO()
1362
 
        runner = TextTestRunner(stream=sio)
 
1331
        sio = StringIO()
 
1332
        runner = tests.TextTestRunner(stream=sio)
1363
1333
        test = LogTester('test_error')
1364
1334
        result = self.run_test_runner(runner, test)
1365
1335
 
1372
1342
        self.assertEqual(log, test._log_contents)
1373
1343
 
1374
1344
 
1375
 
class SampleTestCase(TestCase):
 
1345
class SampleTestCase(tests.TestCase):
1376
1346
 
1377
1347
    def _test_pass(self):
1378
1348
        pass
1380
1350
class _TestException(Exception):
1381
1351
    pass
1382
1352
 
1383
 
class TestTestCase(TestCase):
 
1353
class TestTestCase(tests.TestCase):
1384
1354
    """Tests that test the core bzrlib TestCase."""
1385
1355
 
1386
1356
    def test_assertLength_matches_empty(self):
1403
1373
            exception.args[0])
1404
1374
 
1405
1375
    def test_base_setUp_not_called_causes_failure(self):
1406
 
        class TestCaseWithBrokenSetUp(TestCase):
 
1376
        class TestCaseWithBrokenSetUp(tests.TestCase):
1407
1377
            def setUp(self):
1408
1378
                pass # does not call TestCase.setUp
1409
1379
            def test_foo(self):
1415
1385
        self.assertEqual(1, result.testsRun)
1416
1386
 
1417
1387
    def test_base_tearDown_not_called_causes_failure(self):
1418
 
        class TestCaseWithBrokenTearDown(TestCase):
 
1388
        class TestCaseWithBrokenTearDown(tests.TestCase):
1419
1389
            def tearDown(self):
1420
1390
                pass # does not call TestCase.tearDown
1421
1391
            def test_foo(self):
1429
1399
    def test_debug_flags_sanitised(self):
1430
1400
        """The bzrlib debug flags should be sanitised by setUp."""
1431
1401
        if 'allow_debug' in tests.selftest_debug_flags:
1432
 
            raise TestNotApplicable(
 
1402
            raise tests.TestNotApplicable(
1433
1403
                '-Eallow_debug option prevents debug flag sanitisation')
1434
1404
        # we could set something and run a test that will check
1435
1405
        # it gets santised, but this is probably sufficient for now:
1450
1420
        """
1451
1421
        self.change_selftest_debug_flags(set(['allow_debug']))
1452
1422
        bzrlib.debug.debug_flags = set(['a-flag'])
1453
 
        class TestThatRecordsFlags(TestCase):
 
1423
        class TestThatRecordsFlags(tests.TestCase):
1454
1424
            def test_foo(nested_self):
1455
1425
                self.flags = set(bzrlib.debug.debug_flags)
1456
1426
        test = TestThatRecordsFlags('test_foo')
1464
1434
        self.change_selftest_debug_flags(set(['allow_debug']))
1465
1435
        # Now run a test that modifies debug.debug_flags.
1466
1436
        bzrlib.debug.debug_flags = set(['original-state'])
1467
 
        class TestThatModifiesFlags(TestCase):
 
1437
        class TestThatModifiesFlags(tests.TestCase):
1468
1438
            def test_foo(self):
1469
1439
                bzrlib.debug.debug_flags = set(['modified'])
1470
1440
        test = TestThatModifiesFlags('test_foo')
1472
1442
        self.assertEqual(set(['original-state']), bzrlib.debug.debug_flags)
1473
1443
 
1474
1444
    def make_test_result(self):
1475
 
        return bzrlib.tests.TextTestResult(
1476
 
            self._log_file, descriptions=0, verbosity=1)
 
1445
        return tests.TextTestResult(self._log_file, descriptions=0, verbosity=1)
1477
1446
 
1478
1447
    def inner_test(self):
1479
1448
        # the inner child test
1517
1486
        result = bzrlib.tests.VerboseTestResult(
1518
1487
            unittest._WritelnDecorator(output_stream),
1519
1488
            descriptions=0,
1520
 
            verbosity=2,
1521
 
            num_tests=sample_test.countTestCases())
 
1489
            verbosity=2)
1522
1490
        sample_test.run(result)
1523
1491
        self.assertContainsRe(
1524
1492
            output_stream.getvalue(),
1525
 
            r"\d+ms/ +\d+ms\n$")
 
1493
            r"\d+ms\*\n$")
1526
1494
 
1527
1495
    def test_hooks_sanitised(self):
1528
1496
        """The bzrlib hooks should be sanitised by setUp."""
1555
1523
 
1556
1524
    def test_knownFailure(self):
1557
1525
        """Self.knownFailure() should raise a KnownFailure exception."""
1558
 
        self.assertRaises(KnownFailure, self.knownFailure, "A Failure")
 
1526
        self.assertRaises(tests.KnownFailure, self.knownFailure, "A Failure")
1559
1527
 
1560
1528
    def test_requireFeature_available(self):
1561
1529
        """self.requireFeature(available) is a no-op."""
1562
 
        class Available(Feature):
 
1530
        class Available(tests.Feature):
1563
1531
            def _probe(self):return True
1564
1532
        feature = Available()
1565
1533
        self.requireFeature(feature)
1566
1534
 
1567
1535
    def test_requireFeature_unavailable(self):
1568
1536
        """self.requireFeature(unavailable) raises UnavailableFeature."""
1569
 
        class Unavailable(Feature):
 
1537
        class Unavailable(tests.Feature):
1570
1538
            def _probe(self):return False
1571
1539
        feature = Unavailable()
1572
 
        self.assertRaises(UnavailableFeature, self.requireFeature, feature)
 
1540
        self.assertRaises(tests.UnavailableFeature,
 
1541
                          self.requireFeature, feature)
1573
1542
 
1574
1543
    def test_run_no_parameters(self):
1575
1544
        test = SampleTestCase('_test_pass')
1711
1680
        return sample_deprecated_function()
1712
1681
 
1713
1682
 
1714
 
class TestExtraAssertions(TestCase):
 
1683
class TestExtraAssertions(tests.TestCase):
1715
1684
    """Tests for new test assertions in bzrlib test suite"""
1716
1685
 
1717
1686
    def test_assert_isinstance(self):
1718
1687
        self.assertIsInstance(2, int)
1719
1688
        self.assertIsInstance(u'', basestring)
1720
 
        self.assertRaises(AssertionError, self.assertIsInstance, None, int)
 
1689
        e = self.assertRaises(AssertionError, self.assertIsInstance, None, int)
 
1690
        self.assertEquals(str(e),
 
1691
            "None is an instance of <type 'NoneType'> rather than <type 'int'>")
1721
1692
        self.assertRaises(AssertionError, self.assertIsInstance, 23.3, int)
 
1693
        e = self.assertRaises(AssertionError,
 
1694
            self.assertIsInstance, None, int, "it's just not")
 
1695
        self.assertEquals(str(e),
 
1696
            "None is an instance of <type 'NoneType'> rather than <type 'int'>"
 
1697
            ": it's just not")
1722
1698
 
1723
1699
    def test_assertEndsWith(self):
1724
1700
        self.assertEndsWith('foo', 'oo')
1772
1748
        self.callDeprecated([], testfunc, be_deprecated=False)
1773
1749
 
1774
1750
 
1775
 
class TestWarningTests(TestCase):
 
1751
class TestWarningTests(tests.TestCase):
1776
1752
    """Tests for calling methods that raise warnings."""
1777
1753
 
1778
1754
    def test_callCatchWarnings(self):
1788
1764
        self.assertEquals("this is your last warning", str(w0))
1789
1765
 
1790
1766
 
1791
 
class TestConvenienceMakers(TestCaseWithTransport):
 
1767
class TestConvenienceMakers(tests.TestCaseWithTransport):
1792
1768
    """Test for the make_* convenience functions."""
1793
1769
 
1794
1770
    def test_make_branch_and_tree_with_format(self):
1807
1783
        self.assertIsInstance(tree, bzrlib.memorytree.MemoryTree)
1808
1784
 
1809
1785
 
1810
 
class TestSFTPMakeBranchAndTree(TestCaseWithSFTPServer):
 
1786
class TestSFTPMakeBranchAndTree(test_sftp_transport.TestCaseWithSFTPServer):
1811
1787
 
1812
1788
    def test_make_tree_for_sftp_branch(self):
1813
1789
        """Transports backed by local directories create local trees."""
1822
1798
                tree.branch.repository.bzrdir.root_transport)
1823
1799
 
1824
1800
 
1825
 
class TestSelftest(TestCase):
 
1801
class TestSelftest(tests.TestCase):
1826
1802
    """Tests of bzrlib.tests.selftest."""
1827
1803
 
1828
1804
    def test_selftest_benchmark_parameter_invokes_test_suite__benchmark__(self):
1829
1805
        factory_called = []
1830
1806
        def factory():
1831
1807
            factory_called.append(True)
1832
 
            return TestSuite()
 
1808
            return TestUtil.TestSuite()
1833
1809
        out = StringIO()
1834
1810
        err = StringIO()
1835
1811
        self.apply_redirected(out, err, None, bzrlib.tests.selftest,
1837
1813
        self.assertEqual([True], factory_called)
1838
1814
 
1839
1815
 
1840
 
class TestKnownFailure(TestCase):
 
1816
class TestKnownFailure(tests.TestCase):
1841
1817
 
1842
1818
    def test_known_failure(self):
1843
1819
        """Check that KnownFailure is defined appropriately."""
1844
1820
        # a KnownFailure is an assertion error for compatability with unaware
1845
1821
        # runners.
1846
 
        self.assertIsInstance(KnownFailure(""), AssertionError)
 
1822
        self.assertIsInstance(tests.KnownFailure(""), AssertionError)
1847
1823
 
1848
1824
    def test_expect_failure(self):
1849
1825
        try:
1850
1826
            self.expectFailure("Doomed to failure", self.assertTrue, False)
1851
 
        except KnownFailure, e:
 
1827
        except tests.KnownFailure, e:
1852
1828
            self.assertEqual('Doomed to failure', e.args[0])
1853
1829
        try:
1854
1830
            self.expectFailure("Doomed to failure", self.assertTrue, True)
1859
1835
            self.fail('Assertion not raised')
1860
1836
 
1861
1837
 
1862
 
class TestFeature(TestCase):
 
1838
class TestFeature(tests.TestCase):
1863
1839
 
1864
1840
    def test_caching(self):
1865
1841
        """Feature._probe is called by the feature at most once."""
1866
 
        class InstrumentedFeature(Feature):
 
1842
        class InstrumentedFeature(tests.Feature):
1867
1843
            def __init__(self):
1868
 
                Feature.__init__(self)
 
1844
                super(InstrumentedFeature, self).__init__()
1869
1845
                self.calls = []
1870
1846
            def _probe(self):
1871
1847
                self.calls.append('_probe')
1878
1854
 
1879
1855
    def test_named_str(self):
1880
1856
        """Feature.__str__ should thunk to feature_name()."""
1881
 
        class NamedFeature(Feature):
 
1857
        class NamedFeature(tests.Feature):
1882
1858
            def feature_name(self):
1883
1859
                return 'symlinks'
1884
1860
        feature = NamedFeature()
1886
1862
 
1887
1863
    def test_default_str(self):
1888
1864
        """Feature.__str__ should default to __class__.__name__."""
1889
 
        class NamedFeature(Feature):
 
1865
        class NamedFeature(tests.Feature):
1890
1866
            pass
1891
1867
        feature = NamedFeature()
1892
1868
        self.assertEqual('NamedFeature', str(feature))
1893
1869
 
1894
1870
 
1895
 
class TestUnavailableFeature(TestCase):
 
1871
class TestUnavailableFeature(tests.TestCase):
1896
1872
 
1897
1873
    def test_access_feature(self):
1898
 
        feature = Feature()
1899
 
        exception = UnavailableFeature(feature)
 
1874
        feature = tests.Feature()
 
1875
        exception = tests.UnavailableFeature(feature)
1900
1876
        self.assertIs(feature, exception.args[0])
1901
1877
 
1902
1878
 
1903
 
class TestSelftestFiltering(TestCase):
 
1879
class TestSelftestFiltering(tests.TestCase):
1904
1880
 
1905
1881
    def setUp(self):
1906
 
        TestCase.setUp(self)
 
1882
        tests.TestCase.setUp(self)
1907
1883
        self.suite = TestUtil.TestSuite()
1908
1884
        self.loader = TestUtil.TestLoader()
1909
1885
        self.suite.addTest(self.loader.loadTestsFromModuleNames([
1913
1889
    def test_condition_id_re(self):
1914
1890
        test_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
1915
1891
            'test_condition_id_re')
1916
 
        filtered_suite = filter_suite_by_condition(self.suite,
1917
 
            condition_id_re('test_condition_id_re'))
 
1892
        filtered_suite = tests.filter_suite_by_condition(
 
1893
            self.suite, tests.condition_id_re('test_condition_id_re'))
1918
1894
        self.assertEqual([test_name], _test_ids(filtered_suite))
1919
1895
 
1920
1896
    def test_condition_id_in_list(self):
1921
1897
        test_names = ['bzrlib.tests.test_selftest.TestSelftestFiltering.'
1922
1898
                      'test_condition_id_in_list']
1923
1899
        id_list = tests.TestIdList(test_names)
1924
 
        filtered_suite = filter_suite_by_condition(
 
1900
        filtered_suite = tests.filter_suite_by_condition(
1925
1901
            self.suite, tests.condition_id_in_list(id_list))
1926
1902
        my_pattern = 'TestSelftestFiltering.*test_condition_id_in_list'
1927
 
        re_filtered = filter_suite_by_re(self.suite, my_pattern)
 
1903
        re_filtered = tests.filter_suite_by_re(self.suite, my_pattern)
1928
1904
        self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
1929
1905
 
1930
1906
    def test_condition_id_startswith(self):
1934
1910
        test_names = [ klass + 'test_condition_id_in_list',
1935
1911
                      klass + 'test_condition_id_startswith',
1936
1912
                     ]
1937
 
        filtered_suite = filter_suite_by_condition(
 
1913
        filtered_suite = tests.filter_suite_by_condition(
1938
1914
            self.suite, tests.condition_id_startswith([start1, start2]))
1939
1915
        self.assertEqual(test_names, _test_ids(filtered_suite))
1940
1916
 
1941
1917
    def test_condition_isinstance(self):
1942
 
        filtered_suite = filter_suite_by_condition(self.suite,
1943
 
            condition_isinstance(self.__class__))
 
1918
        filtered_suite = tests.filter_suite_by_condition(
 
1919
            self.suite, tests.condition_isinstance(self.__class__))
1944
1920
        class_pattern = 'bzrlib.tests.test_selftest.TestSelftestFiltering.'
1945
 
        re_filtered = filter_suite_by_re(self.suite, class_pattern)
 
1921
        re_filtered = tests.filter_suite_by_re(self.suite, class_pattern)
1946
1922
        self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
1947
1923
 
1948
1924
    def test_exclude_tests_by_condition(self):
1949
1925
        excluded_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
1950
1926
            'test_exclude_tests_by_condition')
1951
 
        filtered_suite = exclude_tests_by_condition(self.suite,
 
1927
        filtered_suite = tests.exclude_tests_by_condition(self.suite,
1952
1928
            lambda x:x.id() == excluded_name)
1953
1929
        self.assertEqual(len(self.all_names) - 1,
1954
1930
            filtered_suite.countTestCases())
1959
1935
 
1960
1936
    def test_exclude_tests_by_re(self):
1961
1937
        self.all_names = _test_ids(self.suite)
1962
 
        filtered_suite = exclude_tests_by_re(self.suite, 'exclude_tests_by_re')
 
1938
        filtered_suite = tests.exclude_tests_by_re(self.suite,
 
1939
                                                   'exclude_tests_by_re')
1963
1940
        excluded_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
1964
1941
            'test_exclude_tests_by_re')
1965
1942
        self.assertEqual(len(self.all_names) - 1,
1972
1949
    def test_filter_suite_by_condition(self):
1973
1950
        test_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
1974
1951
            'test_filter_suite_by_condition')
1975
 
        filtered_suite = filter_suite_by_condition(self.suite,
 
1952
        filtered_suite = tests.filter_suite_by_condition(self.suite,
1976
1953
            lambda x:x.id() == test_name)
1977
1954
        self.assertEqual([test_name], _test_ids(filtered_suite))
1978
1955
 
1979
1956
    def test_filter_suite_by_re(self):
1980
 
        filtered_suite = filter_suite_by_re(self.suite, 'test_filter_suite_by_r')
 
1957
        filtered_suite = tests.filter_suite_by_re(self.suite,
 
1958
                                                  'test_filter_suite_by_r')
1981
1959
        filtered_names = _test_ids(filtered_suite)
1982
1960
        self.assertEqual(filtered_names, ['bzrlib.tests.test_selftest.'
1983
1961
            'TestSelftestFiltering.test_filter_suite_by_re'])
2011
1989
 
2012
1990
    def test_preserve_input(self):
2013
1991
        # NB: Surely this is something in the stdlib to do this?
2014
 
        self.assertTrue(self.suite is preserve_input(self.suite))
2015
 
        self.assertTrue("@#$" is preserve_input("@#$"))
 
1992
        self.assertTrue(self.suite is tests.preserve_input(self.suite))
 
1993
        self.assertTrue("@#$" is tests.preserve_input("@#$"))
2016
1994
 
2017
1995
    def test_randomize_suite(self):
2018
 
        randomized_suite = randomize_suite(self.suite)
 
1996
        randomized_suite = tests.randomize_suite(self.suite)
2019
1997
        # randomizing should not add or remove test names.
2020
1998
        self.assertEqual(set(_test_ids(self.suite)),
2021
1999
                         set(_test_ids(randomized_suite)))
2031
2009
 
2032
2010
    def test_split_suit_by_condition(self):
2033
2011
        self.all_names = _test_ids(self.suite)
2034
 
        condition = condition_id_re('test_filter_suite_by_r')
2035
 
        split_suite = split_suite_by_condition(self.suite, condition)
 
2012
        condition = tests.condition_id_re('test_filter_suite_by_r')
 
2013
        split_suite = tests.split_suite_by_condition(self.suite, condition)
2036
2014
        filtered_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
2037
2015
            'test_filter_suite_by_re')
2038
2016
        self.assertEqual([filtered_name], _test_ids(split_suite[0]))
2043
2021
 
2044
2022
    def test_split_suit_by_re(self):
2045
2023
        self.all_names = _test_ids(self.suite)
2046
 
        split_suite = split_suite_by_re(self.suite, 'test_filter_suite_by_r')
 
2024
        split_suite = tests.split_suite_by_re(self.suite,
 
2025
                                              'test_filter_suite_by_r')
2047
2026
        filtered_name = ('bzrlib.tests.test_selftest.TestSelftestFiltering.'
2048
2027
            'test_filter_suite_by_re')
2049
2028
        self.assertEqual([filtered_name], _test_ids(split_suite[0]))
2053
2032
        self.assertEqual(remaining_names, _test_ids(split_suite[1]))
2054
2033
 
2055
2034
 
2056
 
class TestCheckInventoryShape(TestCaseWithTransport):
 
2035
class TestCheckInventoryShape(tests.TestCaseWithTransport):
2057
2036
 
2058
2037
    def test_check_inventory_shape(self):
2059
2038
        files = ['a', 'b/', 'b/c']
2067
2046
            tree.unlock()
2068
2047
 
2069
2048
 
2070
 
class TestBlackboxSupport(TestCase):
 
2049
class TestBlackboxSupport(tests.TestCase):
2071
2050
    """Tests for testsuite blackbox features."""
2072
2051
 
2073
2052
    def test_run_bzr_failure_not_caught(self):
2094
2073
            'bzr: ERROR: Not a branch: ".*nonexistantpath/".\n')
2095
2074
 
2096
2075
 
2097
 
class TestTestLoader(TestCase):
 
2076
class TestTestLoader(tests.TestCase):
2098
2077
    """Tests for the test loader."""
2099
2078
 
2100
2079
    def _get_loader_and_module(self):
2101
2080
        """Gets a TestLoader and a module with one test in it."""
2102
2081
        loader = TestUtil.TestLoader()
2103
2082
        module = {}
2104
 
        class Stub(TestCase):
 
2083
        class Stub(tests.TestCase):
2105
2084
            def test_foo(self):
2106
2085
                pass
2107
2086
        class MyModule(object):
2120
2099
        # load_tests do not need that :)
2121
2100
        def load_tests(self, standard_tests, module, loader):
2122
2101
            result = loader.suiteClass()
2123
 
            for test in iter_suite_tests(standard_tests):
 
2102
            for test in tests.iter_suite_tests(standard_tests):
2124
2103
                result.addTests([test, test])
2125
2104
            return result
2126
2105
        # add a load_tests() method which multiplies the tests from the module.
2145
2124
 
2146
2125
    def _create_suite(self, test_id_list):
2147
2126
 
2148
 
        class Stub(TestCase):
 
2127
        class Stub(tests.TestCase):
2149
2128
            def test_foo(self):
2150
2129
                pass
2151
2130
 
2161
2140
 
2162
2141
    def _test_ids(self, test_suite):
2163
2142
        """Get the ids for the tests in a test suite."""
2164
 
        return [t.id() for t in iter_suite_tests(test_suite)]
 
2143
        return [t.id() for t in tests.iter_suite_tests(test_suite)]
2165
2144
 
2166
2145
    def test_empty_list(self):
2167
2146
        id_list = self._create_id_list([])
2193
2172
        self.assertTrue(id_list.refers_to('mod.class'))
2194
2173
        self.assertTrue(id_list.refers_to('mod.class.meth'))
2195
2174
 
2196
 
    def test_test_suite(self):
2197
 
        # This test is slow, so we do a single test with one test in each
2198
 
        # category
2199
 
        test_list = [
2200
 
            # testmod_names
2201
 
            'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
2202
 
            'bzrlib.tests.test_selftest.TestTestIdList.test_test_suite',
2203
 
            # transport implementations
2204
 
            'bzrlib.tests.test_transport_implementations.TransportTests'
2205
 
            '.test_abspath(LocalURLServer)',
2206
 
            # modules_to_doctest
2207
 
            'bzrlib.timestamp.format_highres_date',
2208
 
            # plugins can't be tested that way since selftest may be run with
2209
 
            # --no-plugins
2210
 
            ]
2211
 
        suite = tests.test_suite(test_list)
2212
 
        self.assertEquals(test_list, _test_ids(suite))
2213
 
 
2214
2175
    def test_test_suite_matches_id_list_with_unknown(self):
2215
2176
        loader = TestUtil.TestLoader()
2216
2177
        suite = loader.loadTestsFromModuleName('bzrlib.tests.test_sampler')
2224
2185
        loader = TestUtil.TestLoader()
2225
2186
        suite = loader.loadTestsFromModuleName('bzrlib.tests.test_sampler')
2226
2187
        dupes = loader.suiteClass()
2227
 
        for test in iter_suite_tests(suite):
 
2188
        for test in tests.iter_suite_tests(suite):
2228
2189
            dupes.addTest(test)
2229
2190
            dupes.addTest(test) # Add it again
2230
2191
 
2236
2197
                          duplicates)
2237
2198
 
2238
2199
 
 
2200
class TestTestSuite(tests.TestCase):
 
2201
 
 
2202
    def test_test_suite(self):
 
2203
        # This test is slow, so we do a single test with one test in each
 
2204
        # category
 
2205
        test_list = [
 
2206
            # testmod_names
 
2207
            'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
 
2208
            ('bzrlib.tests.per_transport.TransportTests'
 
2209
             '.test_abspath(LocalURLServer)'),
 
2210
            'bzrlib.tests.test_selftest.TestTestSuite.test_test_suite',
 
2211
            # modules_to_doctest
 
2212
            'bzrlib.timestamp.format_highres_date',
 
2213
            # plugins can't be tested that way since selftest may be run with
 
2214
            # --no-plugins
 
2215
            ]
 
2216
        suite = tests.test_suite(test_list)
 
2217
        self.assertEquals(test_list, _test_ids(suite))
 
2218
 
 
2219
    def test_test_suite_list_and_start(self):
 
2220
        test_list = ['bzrlib.tests.test_selftest.TestTestSuite.test_test_suite']
 
2221
        suite = tests.test_suite(test_list,
 
2222
                                 ['bzrlib.tests.test_selftest.TestTestSuite'])
 
2223
        # test_test_suite_list_and_start is not included 
 
2224
        self.assertEquals(test_list, _test_ids(suite))
 
2225
 
 
2226
 
2239
2227
class TestLoadTestIdList(tests.TestCaseInTempDir):
2240
2228
 
2241
2229
    def _create_test_list_file(self, file_name, content):
2364
2352
        self.assertEquals('bzrlib.plugins', tpr.resolve_alias('bp'))
2365
2353
 
2366
2354
 
2367
 
class TestRunSuite(TestCase):
 
2355
class TestRunSuite(tests.TestCase):
2368
2356
 
2369
2357
    def test_runner_class(self):
2370
2358
        """run_suite accepts and uses a runner_class keyword argument."""
2371
 
        class Stub(TestCase):
 
2359
        class Stub(tests.TestCase):
2372
2360
            def test_foo(self):
2373
2361
                pass
2374
2362
        suite = Stub("test_foo")
2375
2363
        calls = []
2376
 
        class MyRunner(TextTestRunner):
 
2364
        class MyRunner(tests.TextTestRunner):
2377
2365
            def run(self, test):
2378
2366
                calls.append(test)
2379
 
                return ExtendedTestResult(self.stream, self.descriptions,
2380
 
                    self.verbosity)
2381
 
        run_suite(suite, runner_class=MyRunner, stream=StringIO())
2382
 
        self.assertEqual(calls, [suite])
 
2367
                return tests.ExtendedTestResult(self.stream, self.descriptions,
 
2368
                                                self.verbosity)
 
2369
        tests.run_suite(suite, runner_class=MyRunner, stream=StringIO())
 
2370
        self.assertLength(1, calls)
2383
2371
 
2384
2372
    def test_done(self):
2385
2373
        """run_suite should call result.done()"""
2388
2376
        def test_function():
2389
2377
            pass
2390
2378
        test = unittest.FunctionTestCase(test_function)
2391
 
        class InstrumentedTestResult(ExtendedTestResult):
 
2379
        class InstrumentedTestResult(tests.ExtendedTestResult):
2392
2380
            def done(self): one_more_call()
2393
 
        class MyRunner(TextTestRunner):
 
2381
        class MyRunner(tests.TextTestRunner):
2394
2382
            def run(self, test):
2395
2383
                return InstrumentedTestResult(self.stream, self.descriptions,
2396
2384
                                              self.verbosity)
2397
 
        run_suite(test, runner_class=MyRunner, stream=StringIO())
 
2385
        tests.run_suite(test, runner_class=MyRunner, stream=StringIO())
2398
2386
        self.assertEquals(1, self.calls)