##// END OF EJS Templates
Merge branch 'fix_string_input2' into trunk
Fernando Perez -
r3302:43fac7c1 merge
parent child Browse files
Show More
@@ -0,0 +1,37 b''
1 """Tests for the key interactiveshell module.
2
3 Historically the main classes in interactiveshell have been under-tested. This
4 module should grow as many single-method tests as possible to trap many of the
5 recurring bugs we seem to encounter with high-level interaction.
6
7 Authors
8 -------
9 * Fernando Perez
10 """
11 #-----------------------------------------------------------------------------
12 # Copyright (C) 2011 The IPython Development Team
13 #
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
16 #-----------------------------------------------------------------------------
17
18 #-----------------------------------------------------------------------------
19 # Imports
20 #-----------------------------------------------------------------------------
21 # stdlib
22 import unittest
23
24 #-----------------------------------------------------------------------------
25 # Tests
26 #-----------------------------------------------------------------------------
27
28 class InteractiveShellTestCase(unittest.TestCase):
29 def test_naked_string_cells(self):
30 """Test that cells with only naked strings are fully executed"""
31 ip = get_ipython()
32 # First, single-line inputs
33 ip.run_cell('"a"\n')
34 self.assertEquals(ip.user_ns['_'], 'a')
35 # And also multi-line cells
36 ip.run_cell('"""a\nb"""\n')
37 self.assertEquals(ip.user_ns['_'], 'a\nb')
@@ -260,11 +260,14 b' class DisplayHook(Configurable):'
260 260 self.flush()
261 261 # Don't overwrite '_' and friends if '_' is in __builtin__ (otherwise
262 262 # we cause buggy behavior for things like gettext).
263
263 264 if '_' not in __builtin__.__dict__:
264 265 self.___ = self.__
265 266 self.__ = self._
266 267 self._ = result
267 self.shell.user_ns.update({'_':self._,'__':self.__,'___':self.___})
268 self.shell.user_ns.update({'_':self._,
269 '__':self.__,
270 '___':self.___})
268 271
269 272 # hackish access to top-level namespace to create _1,_2... dynamically
270 273 to_main = {}
@@ -4,7 +4,7 b''
4 4 #-----------------------------------------------------------------------------
5 5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 # Copyright (C) 2008-2010 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 8 #
9 9 # Distributed under the terms of the BSD License. The full license is in
10 10 # the file COPYING, distributed as part of this software.
@@ -2113,19 +2113,6 b' class InteractiveShell(Configurable, Magic):'
2113 2113 self.history_manager.store_inputs(ipy_cell, cell)
2114 2114
2115 2115 self.logger.log(ipy_cell, cell)
2116 # dbg code!!!
2117 if 0:
2118 def myapp(self, val): # dbg
2119 import traceback as tb
2120 stack = ''.join(tb.format_stack())
2121 print 'Value:', val
2122 print 'Stack:\n', stack
2123 list.append(self, val)
2124
2125 import new
2126 self.history_manager.input_hist_parsed.append = types.MethodType(myapp,
2127 self.history_manager.input_hist_parsed)
2128 # End dbg
2129 2116
2130 2117 # All user code execution must happen with our context managers active
2131 2118 with nested(self.builtin_trap, self.display_trap):
@@ -2167,15 +2154,31 b' class InteractiveShell(Configurable, Magic):'
2167 2154 self.execution_count += 1
2168 2155
2169 2156 def run_one_block(self, block):
2170 """Run a single interactive block.
2157 """Run a single interactive block of source code.
2171 2158
2172 2159 If the block is single-line, dynamic transformations are applied to it
2173 2160 (like automagics, autocall and alias recognition).
2161
2162 If the block is multi-line, it must consist of valid Python code only.
2163
2164 Parameters
2165 ----------
2166 block : string
2167 A (possibly multiline) string of code to be executed.
2168
2169 Returns
2170 -------
2171 The output of the underlying execution method used, be it
2172 :meth:`run_source` or :meth:`run_single_line`.
2174 2173 """
2175 2174 if len(block.splitlines()) <= 1:
2176 2175 out = self.run_single_line(block)
2177 2176 else:
2178 out = self.run_code(block)
2177 # Call run_source, which correctly compiles the input cell.
2178 # run_code must only be called when we know we have a code object,
2179 # as it does a naked exec and the compilation mode may not be what
2180 # we wanted.
2181 out = self.run_source(block)
2179 2182 return out
2180 2183
2181 2184 def run_single_line(self, line):
@@ -2329,7 +2332,7 b' class InteractiveShell(Configurable, Magic):'
2329 2332 try:
2330 2333 try:
2331 2334 self.hooks.pre_run_code_hook()
2332 #rprint('Running code') # dbg
2335 #rprint('Running code', repr(code_obj)) # dbg
2333 2336 exec code_obj in self.user_global_ns, self.user_ns
2334 2337 finally:
2335 2338 # Reset our crash handler in place
@@ -1,5 +1,10 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Tests for the inputsplitter module.
3
4 Authors
5 -------
6 * Fernando Perez
7 * Robert Kern
3 8 """
4 9 #-----------------------------------------------------------------------------
5 10 # Copyright (C) 2010 The IPython Development Team
@@ -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,10 +94,15 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 # and we have examples that test it. So we ensure that the namespace
91 # is always 'clean' of it before it's used for test code execution.
92 self.pop('_',None)
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.
105 self.pop('_', None)
93 106
94 107 # The builtins namespace must *always* be the real __builtin__ module,
95 108 # else weird stuff happens. The main ipython code does have provisions
@@ -39,11 +39,7 b' from __future__ import absolute_import'
39 39 import re
40 40 import sys
41 41 import unittest
42 from doctest import DocTestFinder, DocTestRunner
43 try:
44 from doctest import TestResults
45 except:
46 from ._doctest26 import TestResults
42 from doctest import DocTestFinder, DocTestRunner, TestResults
47 43
48 44 # We already have python3-compliant code for parametric tests
49 45 if sys.version[0]=='2':
@@ -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
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now