|
@@
-55,56
+55,68
b" have_twisted = test_for('twisted')"
|
|
55
|
55
|
have_foolscap = test_for('foolscap')
|
|
56
|
56
|
have_objc = test_for('objc')
|
|
57
|
57
|
have_pexpect = test_for('pexpect')
|
|
|
58
|
have_gtk = test_for('gtk')
|
|
|
59
|
have_gobject = test_for('gobject')
|
|
|
60
|
|
|
|
61
|
|
|
|
62
|
def make_exclude():
|
|
|
63
|
|
|
|
64
|
# For the IPythonDoctest plugin, we need to exclude certain patterns that cause
|
|
|
65
|
# testing problems. We should strive to minimize the number of skipped
|
|
|
66
|
# modules, since this means untested code. As the testing machinery
|
|
|
67
|
# solidifies, this list should eventually become empty.
|
|
|
68
|
EXCLUDE = [pjoin('IPython', 'external'),
|
|
|
69
|
pjoin('IPython', 'frontend', 'process', 'winprocess.py'),
|
|
|
70
|
pjoin('IPython_doctest_plugin'),
|
|
|
71
|
pjoin('IPython', 'extensions', 'ipy_'),
|
|
|
72
|
pjoin('IPython', 'extensions', 'clearcmd'),
|
|
|
73
|
pjoin('IPython', 'extensions', 'PhysicalQInteractive'),
|
|
|
74
|
pjoin('IPython', 'extensions', 'scitedirector'),
|
|
|
75
|
pjoin('IPython', 'extensions', 'numeric_formats'),
|
|
|
76
|
pjoin('IPython', 'testing', 'attic'),
|
|
|
77
|
pjoin('IPython', 'testing', 'tools'),
|
|
|
78
|
pjoin('IPython', 'testing', 'mkdoctests'),
|
|
|
79
|
pjoin('IPython', 'lib', 'inputhook')
|
|
|
80
|
]
|
|
|
81
|
|
|
|
82
|
if not have_wx:
|
|
|
83
|
EXCLUDE.append(pjoin('IPython', 'extensions', 'igrid'))
|
|
|
84
|
EXCLUDE.append(pjoin('IPython', 'gui'))
|
|
|
85
|
EXCLUDE.append(pjoin('IPython', 'frontend', 'wx'))
|
|
|
86
|
EXCLUDE.append(pjoin('IPython', 'lib', 'inputhookwx'))
|
|
|
87
|
|
|
|
88
|
if not have_gtk or not have_gobject:
|
|
|
89
|
EXCLUDE.append(pjoin('IPython', 'lib', 'inputhookgtk'))
|
|
|
90
|
|
|
|
91
|
if not have_objc:
|
|
|
92
|
EXCLUDE.append(pjoin('IPython', 'frontend', 'cocoa'))
|
|
|
93
|
|
|
|
94
|
if not have_curses:
|
|
|
95
|
EXCLUDE.append(pjoin('IPython', 'extensions', 'ibrowse'))
|
|
|
96
|
|
|
|
97
|
if not sys.platform == 'win32':
|
|
|
98
|
EXCLUDE.append(pjoin('IPython', 'utils', 'platutils_win32'))
|
|
|
99
|
|
|
|
100
|
# These have to be skipped on win32 because the use echo, rm, cd, etc.
|
|
|
101
|
# See ticket https://bugs.launchpad.net/bugs/366982
|
|
|
102
|
if sys.platform == 'win32':
|
|
|
103
|
EXCLUDE.append(pjoin('IPython', 'testing', 'plugin', 'test_exampleip'))
|
|
|
104
|
EXCLUDE.append(pjoin('IPython', 'testing', 'plugin', 'dtexample'))
|
|
|
105
|
|
|
|
106
|
if not os.name == 'posix':
|
|
|
107
|
EXCLUDE.append(pjoin('IPython', 'utils', 'platutils_posix'))
|
|
58
|
108
|
|
|
59
|
|
# For the IPythonDoctest plugin, we need to exclude certain patterns that cause
|
|
60
|
|
# testing problems. We should strive to minimize the number of skipped
|
|
61
|
|
# modules, since this means untested code. As the testing machinery
|
|
62
|
|
# solidifies, this list should eventually become empty.
|
|
63
|
|
EXCLUDE = [pjoin('IPython', 'external'),
|
|
64
|
|
pjoin('IPython', 'frontend', 'process', 'winprocess.py'),
|
|
65
|
|
pjoin('IPython_doctest_plugin'),
|
|
66
|
|
pjoin('IPython', 'Gnuplot'),
|
|
67
|
|
pjoin('IPython', 'extensions', 'ipy_'),
|
|
68
|
|
pjoin('IPython', 'extensions', 'clearcmd'),
|
|
69
|
|
pjoin('IPython', 'extensions', 'PhysicalQInteractive'),
|
|
70
|
|
pjoin('IPython', 'extensions', 'scitedirector'),
|
|
71
|
|
pjoin('IPython', 'extensions', 'numeric_formats'),
|
|
72
|
|
pjoin('IPython', 'testing', 'attic'),
|
|
73
|
|
pjoin('IPython', 'testing', 'tutils'),
|
|
74
|
|
pjoin('IPython', 'testing', 'tools'),
|
|
75
|
|
pjoin('IPython', 'testing', 'mkdoctests')
|
|
76
|
|
]
|
|
77
|
|
|
|
78
|
|
if not have_wx:
|
|
79
|
|
EXCLUDE.append(pjoin('IPython', 'extensions', 'igrid'))
|
|
80
|
|
EXCLUDE.append(pjoin('IPython', 'gui'))
|
|
81
|
|
EXCLUDE.append(pjoin('IPython', 'frontend', 'wx'))
|
|
82
|
|
|
|
83
|
|
if not have_objc:
|
|
84
|
|
EXCLUDE.append(pjoin('IPython', 'frontend', 'cocoa'))
|
|
85
|
|
|
|
86
|
|
if not have_curses:
|
|
87
|
|
EXCLUDE.append(pjoin('IPython', 'extensions', 'ibrowse'))
|
|
88
|
|
|
|
89
|
|
if not sys.platform == 'win32':
|
|
90
|
|
EXCLUDE.append(pjoin('IPython', 'platutils_win32'))
|
|
91
|
|
|
|
92
|
|
# These have to be skipped on win32 because the use echo, rm, cd, etc.
|
|
93
|
|
# See ticket https://bugs.launchpad.net/bugs/366982
|
|
94
|
|
if sys.platform == 'win32':
|
|
95
|
|
EXCLUDE.append(pjoin('IPython', 'testing', 'plugin', 'test_exampleip'))
|
|
96
|
|
EXCLUDE.append(pjoin('IPython', 'testing', 'plugin', 'dtexample'))
|
|
97
|
|
|
|
98
|
|
if not os.name == 'posix':
|
|
99
|
|
EXCLUDE.append(pjoin('IPython', 'platutils_posix'))
|
|
100
|
|
|
|
101
|
|
if not have_pexpect:
|
|
102
|
|
EXCLUDE.append(pjoin('IPython', 'lib', 'irunner'))
|
|
103
|
|
|
|
104
|
|
# This is needed for the reg-exp to match on win32 in the ipdoctest plugin.
|
|
105
|
|
if sys.platform == 'win32':
|
|
106
|
|
EXCLUDE = [s.replace('\\','\\\\') for s in EXCLUDE]
|
|
|
109
|
if not have_pexpect:
|
|
|
110
|
EXCLUDE.append(pjoin('IPython', 'scripts', 'irunner'))
|
|
107
|
111
|
|
|
|
112
|
# Skip shell always because of a bug in FakeModule.
|
|
|
113
|
EXCLUDE.append(pjoin('IPython', 'core', 'shell'))
|
|
|
114
|
|
|
|
115
|
# This is needed for the reg-exp to match on win32 in the ipdoctest plugin.
|
|
|
116
|
if sys.platform == 'win32':
|
|
|
117
|
EXCLUDE = [s.replace('\\','\\\\') for s in EXCLUDE]
|
|
|
118
|
|
|
|
119
|
return EXCLUDE
|
|
108
|
120
|
|
|
109
|
121
|
#-----------------------------------------------------------------------------
|
|
110
|
122
|
# Functions and classes
|
|
@@
-155,13
+167,12
b' def run_iptest():'
|
|
155
|
167
|
|
|
156
|
168
|
# Construct list of plugins, omitting the existing doctest plugin, which
|
|
157
|
169
|
# ours replaces (and extends).
|
|
|
170
|
EXCLUDE = make_exclude()
|
|
158
|
171
|
plugins = [IPythonDoctest(EXCLUDE)]
|
|
159
|
172
|
for p in nose.plugins.builtin.plugins:
|
|
160
|
173
|
plug = p()
|
|
161
|
174
|
if plug.name == 'doctest':
|
|
162
|
175
|
continue
|
|
163
|
|
|
|
164
|
|
#print '*** adding plugin:',plug.name # dbg
|
|
165
|
176
|
plugins.append(plug)
|
|
166
|
177
|
|
|
167
|
178
|
TestProgram(argv=argv,plugins=plugins)
|
|
@@
-191,55
+202,28
b' class IPTester(object):'
|
|
191
|
202
|
|
|
192
|
203
|
|
|
193
|
204
|
def make_runners():
|
|
194
|
|
"""Define the modules and packages that need to be tested.
|
|
|
205
|
"""Define the top-level packages that need to be tested.
|
|
195
|
206
|
"""
|
|
196
|
|
|
|
197
|
|
# This omits additional top-level modules that should not be doctested.
|
|
198
|
|
# XXX: shell.py is also ommited because of a bug in the skip_doctest
|
|
199
|
|
# decorator. See ticket https://bugs.launchpad.net/bugs/366209
|
|
200
|
|
top_mod = \
|
|
201
|
|
['backgroundjobs.py', 'coloransi.py', 'completer.py', 'configloader.py',
|
|
202
|
|
'crashhandler.py', 'debugger.py', 'deepreload.py', 'demo.py',
|
|
203
|
|
'DPyGetOpt.py', 'dtutils.py', 'excolors.py', 'fakemodule.py',
|
|
204
|
|
'generics.py', 'genutils.py', 'history.py', 'hooks.py', 'ipapi.py',
|
|
205
|
|
'iplib.py', 'ipmaker.py', 'ipstruct.py', 'Itpl.py',
|
|
206
|
|
'logger.py', 'macro.py', 'magic.py', 'oinspect.py',
|
|
207
|
|
'outputtrap.py', 'platutils.py', 'prefilter.py', 'prompts.py',
|
|
208
|
|
'PyColorize.py', 'release.py', 'rlineimpl.py', 'shadowns.py',
|
|
209
|
|
'shellglobals.py', 'strdispatch.py', 'twshell.py',
|
|
210
|
|
'ultratb.py', 'upgradedir.py', 'usage.py', 'wildcard.py',
|
|
211
|
|
# See note above for why this is skipped
|
|
212
|
|
# 'shell.py',
|
|
213
|
|
'winconsole.py']
|
|
214
|
|
|
|
215
|
|
if have_pexpect:
|
|
216
|
|
top_mod.append('irunner.py')
|
|
217
|
207
|
|
|
218
|
|
if sys.platform == 'win32':
|
|
219
|
|
top_mod.append('platutils_win32.py')
|
|
220
|
|
elif os.name == 'posix':
|
|
221
|
|
top_mod.append('platutils_posix.py')
|
|
222
|
|
else:
|
|
223
|
|
top_mod.append('platutils_dummy.py')
|
|
224
|
|
|
|
225
|
|
# These are tested by nose, so skip IPython.kernel
|
|
226
|
|
top_pack = ['config','extensions','frontend',
|
|
227
|
|
'testing','tests','tools','userconfig']
|
|
|
208
|
nose_packages = ['config', 'core', 'extensions',
|
|
|
209
|
'frontend', 'lib', 'quarantine',
|
|
|
210
|
'scripts', 'testing', 'utils']
|
|
|
211
|
trial_packages = ['kernel']
|
|
228
|
212
|
|
|
229
|
213
|
if have_wx:
|
|
230
|
|
top_pack.append('gui')
|
|
|
214
|
nose_packages.append('gui')
|
|
231
|
215
|
|
|
232
|
|
modules = ['IPython.%s' % m[:-3] for m in top_mod ]
|
|
233
|
|
packages = ['IPython.%s' % m for m in top_pack ]
|
|
|
216
|
nose_packages = ['IPython.%s' % m for m in nose_packages ]
|
|
|
217
|
trial_packages = ['IPython.%s' % m for m in trial_packages ]
|
|
234
|
218
|
|
|
235
|
219
|
# Make runners
|
|
236
|
|
runners = dict(zip(top_pack, [IPTester(params=v) for v in packages]))
|
|
|
220
|
runners = dict()
|
|
237
|
221
|
|
|
238
|
|
# Test IPython.kernel using trial if twisted is installed
|
|
|
222
|
nose_runners = dict(zip(nose_packages, [IPTester(params=v) for v in nose_packages]))
|
|
239
|
223
|
if have_zi and have_twisted and have_foolscap:
|
|
240
|
|
runners['trial'] = IPTester('trial',['IPython'])
|
|
241
|
|
|
|
242
|
|
runners['modules'] = IPTester(params=modules)
|
|
|
224
|
trial_runners = dict(zip(trial_packages, [IPTester('trial',params=v) for v in trial_packages]))
|
|
|
225
|
runners.update(nose_runners)
|
|
|
226
|
runners.update(trial_runners)
|
|
243
|
227
|
|
|
244
|
228
|
return runners
|
|
245
|
229
|
|
|
@@
-252,13
+236,15
b' def run_iptestall():'
|
|
252
|
236
|
and packages of IPython to be tested each in their own subprocess using
|
|
253
|
237
|
nose or twisted.trial appropriately.
|
|
254
|
238
|
"""
|
|
|
239
|
|
|
255
|
240
|
runners = make_runners()
|
|
|
241
|
|
|
256
|
242
|
# Run all test runners, tracking execution time
|
|
257
|
243
|
failed = {}
|
|
258
|
244
|
t_start = time.time()
|
|
259
|
245
|
for name,runner in runners.iteritems():
|
|
260
|
246
|
print '*'*77
|
|
261
|
|
print 'IPython test set:',name
|
|
|
247
|
print 'IPython test set:', name
|
|
262
|
248
|
res = runner.run()
|
|
263
|
249
|
if res:
|
|
264
|
250
|
failed[name] = res
|