Show More
@@ -41,7 +41,6 b" EXCLUDE = ['IPython/external/'," | |||
|
41 | 41 | 'IPython/Extensions/clearcmd', |
|
42 | 42 | 'IPython/Extensions/PhysicalQIn', |
|
43 | 43 | 'IPython/Extensions/scitedirector', |
|
44 | 'IPython/testing/plugin', | |
|
45 | 44 | ] |
|
46 | 45 | |
|
47 | 46 | #----------------------------------------------------------------------------- |
@@ -29,9 +29,6 b' def ipfunc():' | |||
|
29 | 29 | |
|
30 | 30 | In [1]: import os |
|
31 | 31 | |
|
32 | In [2]: cd / | |
|
33 | / | |
|
34 | ||
|
35 | 32 | In [3]: 2+3 |
|
36 | 33 | Out[3]: 5 |
|
37 | 34 |
@@ -392,7 +392,6 b' class DocTestCase(doctests.DocTestCase):' | |||
|
392 | 392 | self._dt_test.globs = _ip.IP.user_ns |
|
393 | 393 | |
|
394 | 394 | doctests.DocTestCase.setUp(self) |
|
395 | ||
|
396 | 395 | |
|
397 | 396 | |
|
398 | 397 | # A simple subclassing of the original with a different class name, so we can |
@@ -464,7 +463,11 b' class IPDocTestParser(doctest.DocTestParser):' | |||
|
464 | 463 | """Convert input IPython source into valid Python.""" |
|
465 | 464 | out = [] |
|
466 | 465 | newline = out.append |
|
467 | for lnum,line in enumerate(source.splitlines()): | |
|
466 | #print 'IPSRC:\n',source,'\n###' # dbg | |
|
467 | # The input source must be first stripped of all bracketing whitespace | |
|
468 | # and turned into lines, so it looks to the parser like regular user | |
|
469 | # input | |
|
470 | for lnum,line in enumerate(source.strip().splitlines()): | |
|
468 | 471 | newline(_ip.IP.prefilter(line,lnum>0)) |
|
469 | 472 | newline('') # ensure a closing newline, needed by doctest |
|
470 | 473 | #print "PYSRC:", '\n'.join(out) # dbg |
@@ -3,6 +3,7 b'' | |||
|
3 | 3 | |
|
4 | 4 | import nose.tools as nt |
|
5 | 5 | |
|
6 | ||
|
6 | 7 | def test_reset(): |
|
7 | 8 | """reset must clear most namespaces.""" |
|
8 | 9 | ip = _ip.IP |
@@ -283,6 +283,39 b' installed with IPython::' | |||
|
283 | 283 | |
|
284 | 284 | This command runs Nose with the proper options and extensions. |
|
285 | 285 | |
|
286 | A few tips for writing tests: | |
|
287 | ||
|
288 | * You can use IPython examples in your docstrings, including all IPython | |
|
289 | prompts. Rather than repeating it all here, see the files | |
|
290 | :file:`dtexample.py` and :file:`test_ipdoctest.py` in the | |
|
291 | :mod:`IPython.testing.plugin` module for examples of how you can use plain | |
|
292 | Python or IPython prompts, and what to do with examples whose output could be | |
|
293 | partly or completely random. | |
|
294 | ||
|
295 | * Use the decorators shipped in the :mod:`IPython.testing` package to tag tests | |
|
296 | that may be platform-specific or otherwise may have restrictions. | |
|
297 | ||
|
298 | * If a test isn't safe to run inside the main nose process (e.g. because it | |
|
299 | loads a GUI toolkit), consider running it in a subprocess and capturing its | |
|
300 | output for evaluation and test decision later. Here is an example of how to | |
|
301 | do it, by relying on the builtin ``_ip`` object that contains the public | |
|
302 | IPython api as defined in :mod:`IPython.ipapi`:: | |
|
303 | ||
|
304 | def test_obj_del(): | |
|
305 | """Test that object's __del__ methods are called on exit.""" | |
|
306 | test_dir = os.path.dirname(__file__) | |
|
307 | del_file = os.path.join(test_dir,'obj_del.py') | |
|
308 | out = _ip.IP.getoutput('ipython %s' % del_file) | |
|
309 | nt.assert_equals(out,'object A deleted') | |
|
310 | ||
|
311 | ||
|
312 | * In a file named ``test_X``, functions whose only test is their docstring (as | |
|
313 | a doctest) and which have no test functionality of their own, should be | |
|
314 | called *doctest_foo* instead of *test_foo*, otherwise they get double-counted | |
|
315 | (the empty function call is counted as a test, which just inflates tests | |
|
316 | numbers artificially). This restriction does not apply to functions in files | |
|
317 | with other names, due to how Nose discovers tests. | |
|
318 | ||
|
286 | 319 | .. _devel_config: |
|
287 | 320 | |
|
288 | 321 | Release checklist |
General Comments 0
You need to be logged in to leave comments.
Login now