~certify-web-dev/twisted/certify-trunk

« back to all changes in this revision

Viewing changes to twisted/trial/test/test_output.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-01-16 19:56:10 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20060116195610-ykmxbia4mnnod9o2
Tags: 2.1.0-0ubuntu2
debian/copyright: Include copyright for python 2.3; some 2.3 files
are included in the upstream tarball, but not in the binary packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from twisted.trial import unittest
 
2
from twisted.python import util
 
3
from twisted.internet import utils, reactor, interfaces
 
4
import os, re
 
5
 
 
6
def getTrialPath():
 
7
    fp = os.path.abspath(unittest.__file__)
 
8
    trialPath = fp.split(os.sep)[:-3] + ['bin', 'trial']
 
9
    return os.path.normpath(os.path.join(fp, os.pardir, os.pardir,
 
10
                                         os.pardir, 'bin', 'trial'))
 
11
 
 
12
 
 
13
def runTrialWithEnv(env, *args):
 
14
    return utils.getProcessOutput(getTrialPath(), args=args, errortoo=1,
 
15
                                  env=env)
 
16
 
 
17
 
 
18
if not interfaces.IReactorProcess.providedBy(reactor):
 
19
    skip = "These tests require the ability to spawn processes"
 
20
    
 
21
 
 
22
class TestImportErrors(unittest.TestCase):
 
23
    """Actually run trial on the command line and check that the output is
 
24
    what we expect.
 
25
    """
 
26
    ## XXX -- ideally refactor the trial top-level stuff so we don't have to
 
27
    ## shell out for this stuff.
 
28
 
 
29
    debug = False
 
30
 
 
31
    def _getMockEnvironment(self):
 
32
        path = self._getMockPath()
 
33
        env = os.environ.copy()
 
34
        if not env.has_key('PYTHONPATH'):
 
35
            env['PYTHONPATH'] = path
 
36
        else:
 
37
            env['PYTHONPATH'] += os.pathsep + path
 
38
        return env
 
39
 
 
40
    def _runTrial(self, env, *args):
 
41
        d = runTrialWithEnv(env, *args)
 
42
        if self.debug:
 
43
            d.addCallback(self._print)
 
44
        return d
 
45
        
 
46
    def runTrial(self, *args):
 
47
        return self._runTrial(self._getMockEnvironment(), *args)
 
48
 
 
49
    def runTrialPure(self, *args):
 
50
        return self._runTrial(os.environ, *args)
 
51
 
 
52
    def _print(self, stuff):
 
53
        print stuff
 
54
        return stuff
 
55
 
 
56
    def _getMockPath(self):
 
57
        from twisted.trial import test
 
58
        return os.path.normpath(util.sibpath(test.__file__, 'foo'))
 
59
 
 
60
    def failUnlessIn(self, container, containee, *args, **kwargs):
 
61
        # redefined to be useful in callbacks
 
62
        unittest.TestCase.failUnlessSubstring(self, containee, container,
 
63
                                              *args, **kwargs)
 
64
        return container
 
65
 
 
66
    def failIfIn(self, container, containee, *args, **kwargs):
 
67
        # redefined to be useful in callbacks
 
68
        unittest.TestCase.failIfSubstring(self, containee, container,
 
69
                                          *args, **kwargs)
 
70
        return container
 
71
 
 
72
    def test_trialFound(self):
 
73
        self.failUnless(os.path.isfile(getTrialPath()), getTrialPath())
 
74
 
 
75
    def test_mockPathCorrect(self):
 
76
        # This doesn't test a feature.  This tests that we are accurately finding
 
77
        # the directory with all of the mock modules and packages.
 
78
        path = self._getMockPath()
 
79
        self.failUnless(path.endswith('twisted/trial/test/foo'), 
 
80
                        'got path: %r' % path)
 
81
        self.failUnless(os.path.isdir(path))
 
82
 
 
83
    def test_trialRun(self):
 
84
        d = self.runTrial('--help')
 
85
        d.addCallback(self.failUnless, 'trial')
 
86
        return d
 
87
 
 
88
    def test_nonexistentModule(self):
 
89
        d = self.runTrial('twisted.doesntexist')
 
90
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
91
        d.addCallback(self.failUnlessIn, 'twisted.doesntexist')
 
92
        return d
 
93
 
 
94
    def test_nonexistentPackage(self):
 
95
        d = self.runTrial('doesntexist')
 
96
        d.addCallback(self.failUnlessIn, 'doesntexist')
 
97
        d.addCallback(self.failUnlessIn, 'ValueError')
 
