[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