[Jython-checkins] jython: JSR223 ScriptEngine now sets __file__ to ScriptEngine.FILENAME, if defined.

jim.baker jython-checkins at python.org
Wed Jan 6 23:39:45 EST 2016


https://hg.python.org/jython/rev/50126c4efa22
changeset:   7855:50126c4efa22
user:        Jim Baker <jim.baker at rackspace.com>
date:        Wed Jan 06 21:39:38 2016 -0700
summary:
  JSR223 ScriptEngine now sets __file__ to ScriptEngine.FILENAME, if defined. Fixes #2223

files:
  src/org/python/jsr223/PyScriptEngine.java          |   2 +
  tests/java/org/python/jsr223/ScriptEngineTest.java |  34 ++++++---
  2 files changed, 23 insertions(+), 13 deletions(-)


diff --git a/src/org/python/jsr223/PyScriptEngine.java b/src/org/python/jsr223/PyScriptEngine.java
--- a/src/org/python/jsr223/PyScriptEngine.java
+++ b/src/org/python/jsr223/PyScriptEngine.java
@@ -69,6 +69,7 @@
             if (filename == null) {
                 return interp.compile(script);
             } else {
+                interp.getLocals().__setitem__(Py.newString("__file__"), Py.newString(filename));
                 return interp.compile(script, filename);
             }
         } catch (PyException pye) {
@@ -82,6 +83,7 @@
             if (filename == null) {
                 return interp.compile(reader);
             } else {
+                interp.getLocals().__setitem__(Py.newString("__file__"), Py.newString(filename));
                 return interp.compile(reader, filename);
             }
         } catch (PyException pye) {
diff --git a/tests/java/org/python/jsr223/ScriptEngineTest.java b/tests/java/org/python/jsr223/ScriptEngineTest.java
--- a/tests/java/org/python/jsr223/ScriptEngineTest.java
+++ b/tests/java/org/python/jsr223/ScriptEngineTest.java
@@ -25,9 +25,11 @@
     public void testEvalString() throws ScriptException {
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine pythonEngine = manager.getEngineByName("python");
-
+        ScriptContext context = pythonEngine.getContext();
+        context.setAttribute(ScriptEngine.FILENAME, "sample.py", ScriptContext.ENGINE_SCOPE);
         assertNull(pythonEngine.eval("x = 5"));
-        assertEquals(Integer.valueOf(5), pythonEngine.eval("x"));
+        assertEquals(5, pythonEngine.eval("x"));
+        assertEquals("sample.py", pythonEngine.eval("__file__"));
     }
 
     public void testSyntaxError() {
@@ -76,25 +78,31 @@
     public void testCompileEvalString() throws ScriptException {
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine pythonEngine = manager.getEngineByName("python");
-
+        ScriptContext context = pythonEngine.getContext();
+        context.setAttribute(ScriptEngine.FILENAME, "sample.py", ScriptContext.ENGINE_SCOPE);
         CompiledScript five = ((Compilable)pythonEngine).compile("5");
-        assertEquals(Integer.valueOf(5), five.eval());
+        assertEquals(5, five.eval());
+        assertEquals("sample.py", pythonEngine.eval("__file__"));
     }
 
     public void testEvalReader() throws ScriptException {
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine pythonEngine = manager.getEngineByName("python");
-
+        ScriptContext context = pythonEngine.getContext();
+        context.setAttribute(ScriptEngine.FILENAME, "sample.py", ScriptContext.ENGINE_SCOPE);
         assertNull(pythonEngine.eval(new StringReader("x = 5")));
-        assertEquals(Integer.valueOf(5), pythonEngine.eval(new StringReader("x")));
+        assertEquals(5, pythonEngine.eval(new StringReader("x")));
+        assertEquals("sample.py", pythonEngine.eval("__file__"));
     }
 
     public void testCompileEvalReader() throws ScriptException {
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine pythonEngine = manager.getEngineByName("python");
-
+        ScriptContext context = pythonEngine.getContext();
+        context.setAttribute(ScriptEngine.FILENAME, "sample.py", ScriptContext.ENGINE_SCOPE);
         CompiledScript five = ((Compilable)pythonEngine).compile(new StringReader("5"));
-        assertEquals(Integer.valueOf(5), five.eval());
+        assertEquals(5, five.eval());
+        assertEquals("sample.py", pythonEngine.eval("__file__"));
     }
 
     public void testBindings() throws ScriptException {
@@ -102,9 +110,9 @@
         ScriptEngine pythonEngine = manager.getEngineByName("python");
 
         pythonEngine.put("a", 42);
-        assertEquals(Integer.valueOf(42), pythonEngine.eval("a"));
+        assertEquals(42, pythonEngine.eval("a"));
         assertNull(pythonEngine.eval("x = 5"));
-        assertEquals(Integer.valueOf(5), pythonEngine.get("x"));
+        assertEquals(5, pythonEngine.get("x"));
         assertNull(pythonEngine.eval("del x"));
         assertNull(pythonEngine.get("x"));
     }
@@ -147,8 +155,8 @@
         thread.run();
         thread.join();
         assertNull(test.exception);
-        assertEquals(Integer.valueOf(-7), test.x);
-        assertEquals(Integer.valueOf(15), pythonEngine.get("x"));
+        assertEquals(-7, test.x);
+        assertEquals(15, pythonEngine.get("x"));
         assertNull(pythonEngine.eval("del x"));
         assertNull(pythonEngine.get("x"));
     }
@@ -159,7 +167,7 @@
         Invocable invocableEngine = (Invocable)pythonEngine;
 
         assertNull(pythonEngine.eval("def f(x): return abs(x)"));
-        assertEquals(Integer.valueOf(5), invocableEngine.invokeFunction("f", Integer.valueOf(-5)));
+        assertEquals(5, invocableEngine.invokeFunction("f", -5));
         assertEquals("spam", invocableEngine.invokeMethod(new PyString("  spam  "), "strip"));
         assertEquals("spam", invocableEngine.invokeMethod("  spam  ", "strip"));
     }

-- 
Repository URL: https://hg.python.org/jython


More information about the Jython-checkins mailing list