98
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
99
        return d
 
100
 
 
101
    def test_nonexistentPackageWithModule(self):
 
102
        d = self.runTrial('doesntexist.barney')
 
103
        d.addCallback(self.failUnlessIn, 'doesntexist.barney')
 
104
        d.addCallback(self.failUnlessIn, 'ValueError')
 
105
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
106
        return d
 
107
 
 
108
    def test_badpackage(self):
 
109
        d = self.runTrial('badpackage')
 
110
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
111
        d.addCallback(self.failUnlessIn, 'badpackage')
 
112
        d.addCallback(self.failIfIn, 'IOError')
 
113
        return d
 
114
 
 
115
    def test_moduleInBadpackage(self):
 
116
        d = self.runTrial('badpackage.test_module')
 
117
        d.addCallback(self.failUnlessIn, "IMPORT ERROR")
 
118
        d.addCallback(self.failUnlessIn, "badpackage.test_module")
 
119
        d.addCallback(self.failIfIn, 'IOError')
 
120
        return d
 
121
 
 
122
    def test_badmodule(self):
 
123
        d = self.runTrial('package.test_bad_module')
 
124
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
125
        d.addCallback(self.failUnlessIn, 'package.test_bad_module')
 
126
        d.addCallback(self.failIfIn, 'IOError')
 
127
        d.addCallback(self.failIfIn, '<module')
 
128
        return d
 
129
 
 
130
    def test_badimport(self):
 
131
        d = self.runTrial('package.test_import_module')
 
132
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
133
        d.addCallback(self.failUnlessIn, 'package.test_import_module')
 
134
        d.addCallback(self.failIfIn, 'IOError')
 
135
        d.addCallback(self.failIfIn, '<module')
 
136
        return d
 
137
 
 
138
    def test_recurseImport(self):
 
139
        d = self.runTrial('package')
 
140
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
141
        d.addCallback(self.failUnlessIn, 'test_bad_module')
 
142
        d.addCallback(self.failUnlessIn, 'test_import_module')
 
143
        d.addCallback(self.failIfIn, '<module')
 
144
        d.addCallback(self.failIfIn, 'IOError')
 
145
        return d
 
146
 
 
147
    def test_recurseImportErrors(self):
 
148
        d = self.runTrial('package2')
 
149
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
150
        d.addCallback(self.failUnlessIn, 'package2')
 
151
        d.addCallback(self.failUnlessIn, 'test_module')
 
152
        d.addCallback(self.failUnlessIn, "No module named frotz")
 
153
        d.addCallback(self.failIfIn, '<module')
 
154
        d.addCallback(self.failIfIn, 'IOError')
 
155
        return d
 
156
 
 
157
    def test_nonRecurseImportErrors(self):
 
158
        d = self.runTrial('package2')
 
159
        d.addCallback(self.failUnlessIn, 'IMPORT ERROR')
 
160
        d.addCallback(self.failUnlessIn, "No module named frotz")
 
161
        d.addCallback(self.failIfIn, '<module')
 
162
        return d
 
163
 
 
164
    def test_regularRun(self):
 
165
        d = self.runTrial('package.test_module')
 
166
        d.addCallback(self.failIfIn, 'IMPORT ERROR')
 
167
        d.addCallback(self.failIfIn, 'IOError')
 
168
        d.addCallback(self.failUnlessIn, 'OK')
 
169
        d.addCallback(self.failUnlessIn, 'PASSED (successes=1)')
 
170
        return d
 
171
    
 
172
    def test_filename(self):
 
173
        path = self._getMockPath()
 
174
        d = self.runTrialPure(os.path.join(path, 'package/test_module.py'))
 
175
        d.addCallback(self.failIfIn, 'IMPORT ERROR')
 
176
        d.addCallback(self.failIfIn, 'IOError')
 
177
        d.addCallback(self.failUnlessIn, 'OK')
 
178
        d.addCallback(self.failUnlessIn, 'PASSED (successes=1)')
 
179
        return d
 
180
 
 
181
    def test_dosFile(self):
 
182
        ## XXX -- not really an output test, more of a script test
 
183
        path = self._getMockPath()
 
184
        d = self.runTrialPure(os.path.join(path, 'package/test_dos_module.py'))
 
185
        d.addCallback(self.failIfIn, 'IMPORT ERROR')
 
186
        d.addCallback(self.failIfIn, 'IOError')
 
187
        d.addCallback(self.failUnlessIn, 'OK')
 
188
        d.addCallback(self.failUnlessIn, 'PASSED (successes=1)')
 
189
        return d