~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

[merge] win32

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import tempfile
27
27
import unittest
28
28
import time
 
29
import codecs
29
30
 
30
31
import bzrlib.branch
31
32
import bzrlib.commands
117
118
        self._start_time = time.time()
118
119
 
119
120
    def addError(self, test, err):
 
121
        if isinstance(err[1], TestSkipped):
 
122
            return self.addSkipped(test, err)    
120
123
        unittest.TestResult.addError(self, test, err)
121
124
        if self.showAll:
122
125
            self.stream.writeln("ERROR %s" % self._elapsedTime())
140
143
        self.stream.flush()
141
144
        unittest.TestResult.addSuccess(self, test)
142
145
 
 
146
    def addSkipped(self, test, skip_excinfo):
 
147
        if self.showAll:
 
148
            print >>self.stream, ' SKIP %s' % self._elapsedTime()
 
149
            print >>self.stream, '     %s' % skip_excinfo[1]
 
150
        elif self.dots:
 
151
            self.stream.write('S')
 
152
        self.stream.flush()
 
153
        # seems best to treat this as success from point-of-view of unittest
 
154
        # -- it actually does nothing so it barely matters :)
 
155
        unittest.TestResult.addSuccess(self, test)
 
156
 
143
157
    def printErrorList(self, flavour, errors):
144
158
        for test, err in errors:
145
159
            self.stream.writeln(self.separator1)
146
160
            self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
147
161
            if hasattr(test, '_get_log'):
148
 
                self.stream.writeln()
149
 
                self.stream.writeln('log from this test:')
 
162
                print >>self.stream
 
163
                print >>self.stream, \
 
164
                        ('vvvv[log from %s]' % test).ljust(78,'-')
150
165
                print >>self.stream, test._get_log()
 
166
                print >>self.stream, \
 
167
                        ('^^^^[log from %s]' % test).ljust(78,'-')
151
168
            self.stream.writeln(self.separator2)
152
169
            self.stream.writeln("%s" % err)
153
170
 
241
258
            return
242
259
        raise AssertionError("texts not equal:\n" + 
243
260
                             self._ndiff_strings(a, b))      
 
261
        
 
262
    def assertStartsWith(self, s, prefix):
 
263
        if not s.startswith(prefix):
 
264
            raise AssertionError('string %r does not start with %r' % (s, prefix))
 
265
 
 
266
    def assertEndsWith(self, s, suffix):
 
267
        if not s.endswith(prefix):
 
268
            raise AssertionError('string %r does not end with %r' % (s, suffix))
244
269
 
245
270
    def assertContainsRe(self, haystack, needle_re):
246
271
        """Assert that a contains something matching a regular expression."""
254
279
        The file is removed as the test is torn down.
255
280
        """
256
281
        fileno, name = tempfile.mkstemp(suffix='.log', prefix='testbzr')
257
 
        self._log_file = os.fdopen(fileno, 'w+')
 
282
        encoder, decoder, stream_reader, stream_writer = codecs.lookup('UTF-8')
 
283
        self._log_file = stream_writer(os.fdopen(fileno, 'w+'))
258
284
        bzrlib.trace.enable_test_log(self._log_file)
259
285
        self._log_file_name = name
260
286
        self.addCleanup(self._finishLogFile)
325
351
 
326
352
        This should only be called from TestCase.tearDown.
327
353
        """
328
 
        for callable in reversed(self._cleanups):
329
 
            callable()
 
354
        for cleanup_fn in reversed(self._cleanups):
 
355
            cleanup_fn()
330
356
 
331
357
    def log(self, *args):
332
358
        mutter(*args)
497
523
                else:
498
524
                    raise
499
525
            # successfully created
500
 
            TestCaseInTempDir.TEST_ROOT = os.path.abspath(root)
 
526
            TestCaseInTempDir.TEST_ROOT = osutils.abspath(root)
501
527
            break
502
528
        # make a fake bzr directory there to prevent any tests propagating
503
529
        # up onto the source directory's real branch
504
 
        os.mkdir(os.path.join(TestCaseInTempDir.TEST_ROOT, '.bzr'))
 
530
        os.mkdir(osutils.pathjoin(TestCaseInTempDir.TEST_ROOT, '.bzr'))
505
531
 
506
532
    def setUp(self):
507
533
        super(TestCaseInTempDir, self).setUp()
509
535
        _currentdir = os.getcwdu()
510
536
        short_id = self.id().replace('bzrlib.tests.', '') \
