~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
    osutils,
33
33
    repository,
34
34
    symbol_versioning,
 
35
    tests,
35
36
    )
36
37
from bzrlib.progress import _BaseProgressBar
37
38
from bzrlib.repofmt import weaverepo
1220
1221
            revision_id = workingtree.get_parent_ids()[0]
1221
1222
            self.assertEndsWith(output_string.rstrip(), revision_id)
1222
1223
 
 
1224
    def assertLogDeleted(self, test):
 
1225
        log = test._get_log()
 
1226
        self.assertEqual("DELETED log file to reduce memory footprint", log)
 
1227
        self.assertEqual('', test._log_contents)
 
1228
        self.assertIs(None, test._log_file_name)
 
1229
 
1223
1230
    def test_success_log_deleted(self):
1224
1231
        """Successful tests have their log deleted"""
1225
1232
 
1233
1240
        test = LogTester('test_success')
1234
1241
        result = self.run_test_runner(runner, test)
1235
1242
 
1236
 
        log = test._get_log()
1237
 
        self.assertEqual("DELETED log file to reduce memory footprint", log)
1238
 
        self.assertEqual('', test._log_contents)
1239
 
        self.assertIs(None, test._log_file_name)
 
1243
        self.assertLogDeleted(test)
 
1244
 
 
1245
    def test_skipped_log_deleted(self):
 
1246
        """Skipped tests have their log deleted"""
 
1247
 
 
1248
        class LogTester(TestCase):
 
1249
 
 
1250
            def test_skipped(self):
 
1251
                self.log('this will be removed\n')
 
1252
                raise tests.TestSkipped()
 
1253
 
 
1254
        sio = cStringIO.StringIO()
 
1255
        runner = TextTestRunner(stream=sio)
 
1256
        test = LogTester('test_skipped')
 
1257
        result = self.run_test_runner(runner, test)
 
1258
 
 
1259
        self.assertLogDeleted(test)
 
1260
 
 
1261
    def test_not_aplicable_log_deleted(self):
 
1262
        """Not applicable tests have their log deleted"""
 
1263
 
 
1264
        class LogTester(TestCase):
 
1265
 
 
1266
            def test_not_applicable(self):
 
1267
                self.log('this will be removed\n')
 
1268
                raise tests.TestNotApplicable()
 
1269
 
 
1270
        sio = cStringIO.StringIO()
 
1271
        runner = TextTestRunner(stream=sio)
 
1272
        test = LogTester('test_not_applicable')
 
1273
        result = self.run_test_runner(runner, test)
 
1274
 
 
1275
        self.assertLogDeleted(test)
 
1276
 
 
1277
    def test_known_failure_log_deleted(self):
 
1278
        """Know failure tests have their log deleted"""
 
1279
 
 
1280
        class LogTester(TestCase):
 
1281
 
 
1282
            def test_known_failure(self):
 
1283
                self.log('this will be removed\n')
 
1284
                raise tests.KnownFailure()
 
1285
 
 
1286
        sio = cStringIO.StringIO()
 
1287
        runner = TextTestRunner(stream=sio)
 
1288
        test = LogTester('test_known_failure')
 
1289
        result = self.run_test_runner(runner, test)
 
1290
 
 
1291
        self.assertLogDeleted(test)
1240
1292
 
1241
1293
    def test_fail_log_kept(self):
1242
1294
        """Failed tests have their log kept"""
1682
1734
            condition_id_re('test_condition_id_re'))
1683
1735
        self.assertEqual([test_name], self._test_ids(filtered_suite))
1684
1736
 
 
1737
    def test_condition_id_in_list(self):
 
1738
        test_names = ['bzrlib.tests.test_selftest.TestSelftestFiltering.'
 
1739
                      'test_condition_id_in_list']
 
1740
        id_list = tests.TestIdList(test_names)
 
1741
        filtered_suite = filter_suite_by_condition(
 
1742
            self.suite, tests.condition_id_in_list(id_list))
 
1743
        my_pattern = 'TestSelftestFiltering.*test_condition_id_in_list'
 
1744
        re_filtered = filter_suite_by_re(self.suite, my_pattern)
 
1745
        self.assertEqual(self._test_ids(re_filtered),
 
1746
                         self._test_ids(filtered_suite))
 
1747
 
1685
1748
    def test_condition_isinstance(self):
1686
1749
        filtered_suite = filter_suite_by_condition(self.suite,
1687
1750
            condition_isinstance(self.__class__))
1727
1790
        self.assertEqual(filtered_names, ['bzrlib.tests.test_selftest.'
1728
1791
            'TestSelftestFiltering.test_filter_suite_by_re'])
1729
1792
 
 
1793
    def test_filter_suite_by_id_list(self):
 
1794
        test_list = ['bzrlib.tests.test_selftest.'
 
1795
                     'TestSelftestFiltering.test_filter_suite_by_id_list']
 
1796
        filtered_suite = tests.filter_suite_by_id_list(
 
1797
            self.suite, tests.TestIdList(test_list))
 
1798
        filtered_names = self._test_ids(filtered_suite)
 
1799
        self.assertEqual(
 
1800
            filtered_names,
 
1801
            ['bzrlib.tests.test_selftest.'
 
1802
             'TestSelftestFiltering.test_filter_suite_by_id_list'])
 
1803
 
1730
1804
    def test_preserve_input(self):
1731
1805
        # NB: Surely this is something in the stdlib to do this?
1732
1806
        self.assertTrue(self.suite is preserve_input(self.suite))
1842
1916
        module.__class__.load_tests = load_tests
1843
1917
        self.assertEqual(2, loader.loadTestsFromModule(module).countTestCases())
