/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: Vincent Ladeuil
  • Date: 2010-01-25 15:55:48 UTC
  • mto: (4985.1.4 add-attr-cleanup)
  • mto: This revision was merged to the branch mainline in revision 4988.
  • Revision ID: v.ladeuil+lp@free.fr-20100125155548-0l352pujvt5bzl5e
Deploy addAttrCleanup on the whole test suite.

Several use case worth mentioning:

- setting a module or any other object attribute is the majority
by far. In some cases the setting itself is deferred but most of
the time we want to set at the same time we add the cleanup.

- there multiple occurrences of protecting hooks or ui factory
which are now useless (the test framework takes care of that now),

- there was some lambda uses that can now be avoided.

That first cleanup already simplifies things a lot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
63
63
from bzrlib.tests import (
64
64
    features,
65
65
    test_lsprof,
66
 
    test_server,
67
66
    test_sftp_transport,
68
67
    TestUtil,
69
68
    )
70
69
from bzrlib.trace import note
71
 
from bzrlib.transport import memory
 
70
from bzrlib.transport.memory import MemoryServer, MemoryTransport
72
71
from bzrlib.version import _get_bzr_source_tree
73
72
 
74
73
 
622
621
 
623
622
    def test_get_readonly_url_none(self):
624
623
        from bzrlib.transport import get_transport
 
624
        from bzrlib.transport.memory import MemoryServer
625
625
        from bzrlib.transport.readonly import ReadonlyTransportDecorator
626
 
        self.vfs_transport_factory = memory.MemoryServer
 
626
        self.vfs_transport_factory = MemoryServer
627
627
        self.transport_readonly_server = None
628
628
        # calling get_readonly_transport() constructs a decorator on the url
629
629
        # for the server
638
638
    def test_get_readonly_url_http(self):
639
639
        from bzrlib.tests.http_server import HttpServer
640
640
        from bzrlib.transport import get_transport
 
641
        from bzrlib.transport.local import LocalURLServer
641
642
        from bzrlib.transport.http import HttpTransportBase
642
 
        self.transport_server = test_server.LocalURLServer
 
643
        self.transport_server = LocalURLServer
643
644
        self.transport_readonly_server = HttpServer
644
645
        # calling get_readonly_transport() gives us a HTTP server instance.
645
646
        url = self.get_readonly_url()
676
677
 
677
678
    def setUp(self):
678
679
        super(TestTestCaseTransports, self).setUp()
679
 
        self.vfs_transport_factory = memory.MemoryServer
 
680
        self.vfs_transport_factory = MemoryServer
680
681
 
681
682
    def test_make_bzrdir_preserves_transport(self):
682
683
        t = self.get_transport()
683
684
        result_bzrdir = self.make_bzrdir('subdir')
684
685
        self.assertIsInstance(result_bzrdir.transport,
685
 
                              memory.MemoryTransport)
 
686
                              MemoryTransport)
686
687
        # should not be on disk, should only be in memory
687
688
        self.failIfExists('subdir')
688
689
 
753
754
    def _patch_get_bzr_source_tree(self):
754
755
        # Reading from the actual source tree breaks isolation, but we don't
755
756
        # want to assume that thats *all* that would happen.
756
 
        self.overrideAttr(bzrlib.version, '_get_bzr_source_tree', lambda: None)
 
757
        def _get_bzr_source_tree():
 
758
            return None
 
759
        self.addAttrCleanup(bzrlib.version, '_get_bzr_source_tree')
 
760
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
757
761
 
758
762
    def test_assigned_benchmark_file_stores_date(self):
759
763
        self._patch_get_bzr_source_tree()
1194
1198
        # Reading from the actual source tree breaks isolation, but we don't
1195
1199
        # want to assume that thats *all* that would happen.
1196
1200
        self._get_source_tree_calls = []
1197
 
        def new_get():
 
1201
        def _get_bzr_source_tree():
1198
1202
            self._get_source_tree_calls.append("called")
1199
1203
            return None
1200
 
        self.overrideAttr(bzrlib.version, '_get_bzr_source_tree',  new_get)
 
1204
        self.addAttrCleanup(bzrlib.version, '_get_bzr_source_tree')
 