511
537
                   .replace('__main__.', '')
512
 
        self.test_dir = os.path.join(self.TEST_ROOT, short_id)
 
538
        self.test_dir = osutils.pathjoin(self.TEST_ROOT, short_id)
513
539
        os.mkdir(self.test_dir)
514
540
        os.chdir(self.test_dir)
515
541
        os.environ['HOME'] = self.test_dir
 
542
        os.environ['APPDATA'] = self.test_dir
516
543
        def _leaveDirectory():
517
544
            os.chdir(_currentdir)
518
545
        self.addCleanup(_leaveDirectory)
550
577
    def failUnlessExists(self, path):
551
578
        """Fail unless path, which may be abs or relative, exists."""
552
579
        self.failUnless(osutils.lexists(path))
 
580
 
 
581
    def failIfExists(self, path):
 
582
        """Fail if path, which may be abs or relative, exists."""
 
583
        self.failIf(osutils.lexists(path))
553
584
        
554
585
    def assertFileEqual(self, content, path):
555
586
        """Fail if path does not contain 'content'."""
556
587
        self.failUnless(osutils.lexists(path))
557
588
        self.assertEqualDiff(content, open(path, 'r').read())
558
 
        
 
589
 
559
590
 
560
591
def filter_suite_by_re(suite, pattern):
561
 
    result = TestUtil.TestSuite()
 
592
    result = TestSuite()
562
593
    filter_re = re.compile(pattern)
563
594
    for test in iter_suite_tests(suite):
564
595
        if filter_re.search(test.id()):
605
636
    global MODULES_TO_DOCTEST
606
637
 
607
638
    testmod_names = [ \
608
 
                   'bzrlib.tests.test_api',
609
 
                   'bzrlib.tests.test_gpg',
610
 
                   'bzrlib.tests.test_identitymap',
611
 
                   'bzrlib.tests.test_inv',
612
 
                   'bzrlib.tests.test_ancestry',
613
 
                   'bzrlib.tests.test_commit',
614
 
                   'bzrlib.tests.test_command',
615
 
                   'bzrlib.tests.test_commit_merge',
616
 
                   'bzrlib.tests.test_config',
617
 
                   'bzrlib.tests.test_merge3',
618
 
                   'bzrlib.tests.test_merge',
619
 
                   'bzrlib.tests.test_hashcache',
620
 
                   'bzrlib.tests.test_status',
621
 
                   'bzrlib.tests.test_log',
622
 
                   'bzrlib.tests.test_revisionnamespaces',
623
 
                   'bzrlib.tests.test_branch',
624
 
                   'bzrlib.tests.test_revision',
625
 
                   'bzrlib.tests.test_revision_info',
626
 
                   'bzrlib.tests.test_merge_core',
627
 
                   'bzrlib.tests.test_smart_add',
628
 
                   'bzrlib.tests.test_bad_files',
629
 
                   'bzrlib.tests.test_diff',
630
 
                   'bzrlib.tests.test_parent',
631
 
                   'bzrlib.tests.test_xml',
632
 
                   'bzrlib.tests.test_weave',
633
 
                   'bzrlib.tests.test_fetch',
634
 
                   'bzrlib.tests.test_whitebox',
635
 
                   'bzrlib.tests.test_store',
636
 
                   'bzrlib.tests.test_sampler',
637
 
                   'bzrlib.tests.test_transactions',
638
 
                   'bzrlib.tests.test_transport',
639
 
                   'bzrlib.tests.test_sftp',
640
 
                   'bzrlib.tests.test_graph',
641
 
                   'bzrlib.tests.test_workingtree',
642
 
                   'bzrlib.tests.test_upgrade',
643
 
                   'bzrlib.tests.test_uncommit',
644
 
                   'bzrlib.tests.test_ui',
645
 
                   'bzrlib.tests.test_conflicts',
646
 
                   'bzrlib.tests.test_testament',
647
 
                   'bzrlib.tests.test_annotate',
648
 
                   'bzrlib.tests.test_revprops',
649
 
                   'bzrlib.tests.test_options',
650
 
                   'bzrlib.tests.test_http',
651
 
                   'bzrlib.tests.test_nonascii',
652
 
                   'bzrlib.tests.test_reweave',
653
 
                   'bzrlib.tests.test_tsort',
654
 
                   'bzrlib.tests.test_trace',
655
 
                   'bzrlib.tests.test_rio',
656
 
                   'bzrlib.tests.test_msgeditor',
657
 
                   'bzrlib.tests.test_selftest',
658
 
                   ]
 
