Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: apptest-file
Changeset: r94314:808b8574832a
Date: 2018-04-13 21:37 +0100
http://bitbucket.org/pypy/pypy/changeset/808b8574832a/

Log:    fixes

diff --git a/pypy/tool/pytest/appsupport.py b/pypy/tool/pytest/appsupport.py
--- a/pypy/tool/pytest/appsupport.py
+++ b/pypy/tool/pytest/appsupport.py
@@ -198,7 +198,7 @@
     w_BuiltinAssertionError = space.getitem(space.builtin.w_dict,
                                             space.wrap('AssertionError'))
     w_metaclass = space.type(w_BuiltinAssertionError)
-    w_init = space.wrap(gateway.interp2app_temp(my_init))
+    w_init = space.wrap(gateway.interp2app(my_init))
     w_dict = space.newdict()
     space.setitem(w_dict, space.wrap('__init__'), w_init)
     return space.call_function(w_metaclass,
@@ -265,14 +265,14 @@
             raise
     raise oefmt(space.w_AssertionError, "DID NOT RAISE")
 
-app_raises = gateway.interp2app_temp(pypyraises)
+app_raises = gateway.interp2app(pypyraises)
 
 def pypyskip(space, w_message):
     """skip a test at app-level. """
     msg = space.unwrap(w_message)
     py.test.skip(msg)
 
-app_skip = gateway.interp2app_temp(pypyskip)
+app_skip = gateway.interp2app(pypyskip)
 
 def raises_w(space, w_ExpectedException, *args, **kwds):
     try:
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
@@ -23,20 +23,21 @@
             os.path.join(pypydir, 'tool', 'pytest', 'ast-rewriter'))
         w_source = space.newtext(source)
         fname = str(self.fspath)
+        w_name = space.newtext(str(self.fspath.purebasename))
         w_fname = space.newtext(fname)
         if self.rewrite_asserts:
-            w_mod = space.appexec([w_rootdir, w_source, w_fname],
-                                """(rootdir, source, fname):
+            w_mod = space.appexec([w_rootdir, w_source, w_fname, w_name],
+                                """(rootdir, source, fname, name):
                 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)
+                mod = create_module(name, co)
                 return mod
             """)
         else:
-            w_mod = create_module(space, w_fname, fname, source)
+            w_mod = create_module(space, w_name, fname, source)
         mod_dict = w_mod.getdict(space).unwrap(space)
         items = []
         for name, w_obj in mod_dict.items():
@@ -51,7 +52,7 @@
         pass
 
 def create_module(space, w_name, filename, source):
-    w_mod = Module(space, w_name)
+    w_mod = Module(space, w_name, add_package=False)
     w_dict = w_mod.getdict(space)
     space.setitem(w_dict, space.newtext('__file__'), space.newtext(filename))
     space.exec_(source, w_dict, w_dict, filename=filename)
@@ -83,10 +84,9 @@
     def execute_appex(self, space, w_func):
         space.getexecutioncontext().set_sys_exc_info(None)
         sig = w_func.code._signature
-        if sig.varargname or sig.kwargname or sig.kwonlyargnames:
+        if sig.varargname or sig.kwargname:
             raise ValueError(
-                'Test functions may not use *args, **kwargs or '
-                'keyword-only args')
+                'Test functions may not use *args or **kwargs')
         args_w = self.get_fixtures(space, sig.argnames)
         try:
             space.call_function(w_func, *args_w)
diff --git a/pypy/tool/pytest/ast-rewriter/ast_rewrite.py 
b/pypy/tool/pytest/ast-rewriter/ast_rewrite.py
--- a/pypy/tool/pytest/ast-rewriter/ast_rewrite.py
+++ b/pypy/tool/pytest/ast-rewriter/ast_rewrite.py
@@ -3,14 +3,21 @@
 import ast
 import itertools
 import marshal
-import struct
 import sys
 
-from ast_util import assertrepr_compare, format_explanation as 
_format_explanation
+from ast_util import callbinrepr, format_explanation as _format_explanation
 
 
 # pytest caches rewritten pycs in __pycache__.
-PYTEST_TAG = sys.implementation.cache_tag + "-PYTEST"
+if hasattr(sys, "pypy_version_info"):
+    impl = "pypy"
+elif sys.platform == "java":
+    impl = "jython"
+else:
+    impl = "cpython"
+ver = sys.version_info
+PYTEST_TAG = "%s-%s%s-PYTEST" % (impl, ver[0], ver[1])
+del ver, impl
 
 PYC_EXT = ".py" + (__debug__ and "c" or "o")
 PYC_TAIL = "." + PYTEST_TAG + PYC_EXT
@@ -29,6 +36,7 @@
     # import. However, there's little reason deviate, and I hope
     # sometime to be able to use imp.load_compiled to load them. (See
     # the comment in load_module above.)
+    import struct
     try:
         fp = open(pyc, "wb")
     except IOError:
@@ -91,6 +99,7 @@
 
     Return rewritten code if successful or None if not.
     """
+    import struct
     try:
         fp = open(pyc, "rb")
     except IOError:
@@ -161,7 +170,7 @@
             done = True
         if done:
             break
-    custom = assertrepr_compare(ops[i], each_obj[i], each_obj[i + 1])
+    custom = callbinrepr(ops[i], each_obj[i], each_obj[i + 1])
     if custom is not None:
         return custom
     return expl
diff --git a/pypy/tool/pytest/ast-rewriter/ast_util.py 
b/pypy/tool/pytest/ast-rewriter/ast_util.py
--- a/pypy/tool/pytest/ast-rewriter/ast_util.py
+++ b/pypy/tool/pytest/ast-rewriter/ast_util.py
@@ -10,6 +10,15 @@
 _reprcompare = None
 
 
+# the re-encoding is needed for python2 repr
+# with non-ascii characters (see issue 877 and 1379)
+def ecu(s):
+    try:
+        return u(s, 'utf-8', 'replace')
+    except TypeError:
+        return s
+
+
 def format_explanation(explanation):
     """This formats an explanation
 
@@ -20,6 +29,7 @@
     for when one explanation needs to span multiple lines, e.g. when
     displaying diffs.
     """
+    explanation = ecu(explanation)
     lines = _split_explanation(explanation)
     result = _format_lines(lines)
     return '\n'.join(result)
@@ -90,6 +100,13 @@
         s = s[:maxsize]
     return s
 
+def callbinrepr(op, left, right):
+    new_expl = assertrepr_compare(op, left, right)
+    new_expl = [line.replace("\n", "\\n") for line in new_expl]
+    res = "\n~".join(new_expl)
+    res = res.replace("%", "%%")
+    return res
+
 
 def assertrepr_compare(op, left, right, verbose=False):
     """Return specialised explanations for some operators/operands"""
diff --git a/pypy/tool/pytest/objspace.py b/pypy/tool/pytest/objspace.py
--- a/pypy/tool/pytest/objspace.py
+++ b/pypy/tool/pytest/objspace.py
@@ -30,6 +30,7 @@
         config = make_config(option)
     if config.objspace.usemodules.thread:
         config.translation.thread = True
+    config.objspace.extmodules = 'pypy.tool.pytest.fake_pytest'
     space = make_objspace(config)
     space.startup() # Initialize all builtin modules
     space.setitem(space.builtin.w_dict, space.wrap('AssertionError'),
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to