[pypy-svn] pypy compile-from-stream: Fix all tests in pypy/interpreter;
amauryfa
commits-noreply at bitbucket.org
Mon Mar 21 23:23:21 CET 2011
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: compile-from-stream
Changeset: r42836:2e7094ba734b
Date: 2011-03-21 23:23 +0100
http://bitbucket.org/pypy/pypy/changeset/2e7094ba734b/
Log: Fix all tests in pypy/interpreter; port test_automation tests as
well
diff --git a/pypy/interpreter/pyparser/future.py b/pypy/interpreter/pyparser/future.py
--- a/pypy/interpreter/pyparser/future.py
+++ b/pypy/interpreter/pyparser/future.py
@@ -3,12 +3,13 @@
def get_futures(future_flags, tree):
flags = 0
+ pos = (-1, 0)
if not isinstance(tree, (ast.Module, ast.Interactive)):
- return flags, (0, 0)
+ return flags, pos
if not tree.body:
- return flags, (0, 0)
+ return flags, pos
found_docstring = False
@@ -22,12 +23,13 @@
flags |= future_flags.compiler_features[name]
except KeyError:
pass
+ pos = elem.lineno, elem.col_offset
elif isinstance(elem, ast.Expr):
if found_docstring:
break
if isinstance(elem.value, ast.Str):
found_docstring = True
- return flags, (elem.lineno, elem.col_offset)
+ return flags, pos
class FutureFlags(object):
diff --git a/pypy/interpreter/pyparser/test/test_futureautomaton.py b/pypy/interpreter/pyparser/test/test_futureautomaton.py
--- a/pypy/interpreter/pyparser/test/test_futureautomaton.py
+++ b/pypy/interpreter/pyparser/test/test_futureautomaton.py
@@ -1,222 +1,198 @@
import py
-import pypy.interpreter.pyparser.future as future
+from pypy.interpreter.pyparser import future, pyparse
+from pypy.interpreter.astcompiler import astbuilder
from pypy.tool import stdlib___future__ as fut
-def run(s):
- f = future.FutureAutomaton(future.futureFlags_2_5, s)
- try:
- f.start()
- except future.DoneException:
- pass
+class F(object):
+ pass
+
+def run(space, source):
+ parser = pyparse.PythonParser(space)
+ info = pyparse.CompileInfo("<string>", "exec")
+ tree = parser.parse_source(source, info)
+ mod = astbuilder.ast_from_node(space, tree, info)
+ f = F()
+ f.flags, (f.lineno, f.col_offset) = \
+ future.get_futures(future.futureFlags_2_5, mod)
return f
-def test_docstring():
+def test_docstring(space):
s = '"Docstring\\" "\nfrom __future__ import division\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_DIVISION
assert f.lineno == 2
assert f.col_offset == 0
-def test_comment():
+def test_comment(space):
s = '# A comment about nothing ;\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.lineno == -1
assert f.col_offset == 0
-def test_tripledocstring():
+def test_tripledocstring(space):
s = '''""" This is a
docstring with line
breaks in it. It even has a \n"""
'''
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.lineno == -1
assert f.col_offset == 0
-def test_escapedquote_in_tripledocstring():
+def test_escapedquote_in_tripledocstring(space):
s = '''""" This is a
docstring with line
breaks in it. \\"""It even has an escaped quote!"""
'''
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.lineno == -1
assert f.col_offset == 0
-def test_empty_line():
+def test_empty_line(space):
s = ' \t \f \n \n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.lineno == -1
assert f.col_offset == 0
-def test_from():
+def test_from(space):
s = 'from __future__ import division\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_DIVISION
assert f.lineno == 1
assert f.col_offset == 0
-def test_froms():
+def test_froms(space):
s = 'from __future__ import division, generators, with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED |
fut.CO_FUTURE_WITH_STATEMENT)
assert f.lineno == 1
assert f.col_offset == 0
-def test_from_as():
+def test_from_as(space):
s = 'from __future__ import division as b\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_DIVISION
assert f.lineno == 1
assert f.col_offset == 0
-def test_froms_as():
+def test_froms_as(space):
s = 'from __future__ import division as b, generators as c\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED)
assert f.lineno == 1
assert f.col_offset == 0
-def test_from_paren():
+def test_from_paren(space):
s = 'from __future__ import (division)\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_DIVISION
assert f.lineno == 1
assert f.col_offset == 0
-def test_froms_paren():
+def test_froms_paren(space):
s = 'from __future__ import (division, generators)\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED)
assert f.lineno == 1
assert f.col_offset == 0
-def test_froms_paren_as():
+def test_froms_paren_as(space):
s = 'from __future__ import (division as b, generators,)\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED)
assert f.lineno == 1
assert f.col_offset == 0
-def test_multiline():
+def test_multiline(space):
s = '"abc" #def\n #ghi\nfrom __future__ import (division as b, generators,)\nfrom __future__ import with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED |
fut.CO_FUTURE_WITH_STATEMENT)
assert f.lineno == 4
assert f.col_offset == 0
-def test_windows_style_lineendings():
+def test_windows_style_lineendings(space):
s = '"abc" #def\r\n #ghi\r\nfrom __future__ import (division as b, generators,)\r\nfrom __future__ import with_statement\r\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED |
fut.CO_FUTURE_WITH_STATEMENT)
assert f.lineno == 4
assert f.col_offset == 0
-def test_mac_style_lineendings():
+def test_mac_style_lineendings(space):
s = '"abc" #def\r #ghi\rfrom __future__ import (division as b, generators,)\rfrom __future__ import with_statement\r'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED |
fut.CO_FUTURE_WITH_STATEMENT)
assert f.lineno == 4
assert f.col_offset == 0
-def test_semicolon():
+def test_semicolon(space):
s = '"abc" #def\n #ghi\nfrom __future__ import (division as b, generators,); from __future__ import with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == (fut.CO_FUTURE_DIVISION |
fut.CO_GENERATOR_ALLOWED |
fut.CO_FUTURE_WITH_STATEMENT)
assert f.lineno == 3
assert f.col_offset == 55
-def test_full_chain():
- s = '"abc" #def\n #ghi\nfrom __future__ import (division as b, generators,); from __future__ import with_statement\n'
- flags, pos = future.get_futures(future.futureFlags_2_5, s)
- assert flags == (fut.CO_FUTURE_DIVISION |
- fut.CO_GENERATOR_ALLOWED |
- fut.CO_FUTURE_WITH_STATEMENT)
- assert pos == (3, 55)
+def test_intervening_code(space):
+ s = 'from __future__ import (division as b, generators,)\nfrom sys import modules\nfrom __future__ import with_statement\n'
+ f = run(space, s)
+ assert f.flags & fut.CO_FUTURE_WITH_STATEMENT == 0
+ assert f.lineno == 1
+ assert f.col_offset == 0
-def test_intervening_code():
- s = 'from __future__ import (division as b, generators,)\nfrom sys import modules\nfrom __future__ import with_statement\n'
- flags, pos = future.get_futures(future.futureFlags_2_5, s)
- assert flags & fut.CO_FUTURE_WITH_STATEMENT == 0
- assert pos == (1, 0)
-
-def test_nonexisting():
+def test_nonexisting(space):
s = 'from __future__ import non_existing_feature\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == 0
assert f.lineno == 1
assert f.col_offset == 0
-def test_from_import_abs_import():
+def test_from_import_abs_import(space):
s = 'from __future__ import absolute_import\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_ABSOLUTE_IMPORT
assert f.lineno == 1
assert f.col_offset == 0
-def test_raw_doc():
+def test_raw_doc(space):
s = 'r"Doc"\nfrom __future__ import with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_WITH_STATEMENT
assert f.lineno == 2
assert f.col_offset == 0
-def test_unicode_doc():
+def test_unicode_doc(space):
s = 'u"Doc"\nfrom __future__ import with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_WITH_STATEMENT
assert f.lineno == 2
assert f.col_offset == 0
-def test_raw_unicode_doc():
- s = 'ru"Doc"\nfrom __future__ import with_statement\n'
- f = run(s)
- assert f.pos == len(s)
+def test_raw_unicode_doc(space):
+ s = 'ur"Doc"\nfrom __future__ import with_statement\n'
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_WITH_STATEMENT
-def test_continuation_line():
+def test_continuation_line(space):
s = "\\\nfrom __future__ import with_statement\n"
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_WITH_STATEMENT
assert f.lineno == 2
assert f.col_offset == 0
-def test_continuation_lines():
+def test_continuation_lines(space):
s = "\\\n \t\\\nfrom __future__ import with_statement\n"
- f = run(s)
- assert f.pos == len(s)
+ f = run(space, s)
assert f.flags == fut.CO_FUTURE_WITH_STATEMENT
assert f.lineno == 3
assert f.col_offset == 0
@@ -224,14 +200,13 @@
# This looks like a bug in cpython parser
# and would require extensive modifications
# to future.py in order to emulate the same behaviour
-def test_continuation_lines_raise():
+def test_continuation_lines_raise(space):
py.test.skip("probably a CPython bug")
s = " \\\n \t\\\nfrom __future__ import with_statement\n"
try:
- f = run(s)
+ f = run(space, s)
except IndentationError, e:
assert e.args == 'unexpected indent'
- assert f.pos == len(s)
assert f.flags == 0
assert f.lineno == -1
assert f.col_offset == 0
diff --git a/pypy/interpreter/pyparser/pyparse.py b/pypy/interpreter/pyparser/pyparse.py
--- a/pypy/interpreter/pyparser/pyparse.py
+++ b/pypy/interpreter/pyparser/pyparse.py
@@ -226,7 +226,7 @@
return
if children[0].value != 'from':
return
- if len(children[1].children) != 1:
+ if not children[1].children or len(children[1].children) != 1:
return
if children[1].children[0].value != '__future__':
return
More information about the Pypy-commit
mailing list