639
                    'bzrlib.tests.test_ancestry',
 
640
                    'bzrlib.tests.test_annotate',
 
641
                    'bzrlib.tests.test_api',
 
642
                    'bzrlib.tests.test_bad_files',
 
643
                    'bzrlib.tests.test_branch',
 
644
                    'bzrlib.tests.test_command',
 
645
                    'bzrlib.tests.test_commit',
 
646
                    'bzrlib.tests.test_commit_merge',
 
647
                    'bzrlib.tests.test_config',
 
648
                    'bzrlib.tests.test_conflicts',
 
649
                    'bzrlib.tests.test_diff',
 
650
                    'bzrlib.tests.test_fetch',
 
651
                    'bzrlib.tests.test_gpg',
 
652
                    'bzrlib.tests.test_graph',
 
653
                    'bzrlib.tests.test_hashcache',
 
654
                    'bzrlib.tests.test_http',
 
655
                    'bzrlib.tests.test_identitymap',
 
656
                    'bzrlib.tests.test_inv',
 
657
                    'bzrlib.tests.test_log',
 
658
                    'bzrlib.tests.test_merge',
 
659
                    'bzrlib.tests.test_merge3',
 
660
                    'bzrlib.tests.test_merge_core',
 
661
                    'bzrlib.tests.test_missing',
 
662
                    'bzrlib.tests.test_msgeditor',
 
663
                    'bzrlib.tests.test_nonascii',
 
664
                    'bzrlib.tests.test_options',
 
665
                    'bzrlib.tests.test_osutils',
 
666
                    'bzrlib.tests.test_parent',
 
667
                    'bzrlib.tests.test_plugins',
 
668
                    'bzrlib.tests.test_remove',
 
669
                    'bzrlib.tests.test_revision',
 
670
                    'bzrlib.tests.test_revision_info',
 
671
                    'bzrlib.tests.test_revisionnamespaces',
 
672
                    'bzrlib.tests.test_revprops',
 
673
                    'bzrlib.tests.test_reweave',
 
674
                    'bzrlib.tests.test_rio',
 
675
                    'bzrlib.tests.test_sampler',
 
676
                    'bzrlib.tests.test_selftest',
 
677
                    'bzrlib.tests.test_setup',
 
678
                    'bzrlib.tests.test_sftp_transport',
 
679
                    'bzrlib.tests.test_smart_add',
 
680
                    'bzrlib.tests.test_source',
 
681
                    'bzrlib.tests.test_status',
 
682
                    'bzrlib.tests.test_store',
 
683
                    'bzrlib.tests.test_testament',
 
684
                    'bzrlib.tests.test_trace',
 
685
                    'bzrlib.tests.test_transactions',
 
686
                    'bzrlib.tests.test_transport',
 
687
                    'bzrlib.tests.test_tsort',
 
688
                    'bzrlib.tests.test_ui',
 
689
                    'bzrlib.tests.test_uncommit',
 
690
                    'bzrlib.tests.test_upgrade',
 
691
                    'bzrlib.tests.test_weave',
 
692
                    'bzrlib.tests.test_whitebox',
 
693
                    'bzrlib.tests.test_workingtree',
 
694
                    'bzrlib.tests.test_xml',
 
695
                    ]
659
696
 
660
 
    print '%10s: %s' % ('bzr', os.path.realpath(sys.argv[0]))
 
697
    TestCase.BZRPATH = osutils.pathjoin(
 
698
            osutils.realpath(osutils.dirname(bzrlib.__path__[0])), 'bzr')
 
699
    print '%10s: %s' % ('bzr', osutils.realpath(sys.argv[0]))
661
700
    print '%10s: %s' % ('bzrlib', bzrlib.__path__[0])
662
701
    print
663
702
    suite = TestSuite()
675
714
        suite.addTest(loader.loadTestsFromModule(m))
676
715
    for m in (MODULES_TO_DOCTEST):
677
716
        suite.addTest(DocTestSuite(m))
678
 
    for p in bzrlib.plugin.all_plugins:
679
 
        if hasattr(p, 'test_suite'):
680
 
            suite.addTest(p.test_suite())
 
717
    for name, plugin in bzrlib.plugin.all_plugins().items():
 
718
        if hasattr(plugin, 'test_suite'):
 
719
            suite.addTest(plugin.test_suite())
681
720
    return suite
682
721
 
683
722