[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