Show More
@@ -68,11 +68,19 b' class ipnsdict(dict):' | |||
|
68 | 68 | This subclass adds a simple checkpointing capability so that when testing |
|
69 | 69 | machinery clears it (we use it as the test execution context), it doesn't |
|
70 | 70 | get completely destroyed. |
|
71 | ||
|
72 | In addition, it can handle the presence of the '_' key in a special manner, | |
|
73 | which is needed because of how Python's doctest machinery operates with | |
|
74 | '_'. See constructor and :meth:`update` for details. | |
|
71 | 75 | """ |
|
72 | 76 | |
|
73 | 77 | def __init__(self,*a): |
|
74 | 78 | dict.__init__(self,*a) |
|
75 | 79 | self._savedict = {} |
|
80 | # If this flag is True, the .update() method will unconditionally | |
|
81 | # remove a key named '_'. This is so that such a dict can be used as a | |
|
82 | # namespace in doctests that call '_'. | |
|
83 | self.protect_underscore = False | |
|
76 | 84 | |
|
77 | 85 | def clear(self): |
|
78 | 86 | dict.clear(self) |
@@ -86,11 +94,14 b' class ipnsdict(dict):' | |||
|
86 | 94 | self._checkpoint() |
|
87 | 95 | dict.update(self,other) |
|
88 | 96 | |
|
89 | # If '_' is in the namespace, python won't set it when executing code | |
|
90 | # *in doctests*, and we have multiple doctests that use '_'. So we | |
|
91 | # ensure that the namespace is always 'clean' of it before it's used | |
|
92 | # for test code execution. Note: this means that outside of doctests, | |
|
93 | # our own testing | |
|
97 | if self.protect_underscore: | |
|
98 | # If '_' is in the namespace, python won't set it when executing | |
|
99 | # code *in doctests*, and we have multiple doctests that use '_'. | |
|
100 | # So we ensure that the namespace is always 'clean' of it before | |
|
101 | # it's used for test code execution. | |
|
102 | # This flag is only turned on by the doctest machinery, so that | |
|
103 | # normal test code can assume the _ key is updated like any other | |
|
104 | # key and can test for its presence after cell executions. | |
|
94 | 105 | self.pop('_',None) |
|
95 | 106 | |
|
96 | 107 | # The builtins namespace must *always* be the real __builtin__ module, |
@@ -273,6 +273,10 b' class DocTestCase(doctests.DocTestCase):' | |||
|
273 | 273 | # fills with the necessary info from the module being tested). |
|
274 | 274 | _ip.user_ns.update(self._dt_test.globs) |
|
275 | 275 | self._dt_test.globs = _ip.user_ns |
|
276 | # IPython must protect the _ key in the namespace (it can't exist) | |
|
277 | # so that Python's doctest code sets it naturally, so we enable | |
|
278 | # this feature of our testing namespace. | |
|
279 | _ip.user_ns.protect_underscore = True | |
|
276 | 280 | |
|
277 | 281 | super(DocTestCase, self).setUp() |
|
278 | 282 | |
@@ -282,6 +286,9 b' class DocTestCase(doctests.DocTestCase):' | |||
|
282 | 286 | # teardown doesn't destroy the ipython namespace |
|
283 | 287 | if isinstance(self._dt_test.examples[0],IPExample): |
|
284 | 288 | self._dt_test.globs = self._dt_test_globs_ori |
|
289 | # Restore the behavior of the '_' key in the user namespace to | |
|
290 | # normal after each doctest, so that unittests behave normally | |
|
291 | _ip.user_ns.protect_underscore = False | |
|
285 | 292 | |
|
286 | 293 | # XXX - fperez: I am not sure if this is truly a bug in nose 0.11, but |
|
287 | 294 | # it does look like one to me: its tearDown method tries to run |
General Comments 0
You need to be logged in to leave comments.
Login now