##// END OF EJS Templates
Merge pull request #2110 from asmeurer/inputsplitter...
Fernando Perez -
r7827:c7401c9b merge
parent child Browse files
Show More
@@ -115,7 +115,9 b" dedent_re = re.compile('|'.join(["
115 115 r'^\s+raise\([^\)]*\).*$', # wacky raise with immediate open paren
116 116 r'^\s+return(\s.*)?$', # normal return (+ space + other stuff, maybe)
117 117 r'^\s+return\([^\)]*\).*$', # wacky return with immediate open paren
118 r'^\s+pass\s*$' # pass (optionally followed by trailing spaces)
118 r'^\s+pass\s*$', # pass (optionally followed by trailing spaces)
119 r'^\s+break\s*$', # break (optionally followed by trailing spaces)
120 r'^\s+continue\s*$', # continue (optionally followed by trailing spaces)
119 121 ]))
120 122 ini_spaces_re = re.compile(r'^([ \t\r\f\v]+)')
121 123
@@ -369,7 +371,7 b' class InputSplitter(object):'
369 371 self.code, self._is_complete = None, None
370 372
371 373 # Honor termination lines properly
372 if source.rstrip().endswith('\\'):
374 if source.endswith('\\\n'):
373 375 return False
374 376
375 377 self._update_indent(lines)
@@ -227,6 +227,26 b' class InputSplitterTestCase(unittest.TestCase):'
227 227 isp.push('if 1:\n pass ')
228 228 self.assertEqual(isp.indent_spaces, 0)
229 229
230 def test_dedent_break(self):
231 isp = self.isp # shorthand
232 # should NOT cause dedent
233 isp.push('while 1:\n breaks = 5')
234 self.assertEqual(isp.indent_spaces, 4)
235 isp.push('while 1:\n break')
236 self.assertEqual(isp.indent_spaces, 0)
237 isp.push('while 1:\n break ')
238 self.assertEqual(isp.indent_spaces, 0)
239
240 def test_dedent_continue(self):
241 isp = self.isp # shorthand
242 # should NOT cause dedent
243 isp.push('while 1:\n continues = 5')
244 self.assertEqual(isp.indent_spaces, 4)
245 isp.push('while 1:\n continue')
246 self.assertEqual(isp.indent_spaces, 0)
247 isp.push('while 1:\n continue ')
248 self.assertEqual(isp.indent_spaces, 0)
249
230 250 def test_dedent_raise(self):
231 251 isp = self.isp # shorthand
232 252 # should NOT cause dedent
@@ -351,6 +371,22 b' class InputSplitterTestCase(unittest.TestCase):'
351 371 self.isp.push(u'\xc3\xa9')
352 372 self.isp.push(u"u'\xc3\xa9'")
353 373
374 def test_line_continuation(self):
375 """ Test issue #2108."""
376 isp = self.isp
377 # A blank line after a line continuation should not accept more
378 isp.push("1 \\\n\n")
379 self.assertFalse(isp.push_accepts_more())
380 # Whitespace after a \ is a SyntaxError. The only way to test that
381 # here is to test that push doesn't accept more (as with
382 # test_syntax_error() above).
383 isp.push(r"1 \ ")
384 self.assertFalse(isp.push_accepts_more())
385 # Even if the line is continuable (c.f. the regular Python
386 # interpreter)
387 isp.push(r"(1 \ ")
388 self.assertFalse(isp.push_accepts_more())
389
354 390 class InteractiveLoopTestCase(unittest.TestCase):
355 391 """Tests for an interactive loop like a python shell.
356 392 """
@@ -9,7 +9,7 b' Welcome to IPython. Our full documentation is available on `our website'
9 9 <http://ipython.org/documentation.html>`_; if you downloaded a built source
10 10 distribution the ``docs/source`` directory contains the plaintext version of
11 11 these manuals. If you have Sphinx installed, you can build them by typing
12 ``make html`` for local browsing.
12 ``cd docs; make html`` for local browsing.
13 13
14 14
15 15 Dependencies and supported Python versions
General Comments 0
You need to be logged in to leave comments. Login now