1
from twisted.trial import unittest
2
from twisted.python import util
3
from twisted.internet import utils, reactor, interfaces
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'))
13
def runTrialWithEnv(env, *args):
14
return utils.getProcessOutput(getTrialPath(), args=args, errortoo=1,
18
if not interfaces.IReactorProcess.providedBy(reactor):
19
skip = "These tests require the ability to spawn processes"
22
class TestImportErrors(unittest.TestCase):
23
"""Actually run trial on the command line and check that the output is
26
## XXX -- ideally refactor the trial top-level stuff so we don't have to
27
## shell out for this stuff.
31
def _getMockEnvironment(self):
32
path = self._getMockPath()
33
env = os.environ.copy()
34
if not env.has_key('PYTHONPATH'):
35
env['PYTHONPATH'] = path
37
env['PYTHONPATH'] += os.pathsep + path
40
def _runTrial(self, env, *args):
41
d = runTrialWithEnv(env, *args)
43
d.addCallback(self._print)
46
def runTrial(self, *args):
47
return self._runTrial(self._getMockEnvironment(), *args)
49
def runTrialPure(self, *args):
50
return self._runTrial(os.environ, *args)
52
def _print(self, stuff):
56
def _getMockPath(self):
57
from twisted.trial import test
58
return os.path.normpath(util.sibpath(test.__file__, 'foo'))
60
def failUnlessIn(self, container, containee, *args, **kwargs):
61
# redefined to be useful in callbacks
62
unittest.TestCase.failUnlessSubstring(self, containee, container,
66
def failIfIn(self, container, containee, *args, **kwargs):
67
# redefined to be useful in callbacks
68
unittest.TestCase.failIfSubstring(self, containee, container,
72
def test_trialFound(self):
73
self.failUnless(os.path.isfile(getTrialPath()), getTrialPath())
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))
83
def test_trialRun(self):
84
d = self.runTrial('--help')
85
d.addCallback(self.failUnless, 'trial')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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)')
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)')
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)')