61
from brzlib.repofmt import (
61
from breezy.repofmt import (
62
62
groupcompress_repo,
64
from brzlib.symbol_versioning import (
64
from breezy.symbol_versioning import (
65
65
deprecated_function,
69
from brzlib.tests import (
69
from breezy.tests import (
75
from brzlib.trace import note, mutter
76
from brzlib.transport import memory
75
from breezy.trace import note, mutter
76
from breezy.transport import memory
79
79
def _test_ids(test_suite):
108
108
class TestClassesAvailable(tests.TestCase):
109
"""As a convenience we expose Test* classes from brzlib.tests"""
109
"""As a convenience we expose Test* classes from breezy.tests"""
111
111
def test_test_case(self):
112
from brzlib.tests import TestCase
112
from breezy.tests import TestCase
114
114
def test_test_loader(self):
115
from brzlib.tests import TestLoader
115
from breezy.tests import TestLoader
117
117
def test_test_suite(self):
118
from brzlib.tests import TestSuite
118
from breezy.tests import TestSuite
121
121
class TestTransportScenarios(tests.TestCase):
135
135
def get_test_permutations(self):
136
136
return sample_permutation
137
137
sample_permutation = [(1,2), (3,4)]
138
from brzlib.tests.per_transport import get_transport_test_permutations
138
from breezy.tests.per_transport import get_transport_test_permutations
139
139
self.assertEqual(sample_permutation,
140
140
get_transport_test_permutations(MockModule()))
144
144
# as there are in all the registered transport modules - we assume if
145
145
# this matches its probably doing the right thing especially in
146
146
# combination with the tests for setting the right classes below.
147
from brzlib.tests.per_transport import transport_test_permutations
148
from brzlib.transport import _get_transport_modules
147
from breezy.tests.per_transport import transport_test_permutations
148
from breezy.transport import _get_transport_modules
149
149
modules = _get_transport_modules()
150
150
permutation_count = 0
151
151
for module in modules:
162
162
# This test used to know about all the possible transports and the
163
163
# order they were returned but that seems overly brittle (mbp
165
from brzlib.tests.per_transport import transport_test_permutations
165
from breezy.tests.per_transport import transport_test_permutations
166
166
scenarios = transport_test_permutations()
167
167
# there are at least that many builtin transports
168
168
self.assertTrue(len(scenarios) > 6)
169
169
one_scenario = scenarios[0]
170
170
self.assertIsInstance(one_scenario[0], str)
171
171
self.assertTrue(issubclass(one_scenario[1]["transport_class"],
172
brzlib.transport.Transport))
172
breezy.transport.Transport))
173
173
self.assertTrue(issubclass(one_scenario[1]["transport_server"],
174
brzlib.transport.Server))
174
breezy.transport.Server))
177
177
class TestBranchScenarios(tests.TestCase):
179
179
def test_scenarios(self):
180
180
# check that constructor parameters are passed through to the adapted
182
from brzlib.tests.per_branch import make_scenarios
182
from breezy.tests.per_branch import make_scenarios
185
185
formats = [("c", "C"), ("d", "D")]
204
204
def test_scenarios(self):
205
205
# check that constructor parameters are passed through to the adapted
207
from brzlib.tests.per_controldir import make_scenarios
207
from breezy.tests.per_controldir import make_scenarios
208
208
vfs_factory = "v"
227
227
class TestRepositoryScenarios(tests.TestCase):
229
229
def test_formats_to_scenarios(self):
230
from brzlib.tests.per_repository import formats_to_scenarios
230
from breezy.tests.per_repository import formats_to_scenarios
231
231
formats = [("(c)", remote.RemoteRepositoryFormat()),
232
232
("(d)", repository.format_registry.get(
233
233
'Bazaar repository format 2a (needs bzr 1.16 or later)\n'))]
268
268
"""Tests for the test adaption facilities."""
270
270
def test_apply_scenario(self):
271
from brzlib.tests import apply_scenario
271
from breezy.tests import apply_scenario
272
272
input_test = TestTestScenarioApplication("test_apply_scenario")
273
273
# setup two adapted tests
274
274
adapted_test1 = apply_scenario(input_test,
290
290
self.assertEqual("readonly-server",
291
291
adapted_test1.transport_readonly_server)
292
292
self.assertEqual(
293
"brzlib.tests.test_selftest.TestTestScenarioApplication."
293
"breezy.tests.test_selftest.TestTestScenarioApplication."
294
294
"test_apply_scenario(new id)",
295
295
adapted_test1.id())
296
296
self.assertEqual(None, adapted_test2.bzrdir_format)
297
297
self.assertEqual(
298
"brzlib.tests.test_selftest.TestTestScenarioApplication."
298
"breezy.tests.test_selftest.TestTestScenarioApplication."
299
299
"test_apply_scenario(new id 2)",
300
300
adapted_test2.id())
305
305
def test_scenarios(self):
306
306
# check that constructor parameters are passed through to the adapted
308
from brzlib.tests.per_interrepository import make_scenarios
308
from breezy.tests.per_interrepository import make_scenarios
311
311
formats = [("C0", "C1", "C2", "C3"), ("D0", "D1", "D2", "D3")]
331
331
def test_scenarios(self):
332
332
# check that constructor parameters are passed through to the adapted
334
from brzlib.tests.per_workingtree import make_scenarios
334
from breezy.tests.per_workingtree import make_scenarios
337
337
formats = [workingtree_4.WorkingTreeFormat4(),
378
378
# 'return_parameter' and the revision one set to
379
379
# revision_tree_from_workingtree.
381
from brzlib.tests.per_tree import (
381
from breezy.tests.per_tree import (
382
382
_dirstate_tree_from_workingtree,
384
384
preview_tree_pre,
473
473
# unlike the TestProviderAdapter we dont want to automatically add a
474
474
# parameterized one for WorkingTree - the optimisers will tell us what
476
from brzlib.tests.per_tree import (
476
from breezy.tests.per_tree import (
477
477
return_parameter,
479
from brzlib.tests.per_intertree import (
479
from breezy.tests.per_intertree import (
482
from brzlib.workingtree_3 import WorkingTreeFormat3
483
from brzlib.workingtree_4 import WorkingTreeFormat4
482
from breezy.workingtree_3 import WorkingTreeFormat3
483
from breezy.workingtree_4 import WorkingTreeFormat4
484
484
input_test = TestInterTreeScenarios(
485
485
"test_scenarios")
525
525
self.assertIsSameRealPath(self.test_home_dir, os.environ['HOME'])
527
527
def test_assertEqualStat_equal(self):
528
from brzlib.tests.test_dirstate import _FakeStat
528
from breezy.tests.test_dirstate import _FakeStat
529
529
self.build_tree(["foo"])
530
530
real = os.lstat("foo")
531
531
fake = _FakeStat(real.st_size, real.st_mtime, real.st_ctime,
563
563
"""The test_home_dir for TestCaseWithMemoryTransport is missing.
565
565
This is because TestCaseWithMemoryTransport is for tests that do not
566
need any disk resources: they should be hooked into brzlib in such a
566
need any disk resources: they should be hooked into breezy in such a
567
567
way that no global settings are being changed by the test (only a
568
568
few tests should need to do that), and having a missing dir as home is
569
569
an effective way to ensure that this is the case.
669
669
"""Tests for the convenience functions TestCaseWithTransport introduces."""
671
671
def test_get_readonly_url_none(self):
672
from brzlib.transport.readonly import ReadonlyTransportDecorator
672
from breezy.transport.readonly import ReadonlyTransportDecorator
673
673
self.vfs_transport_factory = memory.MemoryServer
674
674
self.transport_readonly_server = None
675
675
# calling get_readonly_transport() constructs a decorator on the url
683
683
self.assertEqual(t2.base[:-1], t.abspath('foo/bar'))
685
685
def test_get_readonly_url_http(self):
686
from brzlib.tests.http_server import HttpServer
687
from brzlib.transport.http import HttpTransportBase
686
from breezy.tests.http_server import HttpServer
687
from breezy.transport.http import HttpTransportBase
688
688
self.transport_server = test_server.LocalURLServer
689
689
self.transport_readonly_server = HttpServer
690
690
# calling get_readonly_transport() gives us a HTTP server instance.
764
764
class TestTestResult(tests.TestCase):
766
766
def check_timing(self, test_case, expected_re):
767
result = brzlib.tests.TextTestResult(self._log_file,
767
result = breezy.tests.TextTestResult(self._log_file,
788
788
r"^ +[0-9]+ms\*$")
790
790
def test_unittest_reporting_unittest_class(self):
791
# getting the time from a non-brzlib test works ok
791
# getting the time from a non-breezy test works ok
792
792
class ShortDelayTestCase(unittest.TestCase):
793
793
def test_short_delay(self):
794
794
time.sleep(0.003)
807
807
"""Verbose test result prints lsprof statistics from test cases."""
808
808
self.requireFeature(features.lsprof_feature)
809
809
result_stream = StringIO()
810
result = brzlib.tests.VerboseTestResult(
810
result = breezy.tests.VerboseTestResult(
882
882
def test_verbose_report_known_failure(self):
883
883
# verbose test output formatting
884
884
result_stream = StringIO()
885
result = brzlib.tests.VerboseTestResult(
885
result = breezy.tests.VerboseTestResult(
929
929
def test_verbose_report_unsupported(self):
930
930
# verbose test output formatting
931
931
result_stream = StringIO()
932
result = brzlib.tests.VerboseTestResult(
932
result = breezy.tests.VerboseTestResult(
968
968
self.assertEqual(0, result.error_count)
970
970
def test_strict_with_unsupported_feature(self):
971
result = brzlib.tests.TextTestResult(self._log_file, descriptions=0,
971
result = breezy.tests.TextTestResult(self._log_file, descriptions=0,
973
973
test = self.get_passing_test()
974
974
feature = "Unsupported Feature"
977
977
self.assertEqual(None, result._extractBenchmarkTime(test))
979
979
def test_strict_with_known_failure(self):
980
result = brzlib.tests.TextTestResult(self._log_file, descriptions=0,
980
result = breezy.tests.TextTestResult(self._log_file, descriptions=0,
982
982
test = _get_test("test_xfail")
985
985
self.assertEqual(None, result._extractBenchmarkTime(test))
987
987
def test_strict_with_success(self):
988
result = brzlib.tests.TextTestResult(self._log_file, descriptions=0,
988
result = breezy.tests.TextTestResult(self._log_file, descriptions=0,
990
990
test = self.get_passing_test()
991
991
result.addSuccess(test)
1030
1030
TestCaseInTempDir.TEST_ROOT
1032
1032
There should be no tests in this file that use
1033
brzlib.tests.TextTestRunner without using this convenience method,
1033
breezy.tests.TextTestRunner without using this convenience method,
1034
1034
because of our use of global state.
1036
1036
old_root = tests.TestCaseInTempDir.TEST_ROOT
1334
1334
self.assertEqual(1, result.testsRun)
1336
1336
def test_debug_flags_sanitised(self):
1337
"""The brzlib debug flags should be sanitised by setUp."""
1337
"""The breezy debug flags should be sanitised by setUp."""
1338
1338
if 'allow_debug' in tests.selftest_debug_flags:
1339
1339
raise tests.TestNotApplicable(
1340
1340
'-Eallow_debug option prevents debug flag sanitisation')
1345
1345
if self._lock_check_thorough:
1346
1346
flags.add('strict_locks')
1347
self.assertEqual(flags, brzlib.debug.debug_flags)
1347
self.assertEqual(flags, breezy.debug.debug_flags)
1349
1349
def change_selftest_debug_flags(self, new_flags):
1350
1350
self.overrideAttr(tests, 'selftest_debug_flags', set(new_flags))
1352
1352
def test_allow_debug_flag(self):
1353
"""The -Eallow_debug flag prevents brzlib.debug.debug_flags from being
1353
"""The -Eallow_debug flag prevents breezy.debug.debug_flags from being
1354
1354
sanitised (i.e. cleared) before running a test.
1356
1356
self.change_selftest_debug_flags(set(['allow_debug']))
1357
brzlib.debug.debug_flags = set(['a-flag'])
1357
breezy.debug.debug_flags = set(['a-flag'])
1358
1358
class TestThatRecordsFlags(tests.TestCase):
1359
1359
def test_foo(nested_self):
1360
self.flags = set(brzlib.debug.debug_flags)
1360
self.flags = set(breezy.debug.debug_flags)
1361
1361
test = TestThatRecordsFlags('test_foo')
1362
1362
test.run(self.make_test_result())
1363
1363
flags = set(['a-flag'])
1369
1369
"""The -Edisable_lock_checks flag disables thorough checks."""
1370
1370
class TestThatRecordsFlags(tests.TestCase):
1371
1371
def test_foo(nested_self):
1372
self.flags = set(brzlib.debug.debug_flags)
1372
self.flags = set(breezy.debug.debug_flags)
1373
1373
self.test_lock_check_thorough = nested_self._lock_check_thorough
1374
1374
self.change_selftest_debug_flags(set())
1375
1375
test = TestThatRecordsFlags('test_foo')
1388
1388
def test_this_fails_strict_lock_check(self):
1389
1389
class TestThatRecordsFlags(tests.TestCase):
1390
1390
def test_foo(nested_self):
1391
self.flags1 = set(brzlib.debug.debug_flags)
1391
self.flags1 = set(breezy.debug.debug_flags)
1392
1392
self.thisFailsStrictLockCheck()
1393
self.flags2 = set(brzlib.debug.debug_flags)
1393
self.flags2 = set(breezy.debug.debug_flags)
1394
1394
# Make sure lock checking is active
1395
1395
self.change_selftest_debug_flags(set())
1396
1396
test = TestThatRecordsFlags('test_foo')
1399
1399
self.assertEqual(set(), self.flags2)
1401
1401
def test_debug_flags_restored(self):
1402
"""The brzlib debug flags should be restored to their original state
1402
"""The breezy debug flags should be restored to their original state
1403
1403
after the test was run, even if allow_debug is set.
1405
1405
self.change_selftest_debug_flags(set(['allow_debug']))
1406
1406
# Now run a test that modifies debug.debug_flags.
1407
brzlib.debug.debug_flags = set(['original-state'])
1407
breezy.debug.debug_flags = set(['original-state'])
1408
1408
class TestThatModifiesFlags(tests.TestCase):
1409
1409
def test_foo(self):
1410
brzlib.debug.debug_flags = set(['modified'])
1410
breezy.debug.debug_flags = set(['modified'])
1411
1411
test = TestThatModifiesFlags('test_foo')
1412
1412
test.run(self.make_test_result())
1413
self.assertEqual(set(['original-state']), brzlib.debug.debug_flags)
1413
self.assertEqual(set(['original-state']), breezy.debug.debug_flags)
1415
1415
def make_test_result(self):
1416
1416
"""Get a test result that writes to the test log file."""
1441
1441
# one child, we should instead see the bad result inside our test with
1442
1442
# the two children.
1443
1443
# the outer child test
1444
original_trace = brzlib.trace._trace_file
1444
original_trace = breezy.trace._trace_file
1445
1445
outer_test = TestTestCase("outer_child")
1446
1446
result = self.make_test_result()
1447
1447
outer_test.run(result)
1448
self.assertEqual(original_trace, brzlib.trace._trace_file)
1448
self.assertEqual(original_trace, breezy.trace._trace_file)
1450
1450
def method_that_times_a_bit_twice(self):
1451
1451
# call self.time twice to ensure it aggregates
1456
1456
"""Test that the TestCase.time() method accumulates a benchmark time."""
1457
1457
sample_test = TestTestCase("method_that_times_a_bit_twice")
1458
1458
output_stream = StringIO()
1459
result = brzlib.tests.VerboseTestResult(
1459
result = breezy.tests.VerboseTestResult(
1461
1461
descriptions=0,
1468
1468
def test_hooks_sanitised(self):
1469
"""The brzlib hooks should be sanitised by setUp."""
1469
"""The breezy hooks should be sanitised by setUp."""
1470
1470
# Note this test won't fail with hooks that the core library doesn't
1471
1471
# use - but it trigger with a plugin that adds hooks, so its still a
1472
1472
# useful warning in that case.
1473
self.assertEqual(brzlib.branch.BranchHooks(), brzlib.branch.Branch.hooks)
1475
brzlib.smart.server.SmartServerHooks(),
1476
brzlib.smart.server.SmartTCPServer.hooks)
1478
brzlib.commands.CommandHooks(), brzlib.commands.Command.hooks)
1473
self.assertEqual(breezy.branch.BranchHooks(), breezy.branch.Branch.hooks)
1475
breezy.smart.server.SmartServerHooks(),
1476
breezy.smart.server.SmartTCPServer.hooks)
1478
breezy.commands.CommandHooks(), breezy.commands.Command.hooks)
1480
1480
def test__gather_lsprof_in_benchmarks(self):
1481
1481
"""When _gather_lsprof_in_benchmarks is on, accumulate profile data.
1491
1491
self.assertEqual(2, len(self._benchcalls))
1492
1492
self.assertEqual((time.sleep, (0.000,), {}), self._benchcalls[0][0])
1493
1493
self.assertEqual((time.sleep, (0.003,), {}), self._benchcalls[1][0])
1494
self.assertIsInstance(self._benchcalls[0][1], brzlib.lsprof.Stats)
1495
self.assertIsInstance(self._benchcalls[1][1], brzlib.lsprof.Stats)
1494
self.assertIsInstance(self._benchcalls[0][1], breezy.lsprof.Stats)
1495
self.assertIsInstance(self._benchcalls[1][1], breezy.lsprof.Stats)
1496
1496
del self._benchcalls[:]
1498
1498
def test_knownFailure(self):
1727
1727
self.assertRaises(AttributeError, getattr, obj, 'test_attr')
1729
1729
def test_recordCalls(self):
1730
from brzlib.tests import test_selftest
1730
from breezy.tests import test_selftest
1731
1731
calls = self.recordCalls(
1732
1732
test_selftest, '_add_numbers')
1733
1733
self.assertEqual(test_selftest._add_numbers(2, 10),
1908
1908
class TestExtraAssertions(tests.TestCase):
1909
"""Tests for new test assertions in brzlib test suite"""
1909
"""Tests for new test assertions in breezy test suite"""
1911
1911
def test_assert_isinstance(self):
1912
1912
self.assertIsInstance(2, int)
2010
2010
def test_make_branch_and_tree_with_format(self):
2011
2011
# we should be able to supply a format to make_branch_and_tree
2012
self.make_branch_and_tree('a', format=brzlib.bzrdir.BzrDirMetaFormat1())
2013
self.assertIsInstance(brzlib.controldir.ControlDir.open('a')._format,
2014
brzlib.bzrdir.BzrDirMetaFormat1)
2012
self.make_branch_and_tree('a', format=breezy.bzrdir.BzrDirMetaFormat1())
2013
self.assertIsInstance(breezy.controldir.ControlDir.open('a')._format,
2014
breezy.bzrdir.BzrDirMetaFormat1)
2016
2016
def test_make_branch_and_memory_tree(self):
2017
2017
# we should be able to get a new branch and a mutable tree from
2018
2018
# TestCaseWithTransport
2019
2019
tree = self.make_branch_and_memory_tree('a')
2020
self.assertIsInstance(tree, brzlib.memorytree.MemoryTree)
2020
self.assertIsInstance(tree, breezy.memorytree.MemoryTree)
2022
2022
def test_make_tree_for_local_vfs_backed_transport(self):
2023
2023
# make_branch_and_tree has to use local branch and repositories
2039
2039
def run_selftest(self, **kwargs):
2040
2040
"""Run selftest returning its output."""
2041
2041
output = StringIO()
2042
old_transport = brzlib.tests.default_transport
2042
old_transport = breezy.tests.default_transport
2043
2043
old_root = tests.TestCaseWithMemoryTransport.TEST_ROOT
2044
2044
tests.TestCaseWithMemoryTransport.TEST_ROOT = None
2046
2046
self.assertEqual(True, tests.selftest(stream=output, **kwargs))
2048
brzlib.tests.default_transport = old_transport
2048
breezy.tests.default_transport = old_transport
2049
2049
tests.TestCaseWithMemoryTransport.TEST_ROOT = old_root
2054
2054
class TestSelftest(tests.TestCase, SelfTestHelper):
2055
"""Tests of brzlib.tests.selftest."""
2055
"""Tests of breezy.tests.selftest."""
2057
2057
def test_selftest_benchmark_parameter_invokes_test_suite__benchmark__(self):
2058
2058
factory_called = []
2061
2061
return TestUtil.TestSuite()
2062
2062
out = StringIO()
2063
2063
err = StringIO()
2064
self.apply_redirected(out, err, None, brzlib.tests.selftest,
2064
self.apply_redirected(out, err, None, breezy.tests.selftest,
2065
2065
test_suite_factory=factory)
2066
2066
self.assertEqual([True], factory_called)
2139
2139
def test_starting_with_single_argument(self):
2140
2140
output = self.run_selftest(test_suite_factory=self.factory,
2141
starting_with=['brzlib.tests.test_selftest.Test.a'],
2141
starting_with=['breezy.tests.test_selftest.Test.a'],
2142
2142
list_only=True)
2143
self.assertEqual('brzlib.tests.test_selftest.Test.a\n',
2143
self.assertEqual('breezy.tests.test_selftest.Test.a\n',
2144
2144
output.getvalue())
2146
2146
def test_starting_with_multiple_argument(self):
2147
2147
output = self.run_selftest(test_suite_factory=self.factory,
2148
starting_with=['brzlib.tests.test_selftest.Test.a',
2149
'brzlib.tests.test_selftest.Test.b'],
2148
starting_with=['breezy.tests.test_selftest.Test.a',
2149
'breezy.tests.test_selftest.Test.b'],
2150
2150
list_only=True)
2151
self.assertEqual('brzlib.tests.test_selftest.Test.a\n'
2152
'brzlib.tests.test_selftest.Test.b\n',
2151
self.assertEqual('breezy.tests.test_selftest.Test.a\n'
2152
'breezy.tests.test_selftest.Test.b\n',
2153
2153
output.getvalue())
2155
2155
def check_transport_set(self, transport_server):
2158
2158
captured_transport.append(a_transport)
2159
2159
class Capture(tests.TestCase):
2161
seen_transport(brzlib.tests.default_transport)
2161
seen_transport(breezy.tests.default_transport)
2163
2163
return TestUtil.TestSuite([Capture("a")])
2164
2164
self.run_selftest(transport=transport_server, test_suite_factory=factory)
2167
2167
def test_transport_sftp(self):
2168
2168
self.requireFeature(features.paramiko)
2169
from brzlib.tests import stub_sftp
2169
from breezy.tests import stub_sftp
2170
2170
self.check_transport_set(stub_sftp.SFTPAbsoluteServer)
2172
2172
def test_transport_memory(self):
2375
2375
def apply_redirected(self, stdin=None, stdout=None, stderr=None,
2376
2376
a_callable=None, *args, **kwargs):
2377
2377
self.stdin = stdin
2378
self.factory_stdin = getattr(brzlib.ui.ui_factory, "stdin", None)
2379
self.factory = brzlib.ui.ui_factory
2378
self.factory_stdin = getattr(breezy.ui.ui_factory, "stdin", None)
2379
self.factory = breezy.ui.ui_factory
2380
2380
self.working_dir = osutils.getcwd()
2381
2381
stdout.write('foo\n')
2382
2382
stderr.write('bar\n')
2399
2399
# own UI factory, which is an instance of TestUIFactory,
2400
2400
# with stdin, stdout and stderr attached to the stdin,
2401
2401
# stdout and stderr of the invoked run_bzr
2402
current_factory = brzlib.ui.ui_factory
2402
current_factory = breezy.ui.ui_factory
2403
2403
self.run_bzr(['foo'])
2404
2404
self.assertFalse(current_factory is self.factory)
2405
2405
self.assertNotEqual(sys.stdout, self.factory.stdout)
2642
2642
working_dir='foo')
2643
2643
self.assertEqual(['foo', 'current'], chdirs)
2645
def test_get_brz_path_with_cwd_brzlib(self):
2645
def test_get_brz_path_with_cwd_breezy(self):
2646
2646
self.get_source_path = lambda: ""
2647
2647
self.overrideAttr(os.path, "isfile", lambda path: True)
2648
2648
self.assertEqual(self.get_brz_path(), "brz")
2672
2672
self.suite = TestUtil.TestSuite()
2673
2673
self.loader = TestUtil.TestLoader()
2674
2674
self.suite.addTest(self.loader.loadTestsFromModule(
2675
sys.modules['brzlib.tests.test_selftest']))
2675
sys.modules['breezy.tests.test_selftest']))
2676
2676
self.all_names = _test_ids(self.suite)
2678
2678
def test_condition_id_re(self):
2679
test_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2679
test_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2680
2680
'test_condition_id_re')
2681
2681
filtered_suite = tests.filter_suite_by_condition(
2682
2682
self.suite, tests.condition_id_re('test_condition_id_re'))
2683
2683
self.assertEqual([test_name], _test_ids(filtered_suite))
2685
2685
def test_condition_id_in_list(self):
2686
test_names = ['brzlib.tests.test_selftest.TestSelftestFiltering.'
2686
test_names = ['breezy.tests.test_selftest.TestSelftestFiltering.'
2687
2687
'test_condition_id_in_list']
2688
2688
id_list = tests.TestIdList(test_names)
2689
2689
filtered_suite = tests.filter_suite_by_condition(
2693
2693
self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
2695
2695
def test_condition_id_startswith(self):
2696
klass = 'brzlib.tests.test_selftest.TestSelftestFiltering.'
2696
klass = 'breezy.tests.test_selftest.TestSelftestFiltering.'
2697
2697
start1 = klass + 'test_condition_id_starts'
2698
2698
start2 = klass + 'test_condition_id_in'
2699
2699
test_names = [ klass + 'test_condition_id_in_list',
2706
2706
def test_condition_isinstance(self):
2707
2707
filtered_suite = tests.filter_suite_by_condition(
2708
2708
self.suite, tests.condition_isinstance(self.__class__))
2709
class_pattern = 'brzlib.tests.test_selftest.TestSelftestFiltering.'
2709
class_pattern = 'breezy.tests.test_selftest.TestSelftestFiltering.'
2710
2710
re_filtered = tests.filter_suite_by_re(self.suite, class_pattern)
2711
2711
self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
2713
2713
def test_exclude_tests_by_condition(self):
2714
excluded_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2714
excluded_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2715
2715
'test_exclude_tests_by_condition')
2716
2716
filtered_suite = tests.exclude_tests_by_condition(self.suite,
2717
2717
lambda x:x.id() == excluded_name)
2726
2726
self.all_names = _test_ids(self.suite)
2727
2727
filtered_suite = tests.exclude_tests_by_re(self.suite,
2728
2728
'exclude_tests_by_re')
2729
excluded_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2729
excluded_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2730
2730
'test_exclude_tests_by_re')
2731
2731
self.assertEqual(len(self.all_names) - 1,
2732
2732
filtered_suite.countTestCases())
2736
2736
self.assertEqual(remaining_names, _test_ids(filtered_suite))
2738
2738
def test_filter_suite_by_condition(self):
2739
test_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2739
test_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2740
2740
'test_filter_suite_by_condition')
2741
2741
filtered_suite = tests.filter_suite_by_condition(self.suite,
2742
2742
lambda x:x.id() == test_name)
2746
2746
filtered_suite = tests.filter_suite_by_re(self.suite,
2747
2747
'test_filter_suite_by_r')
2748
2748
filtered_names = _test_ids(filtered_suite)
2749
self.assertEqual(filtered_names, ['brzlib.tests.test_selftest.'
2749
self.assertEqual(filtered_names, ['breezy.tests.test_selftest.'
2750
2750
'TestSelftestFiltering.test_filter_suite_by_re'])
2752
2752
def test_filter_suite_by_id_list(self):
2753
test_list = ['brzlib.tests.test_selftest.'
2753
test_list = ['breezy.tests.test_selftest.'
2754
2754
'TestSelftestFiltering.test_filter_suite_by_id_list']
2755
2755
filtered_suite = tests.filter_suite_by_id_list(
2756
2756
self.suite, tests.TestIdList(test_list))
2757
2757
filtered_names = _test_ids(filtered_suite)
2758
2758
self.assertEqual(
2759
2759
filtered_names,
2760
['brzlib.tests.test_selftest.'
2760
['breezy.tests.test_selftest.'
2761
2761
'TestSelftestFiltering.test_filter_suite_by_id_list'])
2763
2763
def test_filter_suite_by_id_startswith(self):
2764
2764
# By design this test may fail if another test is added whose name also
2765
2765
# begins with one of the start value used.
2766
klass = 'brzlib.tests.test_selftest.TestSelftestFiltering.'
2766
klass = 'breezy.tests.test_selftest.TestSelftestFiltering.'
2767
2767
start1 = klass + 'test_filter_suite_by_id_starts'
2768
2768
start2 = klass + 'test_filter_suite_by_id_li'
2769
2769
test_list = [klass + 'test_filter_suite_by_id_list',
2800
2800
self.all_names = _test_ids(self.suite)
2801
2801
condition = tests.condition_id_re('test_filter_suite_by_r')
2802
2802
split_suite = tests.split_suite_by_condition(self.suite, condition)
2803
filtered_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2803
filtered_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2804
2804
'test_filter_suite_by_re')
2805
2805
self.assertEqual([filtered_name], _test_ids(split_suite[0]))
2806
2806
self.assertFalse(filtered_name in _test_ids(split_suite[1]))
2812
2812
self.all_names = _test_ids(self.suite)
2813
2813
split_suite = tests.split_suite_by_re(self.suite,
2814
2814
'test_filter_suite_by_r')
2815
filtered_name = ('brzlib.tests.test_selftest.TestSelftestFiltering.'
2815
filtered_name = ('breezy.tests.test_selftest.TestSelftestFiltering.'
2816
2816
'test_filter_suite_by_re')
2817
2817
self.assertEqual([filtered_name], _test_ids(split_suite[0]))
2818
2818
self.assertFalse(filtered_name in _test_ids(split_suite[1]))
2902
2902
def test_load_tests_from_module_name_smoke_test(self):
2903
2903
loader = TestUtil.TestLoader()
2904
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
2905
self.assertEqual(['brzlib.tests.test_sampler.DemoTest.test_nothing'],
2904
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
2905
self.assertEqual(['breezy.tests.test_sampler.DemoTest.test_nothing'],
2906
2906
_test_ids(suite))
2908
2908
def test_load_tests_from_module_name_with_bogus_module_name(self):
2968
2968
def test_test_suite_matches_id_list_with_unknown(self):
2969
2969
loader = TestUtil.TestLoader()
2970
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
2971
test_list = ['brzlib.tests.test_sampler.DemoTest.test_nothing',
2970
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
2971
test_list = ['breezy.tests.test_sampler.DemoTest.test_nothing',
2973
2973
not_found, duplicates = tests.suite_matches_id_list(suite, test_list)
2974
2974
self.assertEqual(['bogus'], not_found)
2977
2977
def test_suite_matches_id_list_with_duplicates(self):
2978
2978
loader = TestUtil.TestLoader()
2979
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
2979
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
2980
2980
dupes = loader.suiteClass()
2981
2981
for test in tests.iter_suite_tests(suite):
2982
2982
dupes.addTest(test)
2983
2983
dupes.addTest(test) # Add it again
2985
test_list = ['brzlib.tests.test_sampler.DemoTest.test_nothing',]
2985
test_list = ['breezy.tests.test_sampler.DemoTest.test_nothing',]
2986
2986
not_found, duplicates = tests.suite_matches_id_list(
2987
2987
dupes, test_list)
2988
2988
self.assertEqual([], not_found)
2989
self.assertEqual(['brzlib.tests.test_sampler.DemoTest.test_nothing'],
2989
self.assertEqual(['breezy.tests.test_sampler.DemoTest.test_nothing'],
2997
2997
# by _test_suite_testmod_names.
2998
2998
test_list = tests._test_suite_testmod_names()
2999
2999
self.assertSubset([
3000
'brzlib.tests.blackbox',
3001
'brzlib.tests.per_transport',
3002
'brzlib.tests.test_selftest',
3000
'breezy.tests.blackbox',
3001
'breezy.tests.per_transport',
3002
'breezy.tests.test_selftest',
3026
3026
def testmod_names():
3027
3027
calls.append("testmod_names")
3029
'brzlib.tests.blackbox.test_branch',
3030
'brzlib.tests.per_transport',
3031
'brzlib.tests.test_selftest',
3029
'breezy.tests.blackbox.test_branch',
3030
'breezy.tests.per_transport',
3031
'breezy.tests.test_selftest',
3033
3033
self.overrideAttr(tests, '_test_suite_testmod_names', testmod_names)
3034
3034
def doctests():
3035
3035
calls.append("modules_to_doctest")
3036
3036
if __doc__ is None:
3038
return ['brzlib.timestamp']
3038
return ['breezy.timestamp']
3039
3039
self.overrideAttr(tests, '_test_suite_modules_to_doctest', doctests)
3040
3040
expected_test_list = [
3041
3041
# testmod_names
3042
'brzlib.tests.blackbox.test_branch.TestBranch.test_branch',
3043
('brzlib.tests.per_transport.TransportTests'
3042
'breezy.tests.blackbox.test_branch.TestBranch.test_branch',
3043
('breezy.tests.per_transport.TransportTests'
3044
3044
'.test_abspath(LocalTransport,LocalURLServer)'),
3045
'brzlib.tests.test_selftest.TestTestSuite.test_test_suite',
3045
'breezy.tests.test_selftest.TestTestSuite.test_test_suite',
3046
3046
# plugins can't be tested that way since selftest may be run with
3049
3049
if __doc__ is not None:
3050
3050
expected_test_list.extend([
3051
3051
# modules_to_doctest
3052
'brzlib.timestamp.format_highres_date',
3052
'breezy.timestamp.format_highres_date',
3054
3054
suite = tests.test_suite()
3055
3055
self.assertEqual(set(["testmod_names", "modules_to_doctest"]),
3061
3061
# to know that starting_with == None works. So a second load is
3062
3062
# incurred - note that the starting_with parameter causes a partial load
3063
3063
# rather than a full load so this test should be pretty quick.
3064
test_list = ['brzlib.tests.test_selftest.TestTestSuite.test_test_suite']
3064
test_list = ['breezy.tests.test_selftest.TestTestSuite.test_test_suite']
3065
3065
suite = tests.test_suite(test_list,
3066
['brzlib.tests.test_selftest.TestTestSuite'])
3066
['breezy.tests.test_selftest.TestTestSuite'])
3067
3067
# test_test_suite_list_and_start is not included
3068
3068
self.assertEqual(test_list, _test_ids(suite))
3111
3111
def test_load_tests(self):
3112
test_list = ['brzlib.tests.test_sampler.DemoTest.test_nothing']
3112
test_list = ['breezy.tests.test_sampler.DemoTest.test_nothing']
3113
3113
loader = self._create_loader(test_list)
3114
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
3114
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
3115
3115
self.assertEqual(test_list, _test_ids(suite))
3117
3117
def test_exclude_tests(self):
3118
3118
test_list = ['bogus']
3119
3119
loader = self._create_loader(test_list)
3120
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
3120
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
3121
3121
self.assertEqual([], _test_ids(suite))
3132
3132
def test_load_tests(self):
3133
test_list = ['brzlib.tests.test_sampler.DemoTest.test_nothing']
3134
loader = self._create_loader('brzlib.tests.test_samp')
3133
test_list = ['breezy.tests.test_sampler.DemoTest.test_nothing']
3134
loader = self._create_loader('breezy.tests.test_samp')
3136
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
3136
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
3137
3137
self.assertEqual(test_list, _test_ids(suite))
3139
3139
def test_load_tests_inside_module(self):
3140
test_list = ['brzlib.tests.test_sampler.DemoTest.test_nothing']
3141
loader = self._create_loader('brzlib.tests.test_sampler.Demo')
3140
test_list = ['breezy.tests.test_sampler.DemoTest.test_nothing']
3141
loader = self._create_loader('breezy.tests.test_sampler.Demo')
3143
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
3143
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
3144
3144
self.assertEqual(test_list, _test_ids(suite))
3146
3146
def test_exclude_tests(self):
3147
3147
test_list = ['bogus']
3148
3148
loader = self._create_loader('bogus')
3150
suite = loader.loadTestsFromModuleName('brzlib.tests.test_sampler')
3150
suite = loader.loadTestsFromModuleName('breezy.tests.test_sampler')
3151
3151
self.assertEqual([], _test_ids(suite))
3188
3188
def test_predefined_prefixes(self):
3189
3189
tpr = tests.test_prefix_alias_registry
3190
self.assertEqual('brzlib', tpr.resolve_alias('brzlib'))
3191
self.assertEqual('brzlib.doc', tpr.resolve_alias('bd'))
3192
self.assertEqual('brzlib.utils', tpr.resolve_alias('bu'))
3193
self.assertEqual('brzlib.tests', tpr.resolve_alias('bt'))
3194
self.assertEqual('brzlib.tests.blackbox', tpr.resolve_alias('bb'))
3195
self.assertEqual('brzlib.plugins', tpr.resolve_alias('bp'))
3190
self.assertEqual('breezy', tpr.resolve_alias('breezy'))
3191
self.assertEqual('breezy.doc', tpr.resolve_alias('bd'))
3192
self.assertEqual('breezy.utils', tpr.resolve_alias('bu'))
3193
self.assertEqual('breezy.tests', tpr.resolve_alias('bt'))
3194
self.assertEqual('breezy.tests.blackbox', tpr.resolve_alias('bb'))
3195
self.assertEqual('breezy.plugins', tpr.resolve_alias('bp'))
3198
3198
class TestThreadLeakDetection(tests.TestCase):
3321
3321
self.assertEqual(result.postcode, Test.runTest.func_code)
3323
3323
def test_location_bt_error(self):
3324
"""Needs right post mortem traceback with erroring brzlib.tests case"""
3324
"""Needs right post mortem traceback with erroring breezy.tests case"""
3325
3325
class Test(tests.TestCase):
3326
3326
def test_error(self):
3327
3327
raise RuntimeError
3330
3330
self.assertEqual(result.postcode, Test.test_error.func_code)
3332
3332
def test_location_bt_failure(self):
3333
"""Needs right post mortem traceback with failing brzlib.tests case"""
3333
"""Needs right post mortem traceback with failing breezy.tests case"""
3334
3334
class Test(tests.TestCase):
3335
3335
def test_failure(self):
3336
3336
raise self.failureException