diff options
Diffstat (limited to 'test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java')
-rw-r--r-- | test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java | 104 |
1 files changed, 89 insertions, 15 deletions
diff --git a/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java b/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java index 52199145..a066d6b3 100644 --- a/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java +++ b/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java @@ -29,8 +29,6 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; - -import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; import java.lang.reflect.InvocationHandler; @@ -39,6 +37,7 @@ import java.lang.reflect.Proxy; import java.util.concurrent.Callable; import javax.script.Compilable; import javax.script.CompiledScript; +import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; @@ -54,9 +53,10 @@ import org.testng.annotations.Test; * @build jdk.nashorn.api.scripting.Window jdk.nashorn.api.scripting.WindowEventHandler jdk.nashorn.api.scripting.VariableArityTestInterface jdk.nashorn.api.scripting.ScriptEngineTest * @run testng/othervm jdk.nashorn.api.scripting.ScriptEngineTest */ +@SuppressWarnings("javadoc") public class ScriptEngineTest { - private void log(String msg) { + private static void log(final String msg) { org.testng.Reporter.log(msg, true); } @@ -65,11 +65,11 @@ public class ScriptEngineTest { final ScriptEngineManager m = new ScriptEngineManager(); final ScriptEngine e = m.getEngineByName("nashorn"); - String[] args = new String[] { "hello", "world" }; + final String[] args = new String[] { "hello", "world" }; try { e.put("arguments", args); - Object arg0 = e.eval("arguments[0]"); - Object arg1 = e.eval("arguments[1]"); + final Object arg0 = e.eval("arguments[0]"); + final Object arg1 = e.eval("arguments[1]"); assertEquals(args[0], arg0); assertEquals(args[1], arg1); } catch (final Exception exp) { @@ -83,12 +83,12 @@ public class ScriptEngineTest { final ScriptEngineManager m = new ScriptEngineManager(); final ScriptEngine e = m.getEngineByName("nashorn"); - String[] args = new String[] { "hello", "world" }; + final String[] args = new String[] { "hello", "world" }; try { e.put("arguments", args); - Object arg0 = e.eval("var imports = new JavaImporter(java.io); " + + final Object arg0 = e.eval("var imports = new JavaImporter(java.io); " + " with(imports) { arguments[0] }"); - Object arg1 = e.eval("var imports = new JavaImporter(java.util, java.io); " + + final Object arg1 = e.eval("var imports = new JavaImporter(java.util, java.io); " + " with(imports) { arguments[1] }"); assertEquals(args[0], arg0); assertEquals(args[1], arg1); @@ -129,22 +129,24 @@ public class ScriptEngineTest { assertEquals(fac.getParameter(ScriptEngine.NAME), "javascript"); boolean seenJS = false; - for (String ext : fac.getExtensions()) { + for (final String ext : fac.getExtensions()) { if (ext.equals("js")) { seenJS = true; } } assertEquals(seenJS, true); - String str = fac.getMethodCallSyntax("obj", "foo", "x"); + final String str = fac.getMethodCallSyntax("obj", "foo", "x"); assertEquals(str, "obj.foo(x)"); boolean seenNashorn = false, seenJavaScript = false, seenECMAScript = false; - for (String name : fac.getNames()) { + for (final String name : fac.getNames()) { switch (name) { case "nashorn": seenNashorn = true; break; case "javascript": seenJavaScript = true; break; case "ECMAScript": seenECMAScript = true; break; + default: + break; } } @@ -153,12 +155,14 @@ public class ScriptEngineTest { assertTrue(seenECMAScript); boolean seenAppJS = false, seenAppECMA = false, seenTextJS = false, seenTextECMA = false; - for (String mime : fac.getMimeTypes()) { + for (final String mime : fac.getMimeTypes()) { switch (mime) { case "application/javascript": seenAppJS = true; break; case "application/ecmascript": seenAppECMA = true; break; case "text/javascript": seenTextJS = true; break; case "text/ecmascript": seenTextECMA = true; break; + default: + break; } } @@ -548,7 +552,7 @@ public class ScriptEngineTest { new Class[] { Runnable.class }, new InvocationHandler() { @Override - public Object invoke(Object p, Method m, Object[] a) { + public Object invoke(final Object p, final Method mtd, final Object[] a) { reached[0] = true; return null; } @@ -594,9 +598,79 @@ public class ScriptEngineTest { } } + // @bug 8046013: TypeError: Cannot apply "with" to non script object + @Test + public void withOnMirrorTest() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + final Object obj = e.eval("({ foo: 'hello'})"); + final Object[] arr = new Object[1]; + arr[0] = obj; + e.put("arr", arr); + final Object res = e.eval("var res; with(arr[0]) { res = foo; }; res"); + assertEquals(res, "hello"); + } + + // @bug 8054223: Nashorn: AssertionError when use __DIR__ and ScriptEngine.eval() + @Test + public void check__DIR__Test() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + e.eval("__DIR__"); + } + + // @bug 8050432:javax.script.filename variable should not be enumerable + // with nashorn engine's ENGINE_SCOPE bindings + @Test + public void enumerableGlobalsTest() throws ScriptException { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + + e.put(ScriptEngine.FILENAME, "test"); + final Object enumerable = e.eval( + "Object.getOwnPropertyDescriptor(this, " + + " 'javax.script.filename').enumerable"); + assertEquals(enumerable, Boolean.FALSE); + } + + public static class Context { + private Object myobj; + + public void set(final Object o) { + myobj = o; + } + + public Object get() { + return myobj; + } + } + + // @bug 8050977: Java8 Javascript Nashorn exception: + // no current Global instance for nashorn + @Test + public void currentGlobalMissingTest() throws Exception { + final ScriptEngineManager manager = new ScriptEngineManager(); + final ScriptEngine e = manager.getEngineByName("nashorn"); + + final Context ctx = new Context(); + e.put("ctx", ctx); + e.eval("var obj = { foo: function(str) { return str.toUpperCase() } }"); + e.eval("ctx.set(obj)"); + final Invocable inv = (Invocable)e; + assertEquals("HELLO", inv.invokeMethod(ctx.get(), "foo", "hello")); + // try object literal + e.eval("ctx.set({ bar: function(str) { return str.toLowerCase() } })"); + assertEquals("hello", inv.invokeMethod(ctx.get(), "bar", "HELLO")); + // try array literal + e.eval("var arr = [ 'hello', 'world' ]"); + e.eval("ctx.set(arr)"); + assertEquals("helloworld", inv.invokeMethod(ctx.get(), "join", "")); + } + private static void checkProperty(final ScriptEngine e, final String name) throws ScriptException { - String value = System.getProperty(name); + final String value = System.getProperty(name); e.put("name", name); assertEquals(value, e.eval("java.lang.System.getProperty(name)")); } |