~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_selftest.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-06-06 13:56:24 UTC
  • mfrom: (3477.1.2 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20080606135624-1ambbf8pct52xfh8
(jam) Move bzrlib.tests.test_diff.UnicodeFilename into
        bzrlib.tests.UnicodeFilenameFeature

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007 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
26
26
 
27
27
import bzrlib
28
28
from bzrlib import (
29
 
    branchbuilder,
30
29
    bzrdir,
31
30
    errors,
32
31
    memorytree,
33
32
    osutils,
34
 
    remote,
35
33
    repository,
36
34
    symbol_versioning,
37
35
    tests,
38
 
    workingtree,
39
36
    )
40
37
from bzrlib.progress import _BaseProgressBar
41
 
from bzrlib.repofmt import (
42
 
    pack_repo,
43
 
    weaverepo,
44
 
    )
 
38
from bzrlib.repofmt import weaverepo
45
39
from bzrlib.symbol_versioning import (
46
40
    one_zero,
47
41
    zero_eleven,
109
103
                              'a test message\n')
110
104
 
111
105
 
112
 
class TestUnicodeFilename(TestCase):
113
 
 
114
 
    def test_probe_passes(self):
115
 
        """UnicodeFilename._probe passes."""
116
 
        # We can't test much more than that because the behaviour depends
117
 
        # on the platform.
118
 
        tests.UnicodeFilename._probe()
119
 
 
120
 
 
121
106
class TestTreeShape(TestCaseInTempDir):
122
107
 
123
108
    def test_unicode_paths(self):
124
 
        self.requireFeature(tests.UnicodeFilename)
125
 
 
126
109
        filename = u'hell\u00d8'
127
 
        self.build_tree_contents([(filename, 'contents of hello')])
 
110
        try:
 
111
            self.build_tree_contents([(filename, 'contents of hello')])
 
112
        except UnicodeEncodeError:
 
113
            raise TestSkipped("can't build unicode working tree in "
 
114
                "filesystem encoding %s" % sys.getfilesystemencoding())
128
115
        self.failUnlessExists(filename)
129
116
 
130
117
 
250
237
class TestRepositoryParameterisation(TestCase):
251
238
    """A group of tests that test the repository implementation test adapter."""
252
239
 
 
240
    def test_setting_vfs_transport(self):
 
241
        """The vfs_transport_factory can be set optionally."""
 
242
        from bzrlib.tests.repository_implementations import formats_to_scenarios
 
243
        scenarios = formats_to_scenarios(
 
244
            [("a", "b"), ("c", "d")],
 
245
            None,
 
246
            None,
 
247
            vfs_transport_factory="vfs")
 
248
        self.assertEqual([
 
249
            ('str',
 
250
             {'bzrdir_format': 'b',
 
251
              'repository_format': 'a',
 
252
              'transport_readonly_server': None,
 
253
              'transport_server': None,
 
254
              'vfs_transport_factory': 'vfs'}),
 
255
            ('str',
 
256
             {'bzrdir_format': 'd',
 
257
              'repository_format': 'c',
 
258
              'transport_readonly_server': None,
 
259
              'transport_server': None,
 
260
              'vfs_transport_factory': 'vfs'})],
 
261
            scenarios)
 
262
 
253
263
    def test_formats_to_scenarios(self):
254
264
        """The adapter can generate all the scenarios needed."""
255
 
        from bzrlib.tests.per_repository import formats_to_scenarios
256
 
        formats = [("(c)", remote.RemoteRepositoryFormat()),
257
 
                   ("(d)", repository.format_registry.get(
258
 
                        'Bazaar pack repository format 1 (needs bzr 0.92)\n'))]
 
265
        from bzrlib.tests.repository_implementations import formats_to_scenarios
 
266
        formats = [("c", "C"), (1, "D")]
259
267
        no_vfs_scenarios = formats_to_scenarios(formats, "server", "readonly",
260
268
            None)
261
269
        vfs_scenarios = formats_to_scenarios(formats, "server", "readonly",
262
270
            vfs_transport_factory="vfs")
263
 
        # no_vfs generate scenarios without vfs_transport_factory
 
271
        # no_vfs generate scenarios without vfs_transport_factor
264
272
        self.assertEqual([
265
 
            ('RemoteRepositoryFormat(c)',
266
 
             {'bzrdir_format': remote.RemoteBzrDirFormat(),
267
 
              'repository_format': remote.RemoteRepositoryFormat(),
 
273
            ('str',
 
274
             {'bzrdir_format': 'C',
 
275
              'repository_format': 'c',
268
276
              'transport_readonly_server': 'readonly',
269
277
              'transport_server': 'server'}),
270
 
            ('RepositoryFormatKnitPack1(d)',
271
 
             {'bzrdir_format': bzrdir.BzrDirMetaFormat1(),
272
 
              'repository_format': pack_repo.RepositoryFormatKnitPack1(),
 
278
            ('int',
 
279
             {'bzrdir_format': 'D',
 
280
              'repository_format': 1,
273
281
              'transport_readonly_server': 'readonly',
274
282
              'transport_server': 'server'})],
275
283
            no_vfs_scenarios)
276
284
        self.assertEqual([
277
 
            ('RemoteRepositoryFormat(c)',
278
 
             {'bzrdir_format': remote.RemoteBzrDirFormat(),
279
 
              'repository_format': remote.RemoteRepositoryFormat(),
 
285
            ('str',
 
286
             {'bzrdir_format': 'C',
 
287
              'repository_format': 'c',
280
288
              'transport_readonly_server': 'readonly',
281
289
              'transport_server': 'server',
282
290
              'vfs_transport_factory': 'vfs'}),
283
 
            ('RepositoryFormatKnitPack1(d)',
284
 
             {'bzrdir_format': bzrdir.BzrDirMetaFormat1(),
285
 
              'repository_format': pack_repo.RepositoryFormatKnitPack1(),
 
291
            ('int',
 
292
             {'bzrdir_format': 'D',
 
293
              'repository_format': 1,
286
294
              'transport_readonly_server': 'readonly',
287
295
              'transport_server': 'server',
288
296
              'vfs_transport_factory': 'vfs'})],
293
301
    """Tests for the test adaption facilities."""
294
302
 
295
303
    def test_adapt_applies_scenarios(self):
296
 
        from bzrlib.tests.per_repository import TestScenarioApplier
 
304
        from bzrlib.tests.repository_implementations import TestScenarioApplier
297
305
        input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
298
306
        adapter = TestScenarioApplier()
299
307
        adapter.scenarios = [("1", "dict"), ("2", "settings")]
307
315
            (input_test, ("2", "settings"))], calls)
308
316
 
309
317
    def test_adapt_test_to_scenario(self):
310
 
        from bzrlib.tests.per_repository import TestScenarioApplier
 
318
        from bzrlib.tests.repository_implementations import TestScenarioApplier
311
319
        input_test = TestTestScenarioApplier("test_adapt_test_to_scenario")
312
320
        adapter = TestScenarioApplier()
313
321
        # setup two adapted tests
368
376
            adapter.formats_to_scenarios(formats))
369
377
 
370
378
 
 
379
class TestInterVersionedFileProviderAdapter(TestCase):
 
380
    """A group of tests that test the InterVersionedFile test adapter."""
 
381
 
 
382
    def test_scenarios(self):
 
383
        # check that constructor parameters are passed through to the adapted
 
384
        # test.
 
385
        from bzrlib.tests.interversionedfile_implementations \
 
386
            import InterVersionedFileTestProviderAdapter
 
387
        server1 = "a"
 
388
        server2 = "b"
 
389
        formats = [(str, "C1", "C2"), (int, "D1", "D2")]
 
390
        adapter = InterVersionedFileTestProviderAdapter(server1, server2, formats)
 
391
        self.assertEqual([
 
392
            ('str',
 
393
             {'interversionedfile_class':str,
 
394
              'transport_readonly_server': 'b',
 
395
              'transport_server': 'a',
 
396
              'versionedfile_factory': 'C1',
 
397
              'versionedfile_factory_to': 'C2'}),
 
398
            ('int',
 
399
             {'interversionedfile_class': int,
 
400
              'transport_readonly_server': 'b',
 
401
              'transport_server': 'a',
 
402
              'versionedfile_factory': 'D1',
 
403
              'versionedfile_factory_to': 'D2'})],
 
404
            adapter.scenarios)
 
405
 
 
406
 
 
407
class TestRevisionStoreProviderAdapter(TestCase):
 
408
    """A group of tests that test the RevisionStore test adapter."""
 
409
 
 
410
    def test_scenarios(self):
 
411
        # check that constructor parameters are passed through to the adapted
 
412
        # test.
 
413
        from bzrlib.tests.revisionstore_implementations \
 
414
            import RevisionStoreTestProviderAdapter
 
415
        # revision stores need a store factory - i.e. RevisionKnit
 
416
        #, a readonly and rw transport 
 
417
        # transport servers:
 
418
        server1 = "a"
 
419
        server2 = "b"
 
420
        store_factories = ["c", "d"]
 
421
        adapter = RevisionStoreTestProviderAdapter(server1, server2, store_factories)
 
422
        self.assertEqual([
 
423
            ('c',
 
424
             {'store_factory': 'c',
 
425
              'transport_readonly_server': 'b',
 
426
              'transport_server': 'a'}),
 
427
            ('d',
 
428
             {'store_factory': 'd',
 
429
              'transport_readonly_server': 'b',
 
430
              'transport_server': 'a'})],
 
431
            adapter.scenarios)
 
432
 
 
433
 
371
434
class TestWorkingTreeProviderAdapter(TestCase):
372
435
    """A group of tests that test the workingtree implementation test adapter."""
373
436
 
378
441
            import WorkingTreeTestProviderAdapter
379
442
        server1 = "a"
380
443
        server2 = "b"
381
 
        formats = [workingtree.WorkingTreeFormat2(),
382
 
                   workingtree.WorkingTreeFormat3(),]
 
444
        formats = [("c", "C"), ("d", "D")]
383
445
        adapter = WorkingTreeTestProviderAdapter(server1, server2, formats)
384
446
        self.assertEqual([
385
 
            ('WorkingTreeFormat2',
386
 
             {'bzrdir_format': formats[0]._matchingbzrdir,
387
 
              'transport_readonly_server': 'b',
388
 
              'transport_server': 'a',
389
 
              'workingtree_format': formats[0]}),
390
 
            ('WorkingTreeFormat3',
391
 
             {'bzrdir_format': formats[1]._matchingbzrdir,
392
 
              'transport_readonly_server': 'b',
393
 
              'transport_server': 'a',
394
 
              'workingtree_format': formats[1]})],
 
447
            ('str',
 
448
             {'bzrdir_format': 'C',
 
449
              'transport_readonly_server': 'b',
 
450
              'transport_server': 'a',
 
451
              'workingtree_format': 'c'}),
 
452
            ('str',
 
453
             {'bzrdir_format': 'D',
 
454
              'transport_readonly_server': 'b',
 
455
              'transport_server': 'a',
 
456
              'workingtree_format': 'd'})],
395
457
            adapter.scenarios)
396
458
 
397
459
 
411
473
            return_parameter,
412
474
            revision_tree_from_workingtree
413
475
            )
 
476
        from bzrlib.workingtree import WorkingTreeFormat, WorkingTreeFormat3
414
477
        input_test = TestTreeProviderAdapter(
415
478
            "test_adapted_tests")
416
479
        server1 = "a"
417
480
        server2 = "b"
418
 
        formats = [workingtree.WorkingTreeFormat2(),
419
 
                   workingtree.WorkingTreeFormat3(),]
 
481
        formats = [("c", "C"), ("d", "D")]
420
482
        adapter = TreeTestProviderAdapter(server1, server2, formats)
421
483
        suite = adapter.adapt(input_test)
422
484
        tests = list(iter(suite))
423
485
        # XXX We should not have tests fail as we add more scenarios
424
486
        # abentley 20080412
425
 
        self.assertEqual(6, len(tests))
 
487
        self.assertEqual(5, len(tests))
426
488
        # this must match the default format setp up in
427
489
        # TreeTestProviderAdapter.adapt
428
 
        default_format = workingtree.WorkingTreeFormat3
429
 
        self.assertEqual(tests[0].workingtree_format, formats[0])
430
 
        self.assertEqual(tests[0].bzrdir_format, formats[0]._matchingbzrdir)
 
490
        default_format = WorkingTreeFormat3
 
491
        self.assertEqual(tests[0].workingtree_format, formats[0][0])
 
492
        self.assertEqual(tests[0].bzrdir_format, formats[0][1])
431
493
        self.assertEqual(tests[0].transport_server, server1)
432
494
        self.assertEqual(tests[0].transport_readonly_server, server2)
433
495
        self.assertEqual(tests[0]._workingtree_to_test_tree, return_parameter)
434
 
        self.assertEqual(tests[1].workingtree_format, formats[1])
435
 
        self.assertEqual(tests[1].bzrdir_format, formats[1]._matchingbzrdir)
 
496
        self.assertEqual(tests[1].workingtree_format, formats[1][0])
 
497
        self.assertEqual(tests[1].bzrdir_format, formats[1][1])
436
498
        self.assertEqual(tests[1].transport_server, server1)
437
499
        self.assertEqual(tests[1].transport_readonly_server, server2)
438
500
        self.assertEqual(tests[1]._workingtree_to_test_tree, return_parameter)
472
534
        server2 = "b"
473
535
        format1 = WorkingTreeFormat2()
474
536
        format2 = WorkingTreeFormat3()
475
 
        formats = [("1", str, format1, format2, "converter1"),
476
 
            ("2", int, format2, format1, "converter2")]
 
537
        formats = [(str, format1, format2, "converter1"),
 
538
            (int, format2, format1, "converter2")]
477
539
        adapter = InterTreeTestProviderAdapter(server1, server2, formats)
478
540
        suite = adapter.adapt(input_test)
479
541
        tests = list(iter(suite))
480
542
        self.assertEqual(2, len(tests))
481
 
        self.assertEqual(tests[0].intertree_class, formats[0][1])
482
 
        self.assertEqual(tests[0].workingtree_format, formats[0][2])
483
 
        self.assertEqual(tests[0].workingtree_format_to, formats[0][3])
484
 
        self.assertEqual(tests[0].mutable_trees_to_test_trees, formats[0][4])
 
543
        self.assertEqual(tests[0].intertree_class, formats[0][0])
 
544
        self.assertEqual(tests[0].workingtree_format, formats[0][1])
 
545
        self.assertEqual(tests[0].workingtree_format_to, formats[0][2])
 
546
        self.assertEqual(tests[0].mutable_trees_to_test_trees, formats[0][3])
485
547
        self.assertEqual(tests[0]._workingtree_to_test_tree, return_parameter)
486
548
        self.assertEqual(tests[0].transport_server, server1)
487
549
        self.assertEqual(tests[0].transport_readonly_server, server2)
488
 
        self.assertEqual(tests[1].intertree_class, formats[1][1])
489
 
        self.assertEqual(tests[1].workingtree_format, formats[1][2])
490
 
        self.assertEqual(tests[1].workingtree_format_to, formats[1][3])
491
 
        self.assertEqual(tests[1].mutable_trees_to_test_trees, formats[1][4])
 
550
        self.assertEqual(tests[1].intertree_class, formats[1][0])
 
551
        self.assertEqual(tests[1].workingtree_format, formats[1][1])
 
552
        self.assertEqual(tests[1].workingtree_format_to, formats[1][2])
 
553
        self.assertEqual(tests[1].mutable_trees_to_test_trees, formats[1][3])
492
554
        self.assertEqual(tests[1]._workingtree_to_test_tree, return_parameter)
493
555
        self.assertEqual(tests[1].transport_server, server1)
494
556
        self.assertEqual(tests[1].transport_readonly_server, server2)
502
564
        self.assertIsSameRealPath(self.test_dir, cwd)
503
565
        self.assertIsSameRealPath(self.test_home_dir, os.environ['HOME'])
504
566
 
505
 
    def test_assertEqualStat_equal(self):
506
 
        from bzrlib.tests.test_dirstate import _FakeStat
507
 
        self.build_tree(["foo"])
508
 
        real = os.lstat("foo")
509
 
        fake = _FakeStat(real.st_size, real.st_mtime, real.st_ctime,
510
 
            real.st_dev, real.st_ino, real.st_mode)
511
 
        self.assertEqualStat(real, fake)
512
 
 
513
 
    def test_assertEqualStat_notequal(self):
514
 
        self.build_tree(["foo", "bar"])
515
 
        self.assertRaises(AssertionError, self.assertEqualStat,
516
 
            os.lstat("foo"), os.lstat("bar"))
517
 
 
518
567
 
519
568
class TestTestCaseWithMemoryTransport(TestCaseWithMemoryTransport):
520
569
 
561
610
        self.assertEqual(format.repository_format.__class__,
562
611
            tree.branch.repository._format.__class__)
563
612
 
564
 
    def test_make_branch_builder(self):
565
 
        builder = self.make_branch_builder('dir')
566
 
        self.assertIsInstance(builder, branchbuilder.BranchBuilder)
567
 
        # Guard against regression into MemoryTransport leaking
568
 
        # files to disk instead of keeping them in memory.
569
 
        self.failIf(osutils.lexists('dir'))
570
 
 
571
 
    def test_make_branch_builder_with_format(self):
572
 
        # Use a repo layout that doesn't conform to a 'named' layout, to ensure
573
 
        # that the format objects are used.
574
 
        format = bzrdir.BzrDirMetaFormat1()
575
 
        repo_format = weaverepo.RepositoryFormat7()
576
 
        format.repository_format = repo_format
577
 
        builder = self.make_branch_builder('dir', format=format)
578
 
        the_branch = builder.get_branch()
579
 
        # Guard against regression into MemoryTransport leaking
580
 
        # files to disk instead of keeping them in memory.
581
 
        self.failIf(osutils.lexists('dir'))
582
 
        self.assertEqual(format.repository_format.__class__,
583
 
                         the_branch.repository._format.__class__)
584
 
        self.assertEqual(repo_format.get_format_string(),
585
 
                         self.get_transport().get_bytes(
586
 
                            'dir/.bzr/repository/format'))
587
 
 
588
 
    def test_make_branch_builder_with_format_name(self):
589
 
        builder = self.make_branch_builder('dir', format='knit')
590
 
        the_branch = builder.get_branch()
591
 
        # Guard against regression into MemoryTransport leaking
592
 
        # files to disk instead of keeping them in memory.
593
 
        self.failIf(osutils.lexists('dir'))
594
 
        dir_format = bzrdir.format_registry.make_bzrdir('knit')
595
 
        self.assertEqual(dir_format.repository_format.__class__,
596
 
                         the_branch.repository._format.__class__)
597
 
        self.assertEqual('Bazaar-NG Knit Repository Format 1',
598
 
                         self.get_transport().get_bytes(
599
 
                            'dir/.bzr/repository/format'))
600
 
 
601
613
    def test_safety_net(self):
602
614
        """No test should modify the safety .bzr directory.
603
615
 
656
668
        self.assertRaises(AssertionError, self.assertIsDirectory, 'a_file', t)
657
669
        self.assertRaises(AssertionError, self.assertIsDirectory, 'not_here', t)
658
670
 
659
 
    def test_make_branch_builder(self):
660
 
        builder = self.make_branch_builder('dir')
661
 
        rev_id = builder.build_commit()
662
 
        self.failUnlessExists('dir')
663
 
        a_dir = bzrdir.BzrDir.open('dir')
664
 
        self.assertRaises(errors.NoWorkingTree, a_dir.open_workingtree)
665
 
        a_branch = a_dir.open_branch()
666
 
        builder_branch = builder.get_branch()
667
 
        self.assertEqual(a_branch.base, builder_branch.base)
668
 
        self.assertEqual((1, rev_id), builder_branch.last_revision_info())
669
 
        self.assertEqual((1, rev_id), a_branch.last_revision_info())
670
 
 
671
671
 
672
672
class TestTestCaseTransports(TestCaseWithTransport):
673
673
 
1338
1338
    def _test_pass(self):
1339
1339
        pass
1340
1340
 
1341
 
class _TestException(Exception):
1342
 
    pass
1343
1341
 
1344
1342
class TestTestCase(TestCase):
1345
1343
    """Tests that test the core bzrlib TestCase."""
1346
1344
 
1347
1345
    def test_debug_flags_sanitised(self):
1348
1346
        """The bzrlib debug flags should be sanitised by setUp."""
1349
 
        if 'allow_debug' in tests.selftest_debug_flags:
1350
 
            raise TestNotApplicable(
1351
 
                '-Eallow_debug option prevents debug flag sanitisation')
1352
1347
        # we could set something and run a test that will check
1353
1348
        # it gets santised, but this is probably sufficient for now:
1354
1349
        # if someone runs the test with -Dsomething it will error.
1355
1350
        self.assertEqual(set(), bzrlib.debug.debug_flags)
1356
1351
 
1357
 
    def change_selftest_debug_flags(self, new_flags):
1358
 
        orig_selftest_flags = tests.selftest_debug_flags
1359
 
        self.addCleanup(self._restore_selftest_debug_flags, orig_selftest_flags)
1360
 
        tests.selftest_debug_flags = set(new_flags)
1361
 
        
1362
 
    def _restore_selftest_debug_flags(self, flags):
1363
 
        tests.selftest_debug_flags = flags
1364
 
 
1365
 
    def test_allow_debug_flag(self):
1366
 
        """The -Eallow_debug flag prevents bzrlib.debug.debug_flags from being
1367
 
        sanitised (i.e. cleared) before running a test.
1368
 
        """
1369
 
        self.change_selftest_debug_flags(set(['allow_debug']))
1370
 
        bzrlib.debug.debug_flags = set(['a-flag'])
1371
 
        class TestThatRecordsFlags(TestCase):
1372
 
            def test_foo(nested_self):
1373
 
                self.flags = set(bzrlib.debug.debug_flags)
1374
 
        test = TestThatRecordsFlags('test_foo')
1375
 
        test.run(self.make_test_result())
1376
 
        self.assertEqual(set(['a-flag']), self.flags)
1377
 
 
1378
 
    def test_debug_flags_restored(self):
1379
 
        """The bzrlib debug flags should be restored to their original state
1380
 
        after the test was run, even if allow_debug is set.
1381
 
        """
1382
 
        self.change_selftest_debug_flags(set(['allow_debug']))
1383
 
        # Now run a test that modifies debug.debug_flags.
1384
 
        bzrlib.debug.debug_flags = set(['original-state'])
1385
 
        class TestThatModifiesFlags(TestCase):
1386
 
            def test_foo(self):
1387
 
                bzrlib.debug.debug_flags = set(['modified'])
1388
 
        test = TestThatModifiesFlags('test_foo')
1389
 
        test.run(self.make_test_result())
1390
 
        self.assertEqual(set(['original-state']), bzrlib.debug.debug_flags)
1391
 
 
1392
 
    def make_test_result(self):
1393
 
        return bzrlib.tests.TextTestResult(
1394
 
            self._log_file, descriptions=0, verbosity=1)
1395
 
 
1396
1352
    def inner_test(self):
1397
1353
        # the inner child test
1398
1354
        note("inner_test")
1401
1357
        # the outer child test
1402
1358
        note("outer_start")
1403
1359
        self.inner_test = TestTestCase("inner_child")
1404
 
        result = self.make_test_result()
 
1360
        result = bzrlib.tests.TextTestResult(self._log_file,
 
1361
                                        descriptions=0,
 
1362
                                        verbosity=1)
1405
1363
        self.inner_test.run(result)
1406
1364
        note("outer finish")
1407
1365
 
1419
1377
        # the outer child test
1420
1378
        original_trace = bzrlib.trace._trace_file
1421
1379
        outer_test = TestTestCase("outer_child")
1422
 
        result = self.make_test_result()
 
1380
        result = bzrlib.tests.TextTestResult(self._log_file,
 
1381
                                        descriptions=0,
 
1382
                                        verbosity=1)
1423
1383
        outer_test.run(result)
1424
1384
        self.assertEqual(original_trace, bzrlib.trace._trace_file)
1425
1385
 
1541
1501
            ],
1542
1502
            result.calls)
1543
1503
 
1544
 
    def test_assert_list_raises_on_generator(self):
1545
 
        def generator_which_will_raise():
1546
 
            # This will not raise until after the first yield
1547
 
            yield 1
1548
 
            raise _TestException()
1549
 
 
1550
 
        e = self.assertListRaises(_TestException, generator_which_will_raise)
1551
 
        self.assertIsInstance(e, _TestException)
1552
 
 
1553
 
        e = self.assertListRaises(Exception, generator_which_will_raise)
1554
 
        self.assertIsInstance(e, _TestException)
1555
 
 
1556
 
    def test_assert_list_raises_on_plain(self):
1557
 
        def plain_exception():
1558
 
            raise _TestException()
1559
 
            return []
1560
 
 
1561
 
        e = self.assertListRaises(_TestException, plain_exception)
1562
 
        self.assertIsInstance(e, _TestException)
1563
 
 
1564
 
        e = self.assertListRaises(Exception, plain_exception)
1565
 
        self.assertIsInstance(e, _TestException)
1566
 
 
1567
 
    def test_assert_list_raises_assert_wrong_exception(self):
1568
 
        class _NotTestException(Exception):
1569
 
            pass
1570
 
 
1571
 
        def wrong_exception():
1572
 
            raise _NotTestException()
1573
 
 
1574
 
        def wrong_exception_generator():
1575
 
            yield 1
1576
 
            yield 2
1577
 
            raise _NotTestException()
1578
 
 
1579
 
        # Wrong exceptions are not intercepted
1580
 
        self.assertRaises(_NotTestException,
1581
 
            self.assertListRaises, _TestException, wrong_exception)
1582
 
        self.assertRaises(_NotTestException,
1583
 
            self.assertListRaises, _TestException, wrong_exception_generator)
1584
 
 
1585
 
    def test_assert_list_raises_no_exception(self):
1586
 
        def success():
1587
 
            return []
1588
 
 
1589
 
        def success_generator():
1590
 
            yield 1
1591
 
            yield 2
1592
 
 
1593
 
        self.assertRaises(AssertionError,
1594
 
            self.assertListRaises, _TestException, success)
1595
 
 
1596
 
        self.assertRaises(AssertionError,
1597
 
            self.assertListRaises, _TestException, success_generator)
1598
 
 
1599
1504
 
1600
1505
@symbol_versioning.deprecated_function(zero_eleven)
1601
1506
def sample_deprecated_function():
1835
1740
 
1836
1741
    def test_condition_id_startswith(self):
1837
1742
        klass = 'bzrlib.tests.test_selftest.TestSelftestFiltering.'
1838
 
        start1 = klass + 'test_condition_id_starts'
1839
 
        start2 = klass + 'test_condition_id_in'
1840
 
        test_names = [ klass + 'test_condition_id_in_list',
1841
 
                      klass + 'test_condition_id_startswith',
1842
 
                     ]
 
1743
        start = klass + 'test_condition_id_starts'
 
1744
        test_names = [klass + 'test_condition_id_startswith']
1843
1745
        filtered_suite = filter_suite_by_condition(
1844
 
            self.suite, tests.condition_id_startswith([start1, start2]))
1845
 
        self.assertEqual(test_names, _test_ids(filtered_suite))
 
1746
            self.suite, tests.condition_id_startswith(start))
 
1747
        my_pattern = 'TestSelftestFiltering.*test_condition_id_startswith'
 
1748
        re_filtered = filter_suite_by_re(self.suite, my_pattern)
 
1749
        self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
1846
1750
 
1847
1751
    def test_condition_isinstance(self):
1848
1752
        filtered_suite = filter_suite_by_condition(self.suite,
1901
1805
 
1902
1806
    def test_filter_suite_by_id_startswith(self):
1903
1807
        # By design this test may fail if another test is added whose name also
1904
 
        # begins with one of the start value used.
 
1808
        # begins with the start value used.
1905
1809
        klass = 'bzrlib.tests.test_selftest.TestSelftestFiltering.'
1906
 
        start1 = klass + 'test_filter_suite_by_id_starts'
1907
 
        start2 = klass + 'test_filter_suite_by_id_li'
1908
 
        test_list = [klass + 'test_filter_suite_by_id_list',
1909
 
                     klass + 'test_filter_suite_by_id_startswith',
1910
 
                     ]
1911
 
        filtered_suite = tests.filter_suite_by_id_startswith(
1912
 
            self.suite, [start1, start2])
 
1810
        start = klass + 'test_filter_suite_by_id_starts'
 
1811
        test_list = [klass + 'test_filter_suite_by_id_startswith']
 
1812
        filtered_suite = tests.filter_suite_by_id_startswith(self.suite, start)
 
1813
        filtered_names = _test_ids(filtered_suite)
1913
1814
        self.assertEqual(
1914
 
            test_list,
1915
 
            _test_ids(filtered_suite),
1916
 
            )
 
1815
            filtered_names,
 
1816
            ['bzrlib.tests.test_selftest.'
 
1817
             'TestSelftestFiltering.test_filter_suite_by_id_startswith'])
1917
1818
 
1918
1819
    def test_preserve_input(self):
1919
1820
        # NB: Surely this is something in the stdlib to do this?
2225
2126
 
2226
2127
        suite = loader.loadTestsFromModuleName('bzrlib.tests.test_sampler')
2227
2128
        self.assertEquals([], _test_ids(suite))
2228
 
 
2229
 
 
2230
 
class TestTestPrefixRegistry(tests.TestCase):
2231
 
 
2232
 
    def _get_registry(self):
2233
 
        tp_registry = tests.TestPrefixAliasRegistry()
2234
 
        return tp_registry
2235
 
 
2236
 
    def test_register_new_prefix(self):
2237
 
        tpr = self._get_registry()
2238
 
        tpr.register('foo', 'fff.ooo.ooo')
2239
 
        self.assertEquals('fff.ooo.ooo', tpr.get('foo'))
2240
 
 
2241
 
    def test_register_existing_prefix(self):
2242
 
        tpr = self._get_registry()
2243
 
        tpr.register('bar', 'bbb.aaa.rrr')
2244
 
        tpr.register('bar', 'bBB.aAA.rRR')
2245
 
        self.assertEquals('bbb.aaa.rrr', tpr.get('bar'))
2246
 
        self.assertContainsRe(self._get_log(keep_log_file=True),
2247
 
                              r'.*bar.*bbb.aaa.rrr.*bBB.aAA.rRR')
2248
 
 
2249
 
    def test_get_unknown_prefix(self):
2250
 
        tpr = self._get_registry()
2251
 
        self.assertRaises(KeyError, tpr.get, 'I am not a prefix')
2252
 
 
2253
 
    def test_resolve_prefix(self):
2254
 
        tpr = self._get_registry()
2255
 
        tpr.register('bar', 'bb.aa.rr')
2256
 
        self.assertEquals('bb.aa.rr', tpr.resolve_alias('bar'))
2257
 
 
2258
 
    def test_resolve_unknown_alias(self):
2259
 
        tpr = self._get_registry()
2260
 
        self.assertRaises(errors.BzrCommandError,
2261
 
                          tpr.resolve_alias, 'I am not a prefix')
2262
 
 
2263
 
    def test_predefined_prefixes(self):
2264
 
        tpr = tests.test_prefix_alias_registry
2265
 
        self.assertEquals('bzrlib', tpr.resolve_alias('bzrlib'))
2266
 
        self.assertEquals('bzrlib.doc', tpr.resolve_alias('bd'))
2267
 
        self.assertEquals('bzrlib.utils', tpr.resolve_alias('bu'))
2268
 
        self.assertEquals('bzrlib.tests', tpr.resolve_alias('bt'))
2269
 
        self.assertEquals('bzrlib.tests.blackbox', tpr.resolve_alias('bb'))
2270
 
        self.assertEquals('bzrlib.plugins', tpr.resolve_alias('bp'))