1844
1918
 
 
1919
 
 
1920
class TestTestIdList(tests.TestCase):
 
1921
 
 
1922
    def _create_id_list(self, test_list):
 
1923
        return tests.TestIdList(test_list)
 
1924
 
 
1925
    def _create_suite(self, test_id_list):
 
1926
 
 
1927
        class Stub(TestCase):
 
1928
            def test_foo(self):
 
1929
                pass
 
1930
 
 
1931
        def _create_test_id(id):
 
1932
            return lambda: id
 
1933
 
 
1934
        suite = TestUtil.TestSuite()
 
1935
        for id in test_id_list:
 
1936
            t  = Stub('test_foo')
 
1937
            t.id = _create_test_id(id)
 
1938
            suite.addTest(t)
 
1939
        return suite
 
1940
 
 
1941
    def _test_ids(self, test_suite):
 
1942
        """Get the ids for the tests in a test suite."""
 
1943
        return [t.id() for t in iter_suite_tests(test_suite)]
 
1944
 
 
1945
    def test_empty_list(self):
 
1946
        id_list = self._create_id_list([])
 
1947
        self.assertEquals({}, id_list.tests)
 
1948
        self.assertEquals({}, id_list.modules)
 
1949
 
 
1950
    def test_valid_list(self):
 
1951
        id_list = self._create_id_list(
 
1952
            ['mod1.cl1.meth1', 'mod1.cl1.meth2',
 
1953
             'mod1.func1', 'mod1.cl2.meth2',
 
1954
             'mod1.submod1',
 
1955
             'mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2',
 
1956
             ])
 
1957
        self.assertTrue(id_list.is_module_name_used('mod1'))
 
1958
        self.assertTrue(id_list.is_module_name_used('mod1.submod1'))
 
1959
        self.assertTrue(id_list.is_module_name_used('mod1.submod2'))
 
1960
        self.assertTrue(id_list.test_in('mod1.cl1.meth1'))
 
1961
        self.assertTrue(id_list.test_in('mod1.submod1'))
 
1962
        self.assertTrue(id_list.test_in('mod1.func1'))
 
1963
 
 
1964
    def test_bad_chars_in_params(self):
 
1965
        id_list = self._create_id_list(['mod1.cl1.meth1(xx.yy)'])
 
1966
        self.assertTrue(id_list.is_module_name_used('mod1'))
 
1967
        self.assertTrue(id_list.test_in('mod1.cl1.meth1(xx.yy)'))
 
1968
 
 
1969
    def test_module_used(self):
 
1970
        id_list = self._create_id_list(['mod.class.meth'])
 
1971
        self.assertTrue(id_list.is_module_name_used('mod'))
 
1972
        self.assertTrue(id_list.is_module_name_used('mod.class'))
 
1973
        self.assertTrue(id_list.is_module_name_used('mod.class.meth'))
 
1974
 
 
1975
    def test_test_suite(self):
 
1976
        # This test is slow, so we do a single test with one test in each
 
1977
        # category
 
1978
        test_list = [
 
1979
            # testmod_names
 
1980
            'bzrlib.tests.test_selftest.TestTestIdList.test_test_suite',
 
1981
            # transport implementations
 
1982
            'bzrlib.tests.test_transport_implementations.TransportTests'
 
1983
            '.test_abspath(LocalURLServer)',
 
1984
            # packages_to_test()
 
1985
            'bzrlib.tests.blackbox.test_branch.TestBranch.test_branch',
 
1986
            # MODULES_TO_DOCTEST
 
1987
            'bzrlib.timestamp.format_highres_date',
 
1988
            # plugins can't be tested that way since selftest may be run with
 
1989
            # --no-plugins
 
1990
            ]
 
1991
        suite = tests.test_suite(test_list)
 
1992
        self.assertEquals(test_list, self._test_ids(suite))
 
1993
 
 
1994
 
 
1995
class TestLoadTestIdList(tests.TestCaseInTempDir):
 
1996
 
 
1997
    def _create_test_list_file(self, file_name, content):
 
1998
        fl = open(file_name, 'wt')
 
1999
        fl.write(content)
 
2000
        fl.close()
 
2001
 
 
2002
    def test_load_unknown(self):
 
2003
        self.assertRaises(errors.NoSuchFile,
 
2004
                          tests.load_test_id_list, 'i_do_not_exist')
 
2005
 
 
2006
    def test_load_test_list(self):
 
2007
        test_list_fname = 'test.list'
 
2008
        self._create_test_list_file(test_list_fname,
 
2009
                                    'mod1.cl1.meth1\nmod2.cl2.meth2\n')
 
2010
        tlist = tests.load_test_id_list(test_list_fname)
 
2011
        self.assertEquals(2, len(tlist))
 
2012
        self.assertEquals('mod1.cl1.meth1', tlist[0])
 
2013
        self.assertEquals('mod2.cl2.meth2', tlist[1])
 
2014
 
 
2015
    def test_load_dirty_file(self):
 
2016
        test_list_fname = 'test.list'
 
2017
        self._create_test_list_file(test_list_fname,
 
2018
                                    '  mod1.cl1.meth1\n\nmod2.cl2.meth2  \n'
 
2019
                                    'bar baz\n')
 
2020
        tlist = tests.load_test_id_list(test_list_fname)
 
2021
        self.assertEquals(4, len(tlist))
 
2022
        self.assertEquals('mod1.cl1.meth1', tlist[0])
 
2023
        self.assertEquals('', tlist[1])
 
2024
        self.assertEquals('mod2.cl2.meth2', tlist[2])
 
2025
        self.assertEquals('bar baz', tlist[3])
 
2026
 
 
2027