88
78
TestUtil._load_module_by_name,
89
79
'bzrlib.no-name-yet')
92
81
class MetaTestLog(tests.TestCase):
94
83
def test_logging(self):
95
84
"""Test logs are captured when a test fails."""
96
85
self.log('a test message')
97
details = self.getDetails()
99
self.assertThat(log.content_type, Equals(ContentType(
100
"text", "plain", {"charset": "utf8"})))
101
self.assertThat(u"".join(log.iter_text()), Equals(self.get_log()))
102
self.assertThat(self.get_log(),
103
DocTestMatches(u"...a test message\n", ELLIPSIS))
86
self._log_file.flush()
87
self.assertContainsRe(self._get_log(keep_log_file=True),
106
91
class TestUnicodeFilename(tests.TestCase):
708
695
def sample_function(self):
710
697
test = Sample("a")
698
test.attrs_to_keep = test.attrs_to_keep + ('_benchcalls',)
712
case = terminal._events[0][1]
713
self.assertLength(1, case._benchcalls)
700
self.assertLength(1, test._benchcalls)
714
701
# We must be able to unpack it as the test reporting code wants
715
(_, _, _), stats = case._benchcalls[0]
702
(_, _, _), stats = test._benchcalls[0]
716
703
self.assertTrue(callable(stats.pprint))
841
832
def stopTestRun(self): pass
842
833
def startTests(self): pass
843
834
def report_test_start(self, test): pass
844
def report_known_failure(self, test, err=None, details=None):
845
self._call = test, 'known failure'
835
def report_known_failure(self, test, err):
836
self._call = test, err
846
837
result = InstrumentedTestResult(None, None, None, None)
847
838
class Test(tests.TestCase):
848
839
def test_function(self):
852
843
# it should invoke 'report_known_failure'.
853
844
self.assertEqual(2, len(result._call))
854
self.assertEqual(test.id(), result._call[0].id())
855
self.assertEqual('known failure', result._call[1])
845
self.assertEqual(test, result._call[0])
846
self.assertEqual(tests.KnownFailure, result._call[1][0])
847
self.assertIsInstance(result._call[1][1], tests.KnownFailure)
856
848
# we dont introspec the traceback, if the rest is ok, it would be
857
849
# exceptional for it not to be.
858
850
# it should update the known_failure_count on the object.
930
922
result.report_unsupported(test, feature)
931
923
output = result_stream.getvalue()[prefix:]
932
924
lines = output.splitlines()
933
# We don't check for the final '0ms' since it may fail on slow hosts
934
self.assertStartsWith(lines[0], 'NODEP')
935
self.assertEqual(lines[1],
936
" The feature 'Feature' is not available.")
925
self.assertEqual(lines, ['NODEP 0ms',
926
" The feature 'Feature' is not available."])
938
928
def test_unavailable_exception(self):
939
929
"""An UnavailableFeature being raised should invoke addNotSupported."""
1036
1026
# the final output when real failures occur.
1037
1027
class Test(tests.TestCase):
1038
1028
def known_failure_test(self):
1039
self.expectFailure('failed', self.assertTrue, False)
1029
raise tests.KnownFailure('failed')
1040
1030
test = unittest.TestSuite()
1041
1031
test.addTest(Test("known_failure_test"))
1042
1032
def failing_test():
1033
raise AssertionError('foo')
1044
1034
test.addTest(unittest.FunctionTestCase(failing_test))
1045
1035
stream = StringIO()
1046
1036
runner = tests.TextTestRunner(stream=stream)
1047
1037
result = self.run_test_runner(runner, test)
1048
1038
lines = stream.getvalue().splitlines()
1049
1039
self.assertContainsRe(stream.getvalue(),
1050
'(?sm)^bzr selftest.*$'
1052
1042
'^======================================================================\n'
1053
'^FAIL: failing_test\n'
1043
'^FAIL: unittest.FunctionTestCase \\(failing_test\\)\n'
1054
1044
'^----------------------------------------------------------------------\n'
1055
1045
'Traceback \\(most recent call last\\):\n'
1056
1046
' .*' # File .*, line .*, in failing_test' - but maybe not from .pyc
1057
' self.fail\\(\'foo\'\\)\n'
1047
' raise AssertionError\\(\'foo\'\\)\n'
1059
1049
'^----------------------------------------------------------------------\n'
1194
1184
# Reading from the actual source tree breaks isolation, but we don't
1195
1185
# want to assume that thats *all* that would happen.
1196
1186
self._get_source_tree_calls = []
1187
def _get_bzr_source_tree():
1198
1188
self._get_source_tree_calls.append("called")
1200
self.overrideAttr(bzrlib.version, '_get_bzr_source_tree', new_get)
1190
orig_get_bzr_source_tree = bzrlib.version._get_bzr_source_tree
1191
bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
1193
bzrlib.version._get_bzr_source_tree = orig_get_bzr_source_tree
1194
self.addCleanup(restore)
1202
1196
def test_bench_history(self):
1203
1197
# tests that the running the benchmark passes bench_history into
1213
1207
self.assertContainsRe(output_string, "--date [0-9.]+")
1214
1208
self.assertLength(1, self._get_source_tree_calls)
1210
def assertLogDeleted(self, test):
1211
log = test._get_log()
1212
self.assertEqual("DELETED log file to reduce memory footprint", log)
1213
self.assertEqual('', test._log_contents)
1214
self.assertIs(None, test._log_file_name)
1216
def test_success_log_deleted(self):
1217
"""Successful tests have their log deleted"""
1219
class LogTester(tests.TestCase):
1221
def test_success(self):
1222
self.log('this will be removed\n')
1225
runner = tests.TextTestRunner(stream=sio)
1226
test = LogTester('test_success')
1227
result = self.run_test_runner(runner, test)
1229
self.assertLogDeleted(test)
1231
def test_skipped_log_deleted(self):
1232
"""Skipped tests have their log deleted"""
1234
class LogTester(tests.TestCase):
1236
def test_skipped(self):
1237
self.log('this will be removed\n')
1238
raise tests.TestSkipped()
1241
runner = tests.TextTestRunner(stream=sio)
1242
test = LogTester('test_skipped')
1243
result = self.run_test_runner(runner, test)
1245
self.assertLogDeleted(test)
1247
def test_not_aplicable_log_deleted(self):
1248
"""Not applicable tests have their log deleted"""
1250
class LogTester(tests.TestCase):
1252
def test_not_applicable(self):
1253
self.log('this will be removed\n')
1254
raise tests.TestNotApplicable()
1257
runner = tests.TextTestRunner(stream=sio)
1258
test = LogTester('test_not_applicable')
1259
result = self.run_test_runner(runner, test)
1261
self.assertLogDeleted(test)
1263
def test_known_failure_log_deleted(self):
1264
"""Know failure tests have their log deleted"""
1266
class LogTester(tests.TestCase):
1268
def test_known_failure(self):
1269
self.log('this will be removed\n')
1270
raise tests.KnownFailure()
1273
runner = tests.TextTestRunner(stream=sio)
1274
test = LogTester('test_known_failure')
1275
result = self.run_test_runner(runner, test)
1277
self.assertLogDeleted(test)
1279
def test_fail_log_kept(self):
1280
"""Failed tests have their log kept"""
1282
class LogTester(tests.TestCase):
1284
def test_fail(self):
1285
self.log('this will be kept\n')
1286
self.fail('this test fails')
1289
runner = tests.TextTestRunner(stream=sio)
1290
test = LogTester('test_fail')
1291
result = self.run_test_runner(runner, test)
1293
text = sio.getvalue()
1294
self.assertContainsRe(text, 'this will be kept')
1295
self.assertContainsRe(text, 'this test fails')
1297
log = test._get_log()
1298
self.assertContainsRe(log, 'this will be kept')
1299
self.assertEqual(log, test._log_contents)
1301
def test_error_log_kept(self):
1302
"""Tests with errors have their log kept"""
1304
class LogTester(tests.TestCase):
1306
def test_error(self):
1307
self.log('this will be kept\n')
1308
raise ValueError('random exception raised')
1311
runner = tests.TextTestRunner(stream=sio)
1312
test = LogTester('test_error')
1313
result = self.run_test_runner(runner, test)
1315
text = sio.getvalue()
1316
self.assertContainsRe(text, 'this will be kept')
1317
self.assertContainsRe(text, 'random exception raised')
1319
log = test._get_log()
1320
self.assertContainsRe(log, 'this will be kept')
1321
self.assertEqual(log, test._log_contents)
1216
1323
def test_startTestRun(self):
1217
1324
"""run should call result.startTestRun()"""
1311
1418
self.assertEqual(flags, bzrlib.debug.debug_flags)
1313
1420
def change_selftest_debug_flags(self, new_flags):
1314
self.overrideAttr(tests, 'selftest_debug_flags', set(new_flags))
1421
orig_selftest_flags = tests.selftest_debug_flags
1422
self.addCleanup(self._restore_selftest_debug_flags, orig_selftest_flags)
1423
tests.selftest_debug_flags = set(new_flags)
1425
def _restore_selftest_debug_flags(self, flags):
1426
tests.selftest_debug_flags = flags
1316
1428
def test_allow_debug_flag(self):
1317
1429
"""The -Eallow_debug flag prevents bzrlib.debug.debug_flags from being
1547
1656
self.calls.append(('addNotSupported', test, feature))
1548
1657
result = InstrumentedTestResult()
1549
1658
test.run(result)
1550
case = result.calls[0][1]
1551
1659
self.assertEqual([
1552
('startTest', case),
1553
('addNotSupported', case, the_feature),
1660
('startTest', test),
1661
('addNotSupported', test, the_feature),
1558
1666
def test_start_server_registers_url(self):
1559
transport_server = memory.MemoryServer()
1667
transport_server = MemoryServer()
1560
1668
# A little strict, but unlikely to be changed soon.
1561
1669
self.assertEqual([], self._bzr_selftest_roots)
1562
1670
self.start_server(transport_server)
1618
1726
self.assertRaises(AssertionError,
1619
1727
self.assertListRaises, _TestException, success_generator)
1621
def test_overrideAttr_without_value(self):
1622
self.test_attr = 'original' # Define a test attribute
1623
obj = self # Make 'obj' visible to the embedded test
1624
class Test(tests.TestCase):
1627
tests.TestCase.setUp(self)
1628
self.orig = self.overrideAttr(obj, 'test_attr')
1630
def test_value(self):
1631
self.assertEqual('original', self.orig)
1632
self.assertEqual('original', obj.test_attr)
1633
obj.test_attr = 'modified'
1634
self.assertEqual('modified', obj.test_attr)
1636
test = Test('test_value')
1637
test.run(unittest.TestResult())
1638
self.assertEqual('original', obj.test_attr)
1640
def test_overrideAttr_with_value(self):
1641
self.test_attr = 'original' # Define a test attribute
1642
obj = self # Make 'obj' visible to the embedded test
1643
class Test(tests.TestCase):
1646
tests.TestCase.setUp(self)
1647
self.orig = self.overrideAttr(obj, 'test_attr', new='modified')
1649
def test_value(self):
1650
self.assertEqual('original', self.orig)
1651
self.assertEqual('modified', obj.test_attr)
1653
test = Test('test_value')
1654
test.run(unittest.TestResult())
1655
self.assertEqual('original', obj.test_attr)
1658
1730
# NB: Don't delete this; it's not actually from 0.11!
1659
1731
@deprecated_function(deprecated_in((0, 11, 0)))
1945
2018
self.assertEqual(transport_server, captured_transport[0])
1947
2020
def test_transport_sftp(self):
1948
self.requireFeature(features.paramiko)
1949
from bzrlib.tests import stub_sftp
1950
self.check_transport_set(stub_sftp.SFTPAbsoluteServer)
2022
import bzrlib.transport.sftp
2023
except errors.ParamikoNotPresent:
2024
raise tests.TestSkipped("Paramiko not present")
2025
self.check_transport_set(bzrlib.transport.sftp.SFTPAbsoluteServer)
1952
2027
def test_transport_memory(self):
1953
self.check_transport_set(memory.MemoryServer)
2028
self.check_transport_set(bzrlib.transport.memory.MemoryServer)
1956
2031
class TestSelftestWithIdList(tests.TestCaseInTempDir, SelfTestHelper):
2357
2432
self.assertEqual('bzr: interrupted\n', result[1])
2435
class TestKnownFailure(tests.TestCase):
2437
def test_known_failure(self):
2438
"""Check that KnownFailure is defined appropriately."""
2439
# a KnownFailure is an assertion error for compatability with unaware
2441
self.assertIsInstance(tests.KnownFailure(""), AssertionError)
2443
def test_expect_failure(self):
2445
self.expectFailure("Doomed to failure", self.assertTrue, False)
2446
except tests.KnownFailure, e:
2447
self.assertEqual('Doomed to failure', e.args[0])
2449
self.expectFailure("Doomed to failure", self.assertTrue, True)
2450
except AssertionError, e:
2451
self.assertEqual('Unexpected success. Should have failed:'
2452
' Doomed to failure', e.args[0])
2454
self.fail('Assertion not raised')
2360
2457
class TestFeature(tests.TestCase):
2362
2459
def test_caching(self):
2398
2495
self.assertIs(feature, exception.args[0])
2401
simple_thunk_feature = tests._CompatabilityThunkFeature(
2402
deprecated_in((2, 1, 0)),
2403
'bzrlib.tests.test_selftest',
2404
'simple_thunk_feature','UnicodeFilename',
2405
replacement_module='bzrlib.tests'
2408
class Test_CompatibilityFeature(tests.TestCase):
2410
def test_does_thunk(self):
2411
res = self.callDeprecated(
2412
['bzrlib.tests.test_selftest.simple_thunk_feature was deprecated'
2413
' in version 2.1.0. Use bzrlib.tests.UnicodeFilename instead.'],
2414
simple_thunk_feature.available)
2415
self.assertEqual(tests.UnicodeFilename.available(), res)
2418
class TestModuleAvailableFeature(tests.TestCase):
2420
def test_available_module(self):
2421
feature = tests.ModuleAvailableFeature('bzrlib.tests')
2422
self.assertEqual('bzrlib.tests', feature.module_name)
2423
self.assertEqual('bzrlib.tests', str(feature))
2424
self.assertTrue(feature.available())
2425
self.assertIs(tests, feature.module)
2427
def test_unavailable_module(self):
2428
feature = tests.ModuleAvailableFeature('bzrlib.no_such_module_exists')
2429
self.assertEqual('bzrlib.no_such_module_exists', str(feature))
2430
self.assertFalse(feature.available())
2431
self.assertIs(None, feature.module)
2434
2498
class TestSelftestFiltering(tests.TestCase):
2436
2500
def setUp(self):
2615
2679
# the test framework
2616
2680
self.assertEquals('always fails', str(e))
2617
2681
# check that there's no traceback in the test log
2618
self.assertNotContainsRe(self.get_log(), r'Traceback')
2682
self.assertNotContainsRe(self._get_log(keep_log_file=True),
2620
2685
def test_run_bzr_user_error_caught(self):
2621
2686
# Running bzr in blackbox mode, normal/expected/user errors should be
2622
2687
# caught in the regular way and turned into an error message plus exit
2624
transport_server = memory.MemoryServer()
2625
transport_server.start_server()
2626
self.addCleanup(transport_server.stop_server)
2689
transport_server = MemoryServer()
2690
transport_server.setUp()
2691
self.addCleanup(transport_server.tearDown)
2627
2692
url = transport_server.get_url()
2628
2693
self.permit_url(url)
2629
2694
out, err = self.run_bzr(["log", "%s/nonexistantpath" % url], retcode=3)
2789
2850
# test doubles that supply a few sample tests to load, and check they
2792
def testmod_names():
2853
def _test_suite_testmod_names():
2793
2854
calls.append("testmod_names")
2795
2856
'bzrlib.tests.blackbox.test_branch',
2796
2857
'bzrlib.tests.per_transport',
2797
2858
'bzrlib.tests.test_selftest',
2799
self.overrideAttr(tests, '_test_suite_testmod_names', testmod_names)
2860
original_testmod_names = tests._test_suite_testmod_names
2861
def _test_suite_modules_to_doctest():
2801
2862
calls.append("modules_to_doctest")
2804
2863
return ['bzrlib.timestamp']
2805
self.overrideAttr(tests, '_test_suite_modules_to_doctest', doctests)
2864
orig_modules_to_doctest = tests._test_suite_modules_to_doctest
2865
def restore_names():
2866
tests._test_suite_testmod_names = original_testmod_names
2867
tests._test_suite_modules_to_doctest = orig_modules_to_doctest
2868
self.addCleanup(restore_names)
2869
tests._test_suite_testmod_names = _test_suite_testmod_names
2870
tests._test_suite_modules_to_doctest = _test_suite_modules_to_doctest
2806
2871
expected_test_list = [
2807
2872
# testmod_names
2808
2873
'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
2809
2874
('bzrlib.tests.per_transport.TransportTests'
2810
2875
'.test_abspath(LocalTransport,LocalURLServer)'),
2811
2876
'bzrlib.tests.test_selftest.TestTestSuite.test_test_suite',
2877
# modules_to_doctest
2878
'bzrlib.timestamp.format_highres_date',
2812
2879
# plugins can't be tested that way since selftest may be run with
2815
if __doc__ is not None:
2816
expected_test_list.extend([
2817
# modules_to_doctest
2818
'bzrlib.timestamp.format_highres_date',
2820
2882
suite = tests.test_suite()
2821
2883
self.assertEqual(set(["testmod_names", "modules_to_doctest"]),