1205
        bzrlib.version._get_bzr_source_tree = _get_bzr_source_tree
1201
1206
 
1202
1207
    def test_bench_history(self):
1203
1208
        # tests that the running the benchmark passes bench_history into
1311
1316
        self.assertEqual(flags, bzrlib.debug.debug_flags)
1312
1317
 
1313
1318
    def change_selftest_debug_flags(self, new_flags):
1314
 
        self.overrideAttr(tests, 'selftest_debug_flags', set(new_flags))
 
1319
        self.addAttrCleanup(tests, 'selftest_debug_flags')
 
1320
        tests.selftest_debug_flags = set(new_flags)
1315
1321
 
1316
1322
    def test_allow_debug_flag(self):
1317
1323
        """The -Eallow_debug flag prevents bzrlib.debug.debug_flags from being
1468
1474
        # permitted.
1469
1475
        # Manually set one up (TestCase doesn't and shouldn't provide magic
1470
1476
        # machinery)
1471
 
        transport_server = memory.MemoryServer()
 
1477
        transport_server = MemoryServer()
1472
1478
        transport_server.start_server()
1473
1479
        self.addCleanup(transport_server.stop_server)
1474
1480
        t = transport.get_transport(transport_server.get_url())
1556
1562
            result.calls)
1557
1563
 
1558
1564
    def test_start_server_registers_url(self):
1559
 
        transport_server = memory.MemoryServer()
 
1565
        transport_server = MemoryServer()
1560
1566
        # A little strict, but unlikely to be changed soon.
1561
1567
        self.assertEqual([], self._bzr_selftest_roots)
1562
1568
        self.start_server(transport_server)
1618
1624
        self.assertRaises(AssertionError,
1619
1625
            self.assertListRaises, _TestException, success_generator)
1620
1626
 
1621
 
    def test_overrideAttr_without_value(self):
 
1627
    def test_addAttrCleanup(self):
1622
1628
        self.test_attr = 'original' # Define a test attribute
1623
1629
        obj = self # Make 'obj' visible to the embedded test
1624
1630
        class Test(tests.TestCase):
1625
1631
 
1626
1632
            def setUp(self):
1627
1633
                tests.TestCase.setUp(self)
1628
 
                self.orig = self.overrideAttr(obj, 'test_attr')
1629
 
 
1630
 
            def test_value(self):
1631
 
                self.assertEqual('original', self.orig)
1632
 
                self.assertEqual('original', obj.test_attr)
 
1634
                self.orig = self.addAttrCleanup(obj, 'test_attr')
1633
1635
                obj.test_attr = 'modified'
1634
 
                self.assertEqual('modified', obj.test_attr)
1635
 
 
1636
 
        test = Test('test_value')
1637
 
        test.run(unittest.TestResult())
1638
 
        self.assertEqual('original', obj.test_attr)
1639
 
 
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):
1644
 
 
1645
 
            def setUp(self):
1646
 
                tests.TestCase.setUp(self)
1647
 
                self.orig = self.overrideAttr(obj, 'test_attr', new='modified')
1648
1636
 
1649
1637
            def test_value(self):
1650
1638
                self.assertEqual('original', self.orig)
1803
1791
        # make_branch_and_tree has to use local branch and repositories
1804
1792
        # when the vfs transport and local disk are colocated, even if
1805
1793
        # a different transport is in use for url generation.
1806
 
        self.transport_server = test_server.FakeVFATServer
 
1794
        from bzrlib.transport.fakevfat import FakeVFATServer
 
1795
        self.transport_server = FakeVFATServer
1807
1796
        self.assertFalse(self.get_url('t1').startswith('file://'))
1808
1797
        tree = self.make_branch_and_tree('t1')
1809
1798
        base = tree.bzrdir.root_transport.base
1946
1935
 
1947
1936
    def test_transport_sftp(self):
1948
1937
        self.requireFeature(features.paramiko)
1949
 
        from bzrlib.tests import stub_sftp
1950
 
        self.check_transport_set(stub_sftp.SFTPAbsoluteServer)
 
1938
        self.check_transport_set(bzrlib.transport.sftp.SFTPAbsoluteServer)
1951
1939
 
1952
1940
    def test_transport_memory(self):
1953
 
        self.check_transport_set(memory.MemoryServer)
 
1941
        self.check_transport_set(bzrlib.transport.memory.MemoryServer)
1954
1942
 
1955
1943
 
1956
1944
class TestSelftestWithIdList(tests.TestCaseInTempDir, SelfTestHelper):
2399
2387
 
2400
2388
 
2401
2389
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'
2406
 
    )
 
2390
    'bzrlib.tests', 'UnicodeFilename',
 
2391
    'bzrlib.tests.test_selftest.simple_thunk_feature',
 
2392
    deprecated_in((2,1,0)))
2407
2393
 
2408
2394
class Test_CompatibilityFeature(tests.TestCase):
2409
2395
 
2414
2400
            simple_thunk_feature.available)
2415
2401
        self.assertEqual(tests.UnicodeFilename.available(), res)
2416
2402
 
2417
 
 
 
2403
        
2418
2404
class TestModuleAvailableFeature(tests.TestCase):
2419
2405
 
2420
2406
    def test_available_module(self):
2621
2607
        # Running bzr in blackbox mode, normal/expected/user errors should be
2622
2608
        # caught in the regular way and turned into an error message plus exit
2623
2609
        # code.
2624
 
        transport_server = memory.MemoryServer()
 
2610
        transport_server = MemoryServer()
2625
2611
        transport_server.start_server()
2626
2612
        self.addCleanup(transport_server.stop_server)
2627
2613
        url = transport_server.get_url()
2773
2759
        # Test that a plausible list of modules to doctest is returned
2774
2760
        # by _test_suite_modules_to_doctest.
2775
2761
        test_list = tests._test_suite_modules_to_doctest()
2776
 
        if __doc__ is None:
2777
 
            # When docstrings are stripped, there are no modules to doctest
2778
 
            self.assertEqual([], test_list)
2779
 
            return
2780
2762
        self.assertSubset([
2781
2763
            'bzrlib.timestamp',
2782
2764
            ],
2789
2771
        # test doubles that supply a few sample tests to load, and check they
2790
2772
        # are loaded.
2791
2773
        calls = []
2792
 
        def testmod_names():
 
2774
        def _test_suite_testmod_names():
2793
2775
            calls.append("testmod_names")
2794
2776
            return [
2795
2777
                'bzrlib.tests.blackbox.test_branch',
2796
2778
                'bzrlib.tests.per_transport',
2797
2779
                'bzrlib.tests.test_selftest',
2798
2780
                ]
2799
 
        self.overrideAttr(tests, '_test_suite_testmod_names', testmod_names)
2800
 
        def doctests():
 
2781
        self.addAttrCleanup(tests, '_test_suite_testmod_names')
 
2782
        self.addAttrCleanup(tests, '_test_suite_modules_to_doctest')
 
2783
        def _test_suite_modules_to_doctest():
2801
2784
            calls.append("modules_to_doctest")
2802
 
            if __doc__ is None:
2803
 
                return []
2804
2785
            return ['bzrlib.timestamp']
2805
 
        self.overrideAttr(tests, '_test_suite_modules_to_doctest', doctests)
 
2786
        tests._test_suite_testmod_names = _test_suite_testmod_names
 
2787
        tests._test_suite_modules_to_doctest = _test_suite_modules_to_doctest
2806
2788
        expected_test_list = [
2807
2789
            # testmod_names
2808
2790
            'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
2809
2791
            ('bzrlib.tests.per_transport.TransportTests'
2810
2792
             '.test_abspath(LocalTransport,LocalURLServer)'),
2811
2793
            'bzrlib.tests.test_selftest.TestTestSuite.test_test_suite',
 
2794
            # modules_to_doctest
 
2795
            'bzrlib.timestamp.format_highres_date',
2812
2796
            # plugins can't be tested that way since selftest may be run with
2813
2797
            # --no-plugins
2814
2798
            ]
2815
 
        if __doc__ is not None:
2816
 
            expected_test_list.extend([
2817
 
                # modules_to_doctest
2818
 
                'bzrlib.timestamp.format_highres_date',
2819
 
                ])
2820
2799
        suite = tests.test_suite()
2821
2800
        self.assertEqual(set(["testmod_names", "modules_to_doctest"]),
2822
2801
            set(calls))