323
327
self.assertEqual(tests[1].transport_readonly_server, server2)
330
class TestTreeProviderAdapter(TestCase):
331
"""Test the setup of tree_implementation tests."""
333
def test_adapted_tests(self):
334
# the tree implementation adapter is meant to setup one instance for
335
# each working tree format, and one additional instance that will
336
# use the default wt format, but create a revision tree for the tests.
337
# this means that the wt ones should have the workingtree_to_test_tree
338
# attribute set to 'return_parameter' and the revision one set to
339
# revision_tree_from_workingtree.
341
from bzrlib.tests.tree_implementations import (
342
TreeTestProviderAdapter,
344
revision_tree_from_workingtree
346
from bzrlib.workingtree import WorkingTreeFormat
347
input_test = TestTreeProviderAdapter(
348
"test_adapted_tests")
351
formats = [("c", "C"), ("d", "D")]
352
adapter = TreeTestProviderAdapter(server1, server2, formats)
353
suite = adapter.adapt(input_test)
354
tests = list(iter(suite))
355
self.assertEqual(3, len(tests))
356
default_format = WorkingTreeFormat.get_default_format()
357
self.assertEqual(tests[0].workingtree_format, formats[0][0])
358
self.assertEqual(tests[0].bzrdir_format, formats[0][1])
359
self.assertEqual(tests[0].transport_server, server1)
360
self.assertEqual(tests[0].transport_readonly_server, server2)
361
self.assertEqual(tests[0].workingtree_to_test_tree, return_parameter)
362
self.assertEqual(tests[1].workingtree_format, formats[1][0])
363
self.assertEqual(tests[1].bzrdir_format, formats[1][1])
364
self.assertEqual(tests[1].transport_server, server1)
365
self.assertEqual(tests[1].transport_readonly_server, server2)
366
self.assertEqual(tests[1].workingtree_to_test_tree, return_parameter)
367
self.assertEqual(tests[2].workingtree_format, default_format)
368
self.assertEqual(tests[2].bzrdir_format, default_format._matchingbzrdir)
369
self.assertEqual(tests[2].transport_server, server1)
370
self.assertEqual(tests[2].transport_readonly_server, server2)
371
self.assertEqual(tests[2].workingtree_to_test_tree,
372
revision_tree_from_workingtree)
375
class TestInterTreeProviderAdapter(TestCase):
376
"""A group of tests that test the InterTreeTestAdapter."""
378
def test_adapted_tests(self):
379
# check that constructor parameters are passed through to the adapted
381
# for InterTree tests we want the machinery to bring up two trees in
382
# each instance: the base one, and the one we are interacting with.
383
# because each optimiser can be direction specific, we need to test
384
# each optimiser in its chosen direction.
385
# unlike the TestProviderAdapter we dont want to automatically add a
386
# parameterised one for WorkingTree - the optimisers will tell us what
388
from bzrlib.tests.tree_implementations import (
390
revision_tree_from_workingtree
392
from bzrlib.tests.intertree_implementations import (
393
InterTreeTestProviderAdapter,
395
from bzrlib.workingtree import WorkingTreeFormat2, WorkingTreeFormat3
396
input_test = TestInterTreeProviderAdapter(
397
"test_adapted_tests")
400
format1 = WorkingTreeFormat2()
401
format2 = WorkingTreeFormat3()
402
formats = [(str, format1, format2, False, True),
403
(int, format2, format1, False, True)]
404
adapter = InterTreeTestProviderAdapter(server1, server2, formats)
405
suite = adapter.adapt(input_test)
406
tests = list(iter(suite))
407
self.assertEqual(2, len(tests))
408
self.assertEqual(tests[0].intertree_class, formats[0][0])
409
self.assertEqual(tests[0].workingtree_format, formats[0][1])
410
self.assertEqual(tests[0].workingtree_to_test_tree, formats[0][2])
411
self.assertEqual(tests[0].workingtree_format_to, formats[0][3])
412
self.assertEqual(tests[0].workingtree_to_test_tree_to, formats[0][4])
413
self.assertEqual(tests[0].transport_server, server1)
414
self.assertEqual(tests[0].transport_readonly_server, server2)
415
self.assertEqual(tests[1].intertree_class, formats[1][0])
416
self.assertEqual(tests[1].workingtree_format, formats[1][1])
417
self.assertEqual(tests[1].workingtree_to_test_tree, formats[1][2])
418
self.assertEqual(tests[1].workingtree_format_to, formats[1][3])
419
self.assertEqual(tests[1].workingtree_to_test_tree_to, formats[1][4])
420
self.assertEqual(tests[1].transport_server, server1)
421
self.assertEqual(tests[1].transport_readonly_server, server2)
424
class TestTestCaseInTempDir(TestCaseInTempDir):
426
def test_home_is_not_working(self):
427
self.assertNotEqual(self.test_dir, self.test_home_dir)
428
cwd = osutils.getcwd()
429
self.assertEqual(self.test_dir, cwd)
430
self.assertEqual(self.test_home_dir, os.environ['HOME'])
326
433
class TestTestCaseWithTransport(TestCaseWithTransport):
327
434
"""Tests for the convenience functions TestCaseWithTransport introduces."""
405
515
mypb = MockProgress()
406
516
mypb.update('Running tests', 0, 4)
407
517
last_calls = mypb.calls[:]
408
519
result = bzrlib.tests._MyResult(self._log_file,
412
523
self.assertEqual(last_calls, mypb.calls)
526
"""Shorten a string based on the terminal width"""
527
return result._ellipsise_unimportant_words(s,
528
osutils.terminal_width())
415
531
result.startTest(dummy_test)
416
532
# starting a test prints the test name
417
self.assertEqual(last_calls + [('update', '...tyle_quiet', 0, None)], mypb.calls)
418
last_calls = mypb.calls[:]
533
last_calls += [('update', '...tyle_quiet', 0, None)]
534
self.assertEqual(last_calls, mypb.calls)
419
535
result.addError(dummy_test, dummy_error)
420
self.assertEqual(last_calls + [('update', 'ERROR ', 1, None)], mypb.calls)
421
last_calls = mypb.calls[:]
536
last_calls += [('update', 'ERROR ', 1, None),
537
('note', shorten(dummy_test.id() + ': ERROR'), ())
539
self.assertEqual(last_calls, mypb.calls)
424
542
result.startTest(dummy_test)
425
self.assertEqual(last_calls + [('update', '...tyle_quiet', 1, None)], mypb.calls)
426
last_calls = mypb.calls[:]
543
last_calls += [('update', '...tyle_quiet', 1, None)]
544
self.assertEqual(last_calls, mypb.calls)
545
last_calls += [('update', 'FAIL ', 2, None),
546
('note', shorten(dummy_test.id() + ': FAIL'), ())
427
548
result.addFailure(dummy_test, dummy_error)
428
self.assertEqual(last_calls + [('update', 'FAIL ', 2, None)], mypb.calls)
429
last_calls = mypb.calls[:]
549
self.assertEqual(last_calls, mypb.calls)
432
552
result.startTest(dummy_test)
433
self.assertEqual(last_calls + [('update', '...tyle_quiet', 2, None)], mypb.calls)
434
last_calls = mypb.calls[:]
553
last_calls += [('update', '...tyle_quiet', 2, None)]
554
self.assertEqual(last_calls, mypb.calls)
435
555
result.addSuccess(dummy_test)
436
self.assertEqual(last_calls + [('update', 'OK ', 3, None)], mypb.calls)
437
last_calls = mypb.calls[:]
556
last_calls += [('update', 'OK ', 3, None)]
557
self.assertEqual(last_calls, mypb.calls)
440
560
result.startTest(dummy_test)
441
self.assertEqual(last_calls + [('update', '...tyle_quiet', 3, None)], mypb.calls)
442
last_calls = mypb.calls[:]
561
last_calls += [('update', '...tyle_quiet', 3, None)]
562
self.assertEqual(last_calls, mypb.calls)
443
563
result.addSkipped(dummy_test, dummy_error)
444
self.assertEqual(last_calls + [('update', 'SKIP ', 4, None)], mypb.calls)
445
last_calls = mypb.calls[:]
564
last_calls += [('update', 'SKIP ', 4, None)]
565
self.assertEqual(last_calls, mypb.calls)
447
567
def test_elapsed_time_with_benchmarking(self):
448
568
result = bzrlib.tests._MyResult(self._log_file,
469
589
# cheat. Yes, wash thy mouth out with soap.
470
590
self._benchtime = None
592
def test_assigned_benchmark_file_stores_date(self):
594
result = bzrlib.tests._MyResult(self._log_file,
599
output_string = output.getvalue()
600
# if you are wondering about the regexp please read the comment in
601
# test_bench_history (bzrlib.tests.test_selftest.TestRunner)
602
# XXX: what comment? -- Andrew Bennetts
603
self.assertContainsRe(output_string, "--date [0-9.]+")
605
def test_benchhistory_records_test_times(self):
606
result_stream = StringIO()
607
result = bzrlib.tests._MyResult(
611
bench_history=result_stream
614
# we want profile a call and check that its test duration is recorded
615
# make a new test instance that when run will generate a benchmark
616
example_test_case = TestTestResult("_time_hello_world_encoding")
617
# execute the test, which should succeed and record times
618
example_test_case.run(result)
619
lines = result_stream.getvalue().splitlines()
620
self.assertEqual(2, len(lines))
621
self.assertContainsRe(lines[1],
622
" *[0-9]+ms bzrlib.tests.test_selftest.TestTestResult"
623
"._time_hello_world_encoding")
472
625
def _time_hello_world_encoding(self):
473
626
"""Profile two sleep calls
641
809
self.assertIsInstance(self._benchcalls[1][1], bzrlib.lsprof.Stats)
812
@symbol_versioning.deprecated_function(zero_eleven)
813
def sample_deprecated_function():
814
"""A deprecated function to test applyDeprecated with."""
818
def sample_undeprecated_function(a_param):
819
"""A undeprecated function to test applyDeprecated with."""
822
class ApplyDeprecatedHelper(object):
823
"""A helper class for ApplyDeprecated tests."""
825
@symbol_versioning.deprecated_method(zero_eleven)
826
def sample_deprecated_method(self, param_one):
827
"""A deprecated method for testing with."""
830
def sample_normal_method(self):
831
"""A undeprecated method."""
833
@symbol_versioning.deprecated_method(zero_ten)
834
def sample_nested_deprecation(self):
835
return sample_deprecated_function()
644
838
class TestExtraAssertions(TestCase):
645
839
"""Tests for new test assertions in bzrlib test suite"""
654
848
self.assertEndsWith('foo', 'oo')
655
849
self.assertRaises(AssertionError, self.assertEndsWith, 'o', 'oo')
851
def test_applyDeprecated_not_deprecated(self):
852
sample_object = ApplyDeprecatedHelper()
853
# calling an undeprecated callable raises an assertion
854
self.assertRaises(AssertionError, self.applyDeprecated, zero_eleven,
855
sample_object.sample_normal_method)
856
self.assertRaises(AssertionError, self.applyDeprecated, zero_eleven,
857
sample_undeprecated_function, "a param value")
858
# calling a deprecated callable (function or method) with the wrong
859
# expected deprecation fails.
860
self.assertRaises(AssertionError, self.applyDeprecated, zero_ten,
861
sample_object.sample_deprecated_method, "a param value")
862
self.assertRaises(AssertionError, self.applyDeprecated, zero_ten,
863
sample_deprecated_function)
864
# calling a deprecated callable (function or method) with the right
865
# expected deprecation returns the functions result.
866
self.assertEqual("a param value", self.applyDeprecated(zero_eleven,
867
sample_object.sample_deprecated_method, "a param value"))
868
self.assertEqual(2, self.applyDeprecated(zero_eleven,
869
sample_deprecated_function))
870
# calling a nested deprecation with the wrong deprecation version
871
# fails even if a deeper nested function was deprecated with the
873
self.assertRaises(AssertionError, self.applyDeprecated,
874
zero_eleven, sample_object.sample_nested_deprecation)
875
# calling a nested deprecation with the right deprecation value
876
# returns the calls result.
877
self.assertEqual(2, self.applyDeprecated(zero_ten,
878
sample_object.sample_nested_deprecation))
880
def test_callDeprecated(self):
881
def testfunc(be_deprecated, result=None):
882
if be_deprecated is True:
883
symbol_versioning.warn('i am deprecated', DeprecationWarning,
886
result = self.callDeprecated(['i am deprecated'], testfunc, True)
887
self.assertIs(None, result)
888
result = self.callDeprecated([], testfunc, False, 'result')
889
self.assertEqual('result', result)
890
self.callDeprecated(['i am deprecated'], testfunc, be_deprecated=True)
891
self.callDeprecated([], testfunc, be_deprecated=False)
658
894
class TestConvenienceMakers(TestCaseWithTransport):
659
895
"""Test for the make_* convenience functions."""
681
917
self.apply_redirected(out, err, None, bzrlib.tests.selftest,
682
918
test_suite_factory=factory)
683
919
self.assertEqual([True], factory_called)
685
def test_run_bzr_subprocess(self):
686
"""The run_bzr_helper_external comand behaves nicely."""
687
result = self.run_bzr_subprocess('--version')
688
result = self.run_bzr_subprocess('--version', retcode=None)
689
self.assertContainsRe(result[0], 'is free software')
690
self.assertRaises(AssertionError, self.run_bzr_subprocess,
692
result = self.run_bzr_subprocess('--versionn', retcode=3)
693
result = self.run_bzr_subprocess('--versionn', retcode=None)
694
self.assertContainsRe(result[1], 'unknown command')
695
err = self.run_bzr_subprocess('merge', '--merge-type', 'magic merge',
697
self.assertContainsRe(err, 'No known merge type magic merge')
699
def test_run_bzr_error(self):
700
out, err = self.run_bzr_error(['^$'], 'rocks', retcode=0)
701
self.assertEqual(out, 'it sure does!\n')
703
out, err = self.run_bzr_error(["'foobarbaz' is not a versioned file"],
704
'file-id', 'foobarbaz')