From de4ba654e16782f96cab589c411fccdd9e5eb167 2011-02-04 02:20:13 From: Fernando Perez Date: 2011-02-04 02:20:13 Subject: [PATCH] Fix bug with execution of naked multiline strings. The actual bug fix was a trivial one-line change, made here. The rest of the commits in this series improve our testing machinery and clean up related code. The actual fix was just calling the run_source instead of the run_code method, which should only be called with compiled code objects. --- diff --git a/IPython/core/interactiveshell.py b/IPython/core/interactiveshell.py index 5846cd2..f9f1ca2 100644 --- a/IPython/core/interactiveshell.py +++ b/IPython/core/interactiveshell.py @@ -2174,8 +2174,11 @@ class InteractiveShell(Configurable, Magic): if len(block.splitlines()) <= 1: out = self.run_single_line(block) else: - out = self.run_code(block) - #out = self.run_source(block) + # Call run_source, which correctly compiles the input cell. + # run_code must only be called when we know we have a code object, + # as it does a naked exec and the compilation mode may not be what + # we wanted. + out = self.run_source(block) return out def run_single_line(self, line): diff --git a/IPython/core/tests/test_interactiveshell.py b/IPython/core/tests/test_interactiveshell.py new file mode 100644 index 0000000..3a081cf --- /dev/null +++ b/IPython/core/tests/test_interactiveshell.py @@ -0,0 +1,37 @@ +"""Tests for the key interactiveshell module. + +Historically the main classes in interactiveshell have been under-tested. This +module should grow as many single-method tests as possible to trap many of the +recurring bugs we seem to encounter with high-level interaction. + +Authors +------- +* Fernando Perez +""" +#----------------------------------------------------------------------------- +# Copyright (C) 2011 The IPython Development Team +# +# Distributed under the terms of the BSD License. The full license is in +# the file COPYING, distributed as part of this software. +#----------------------------------------------------------------------------- + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- +# stdlib +import unittest + +#----------------------------------------------------------------------------- +# Tests +#----------------------------------------------------------------------------- + +class InteractiveShellTestCase(unittest.TestCase): + def test_naked_string_cells(self): + """Test that cells with only naked strings are fully executed""" + ip = get_ipython() + # First, single-line inputs + ip.run_cell('"a"\n') + self.assertEquals(ip.user_ns['_'], 'a') + # And also multi-line cells + ip.run_cell('"""a\nb"""\n') + self.assertEquals(ip.user_ns['_'], 'a\nb')