~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/__init__.py

  • Committer: Martin Pool
  • Date: 2005-06-21 06:10:18 UTC
  • Revision ID: mbp@sourcefrog.net-20050621061017-12e8f0ff45228338
- move whitebox/blackbox modules into bzrlib.selftest subdirectory

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
 
from testsweet import TestBase, run_suite, InTempDir
 
18
from unittest import TestResult, TestCase
 
19
 
 
20
 
 
21
class TestBase(TestCase):
 
22
    """Base class for bzr test cases.
 
23
 
 
24
    Just defines some useful helper functions; doesn't actually test
 
25
    anything.
 
26
    """
 
27
    # TODO: Special methods to invoke bzr
 
28
    
 
29
    def runcmd(self, cmd, expected=0):
 
30
        self.log('$ ' + ' '.join(cmd))
 
31
        from os import spawnvp, P_WAIT
 
32
        rc = spawnvp(P_WAIT, cmd[0], cmd)
 
33
        if rc != expected:
 
34
            self.fail("command %r returned status %d" % (cmd, rc))
 
35
 
 
36
 
 
37
    def backtick(self, cmd):
 
38
        """Run a command and return its output"""
 
39
        from os import popen
 
40
        self.log('$ ' + ' '.join(cmd))
 
41
        pipe = popen(cmd)
 
42
        out = ''
 
43
        while True:
 
44
            buf = pipe.read()
 
45
            if buf:
 
46
                out += buf
 
47
            else:
 
48
                break
 
49
        rc = pipe.close()
 
50
        if rc:
 
51
            self.fail("command %r returned status %d" % (cmd, rc))
 
52
        else:
 
53
            return out
 
54
            
 
55
 
 
56
    def log(self, msg):
 
57
        """Log a message to a progress file"""
 
58
        print >>TEST_LOG, msg
 
59
               
 
60
 
 
61
 
 
62
 
 
63
class _MyResult(TestResult):
 
64
    """
 
65
    Custom TestResult.
 
66
 
 
67
    No special behaviour for now.
 
68
    """
 
69
#     def startTest(self, test):
 
70
#         print str(test).ljust(50),
 
71
#         TestResult.startTest(self, test)
 
72
 
 
73
#     def stopTest(self, test):
 
74
#         print
 
75
#         TestResult.stopTest(self, test)
 
76
 
 
77
 
 
78
    pass
 
79
 
 
80
 
19
81
 
20
82
 
21
83
def selftest():
22
84
    from unittest import TestLoader, TestSuite
23
 
    import bzrlib, bzrlib.store, bzrlib.inventory, bzrlib.branch, bzrlib.osutils, bzrlib.commands
24
 
 
 
85
    import bzrlib
25
86
    import bzrlib.selftest.whitebox
26
87
    import bzrlib.selftest.blackbox
27
 
    import bzrlib.selftest.versioning
28
 
    import bzrlib.selftest.testmerge3
29
 
    import bzrlib.selftest.testhashcache
30
 
    import bzrlib.merge_core
31
88
    from doctest import DocTestSuite
32
89
    import os
33
90
    import shutil
34
91
    import time
35
 
    import sys
36
 
    import unittest
37
 
 
38
 
    TestBase.BZRPATH = os.path.join(os.path.realpath(os.path.dirname(bzrlib.__path__[0])), 'bzr')
39
 
    print '%-30s %s' % ('bzr binary', TestBase.BZRPATH)
40
 
 
41
 
    print
 
92
 
 
93
    _setup_test_log()
 
94
    _setup_test_dir()
42
95
 
43
96
    suite = TestSuite()
44
 
 
45
 
    # should also test bzrlib.merge_core, but they seem to be out of date with
46
 
    # the code.
47
 
 
48
 
 
49
 
    # python2.3's TestLoader() doesn't seem to work well; don't know why
50
 
 
51
 
    for m in (bzrlib.store,
52
 
              bzrlib.inventory,
53
 
              bzrlib.branch,
54
 
              bzrlib.osutils, 
55
 
              bzrlib.commands, 
56
 
              bzrlib.merge3):
 
97
    tl = TestLoader()
 
98
 
 
99
    for m in bzrlib.selftest.whitebox, bzrlib.selftest.blackbox:
 
100
        suite.addTest(tl.loadTestsFromModule(m))
 
101
 
 
102
    for m in bzrlib.store, bzrlib.inventory, bzrlib.branch, bzrlib.osutils, \
 
103
            bzrlib.commands:
57
104
        suite.addTest(DocTestSuite(m))
58
105
 
59
 
    for cl in (bzrlib.selftest.whitebox.TEST_CLASSES 
60
 
               + bzrlib.selftest.versioning.TEST_CLASSES
61
 
               + bzrlib.selftest.testmerge3.TEST_CLASSES
62
 
               + bzrlib.selftest.testhashcache.TEST_CLASSES
63
 
               + bzrlib.selftest.blackbox.TEST_CLASSES):
64
 
        suite.addTest(cl())
65
 
 
66
 
    suite.addTest(unittest.makeSuite(bzrlib.merge_core.MergeTest, 'test_'))
67
 
 
68
 
    return run_suite(suite, 'testbzr')
69
 
 
70
 
 
71
 
 
 
106
    result = _MyResult()
 
107
    suite.run(result)
 
108
 
 
109
    _show_results(result)
 
110
 
 
111
    return result.wasSuccessful()
 
112
 
 
113
 
 
114
def _setup_test_log():
 
115
    import time
 
116
    import os
 
117
    
 
118
    global TEST_LOG
 
119
    log_filename = os.path.abspath('testbzr.log')
 
120
    TEST_LOG = open(log_filename, 'wt', buffering=1) # line buffered
 
121
 
 
122
    print >>TEST_LOG, "bzr tests run at " + time.ctime()
 
123
    print '%-30s %s' % ('test log', log_filename)
 
124
 
 
125
 
 
126
def _setup_test_dir():
 
127
    import os
 
128
    import shutil
 
129
    
 
130
    global ORIG_DIR, TEST_DIR
 
131
    ORIG_DIR = os.getcwdu()
 
132
    TEST_DIR = os.path.abspath("testbzr.tmp")
 
133
 
 
134
    print '%-30s %s' % ('running tests in', TEST_DIR)
 
135
 
 
136
    if os.path.exists(TEST_DIR):
 
137
        shutil.rmtree(TEST_DIR)
 
138
    os.mkdir(TEST_DIR)
 
139
    os.chdir(TEST_DIR)    
 
140
 
 
141
    
 
142
 
 
143
def _show_results(result):
 
144
     for case, tb in result.errors:
 
145
         _show_test_failure('ERROR', case, tb)
 
146
 
 
147
     for case, tb in result.failures:
 
148
         _show_test_failure('FAILURE', case, tb)
 
149
         
 
150
     print
 
151
     print '%4d tests run' % result.testsRun
 
152
     print '%4d errors' % len(result.errors)
 
153
     print '%4d failures' % len(result.failures)
 
154
 
 
155
 
 
156
 
 
157
def _show_test_failure(kind, case, tb):
 
158
     print (kind + '! ').ljust(60, '-')
 
159
     print case
 
160
     print tb
 
161
     print ''.ljust(60, '-')
 
162