[pypy-commit] pypy py3tests: Add option to enable app-level assert rewriting; turn it off by default

rlamy pypy.commits at gmail.com
Thu Mar 22 10:18:18 EDT 2018


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3tests
Changeset: r94072:aaa43023ad0d
Date: 2018-03-22 15:16 +0100
http://bitbucket.org/pypy/pypy/changeset/aaa43023ad0d/

Log:	Add option to enable app-level assert rewriting; turn it off by
	default

diff --git a/pypy/conftest.py b/pypy/conftest.py
--- a/pypy/conftest.py
+++ b/pypy/conftest.py
@@ -60,6 +60,9 @@
     group.addoption('--raise-operr', action="store_true",
             default=False, dest="raise_operr",
             help="Show the interp-level OperationError in app-level tests")
+    group.addoption('--applevel-rewrite', action="store_true",
+            default=False, dest="applevel_rewrite",
+            help="Use assert rewriting in app-level test files (slow)")
 
 @pytest.fixture(scope='function')
 def space(request):
@@ -96,7 +99,8 @@
     if not parent.config.getoption('runappdirect'):
         if path.fnmatch(APPLEVEL_FN):
             from pypy.tool.pytest.apptest2 import AppTestModule
-            return AppTestModule(path, parent)
+            rewrite = parent.config.getoption('applevel_rewrite')
+            return AppTestModule(path, parent, rewrite_asserts=rewrite)
         else:
             return PyPyModule(path, parent)
 
diff --git a/pypy/tool/pytest/apptest2.py b/pypy/tool/pytest/apptest2.py
--- a/pypy/tool/pytest/apptest2.py
+++ b/pypy/tool/pytest/apptest2.py
@@ -11,6 +11,9 @@
 
 
 class AppTestModule(pytest.Module):
+    def __init__(self, path, parent, rewrite_asserts=False):
+        super(AppTestModule, self).__init__(path, parent)
+        self.rewrite_asserts = rewrite_asserts
 
     def collect(self):
         _, source = app_rewrite._prepare_source(self.fspath)
@@ -19,16 +22,26 @@
             os.path.join(pypydir, 'tool', 'pytest', 'ast-rewriter'))
         w_source = space.newtext(source)
         w_fname = space.newtext(str(self.fspath))
-        w_mod = space.appexec([w_rootdir, w_source, w_fname],
-                              """(rootdir, source, fname):
-        import sys
-        sys.path.insert(0, rootdir)
-        from ast_rewrite import rewrite_asserts, create_module
+        if self.rewrite_asserts:
+            w_mod = space.appexec([w_rootdir, w_source, w_fname],
+                                """(rootdir, source, fname):
+                import sys
+                sys.path.insert(0, rootdir)
+                from ast_rewrite import rewrite_asserts, create_module
 
-        co = rewrite_asserts(source, fname)
-        mod = create_module(fname, co)
-        return mod
-        """)
+                co = rewrite_asserts(source, fname)
+                mod = create_module(fname, co)
+                return mod
+            """)
+        else:
+            w_mod = space.appexec([w_rootdir, w_source, w_fname],
+                """(rootdir, source, fname):
+                    import sys
+                    sys.path.insert(0, rootdir)
+                    from ast_rewrite import create_module
+                    co = compile(source, fname, 'exec')
+                    return create_module(fname, co)
+            """)
         mod_dict = w_mod.getdict(space).unwrap(space)
         items = []
         for name, w_obj in mod_dict.items():


More information about the pypy-commit mailing list