diff options
Diffstat (limited to 'test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java')
-rw-r--r-- | test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java | 148 |
1 files changed, 136 insertions, 12 deletions
diff --git a/test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java b/test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java index f6da6f82..09c90dc6 100644 --- a/test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java +++ b/test/src/jdk/nashorn/internal/runtime/TrustedScriptEngineTest.java @@ -28,20 +28,20 @@ package jdk.nashorn.internal.runtime; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; - +import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; -import javax.script.ScriptContext; import javax.script.ScriptException; -import javax.script.SimpleBindings; import javax.script.SimpleScriptContext; +import jdk.nashorn.api.scripting.ClassFilter; import jdk.nashorn.api.scripting.NashornScriptEngineFactory; import org.testng.annotations.Test; /** * Tests for trusted client usage of nashorn script engine factory extension API */ +@SuppressWarnings("javadoc") public class TrustedScriptEngineTest { @Test public void versionTest() { @@ -55,7 +55,7 @@ public class TrustedScriptEngineTest { private final boolean[] reached = new boolean[1]; @Override - protected Class findClass(final String name) throws ClassNotFoundException { + protected Class<?> findClass(final String name) throws ClassNotFoundException { // flag that it reached here reached[0] = true; return super.findClass(name); @@ -64,7 +64,7 @@ public class TrustedScriptEngineTest { public boolean reached() { return reached[0]; } - }; + } // These are for "private" extension API of NashornScriptEngineFactory that // accepts a ClassLoader and/or command line options. @@ -72,7 +72,7 @@ public class TrustedScriptEngineTest { @Test public void factoryClassLoaderTest() { final ScriptEngineManager sm = new ScriptEngineManager(); - for (ScriptEngineFactory fac : sm.getEngineFactories()) { + for (final ScriptEngineFactory fac : sm.getEngineFactories()) { if (fac instanceof NashornScriptEngineFactory) { final NashornScriptEngineFactory nfac = (NashornScriptEngineFactory)fac; final MyClassLoader loader = new MyClassLoader(); @@ -96,7 +96,7 @@ public class TrustedScriptEngineTest { @Test public void factoryClassLoaderAndOptionsTest() { final ScriptEngineManager sm = new ScriptEngineManager(); - for (ScriptEngineFactory fac : sm.getEngineFactories()) { + for (final ScriptEngineFactory fac : sm.getEngineFactories()) { if (fac instanceof NashornScriptEngineFactory) { final NashornScriptEngineFactory nfac = (NashornScriptEngineFactory)fac; final String[] options = new String[] { "-strict" }; @@ -130,7 +130,7 @@ public class TrustedScriptEngineTest { @Test public void factoryOptionsTest() { final ScriptEngineManager sm = new ScriptEngineManager(); - for (ScriptEngineFactory fac : sm.getEngineFactories()) { + for (final ScriptEngineFactory fac : sm.getEngineFactories()) { if (fac instanceof NashornScriptEngineFactory) { final NashornScriptEngineFactory nfac = (NashornScriptEngineFactory)fac; // specify --no-syntax-extensions flag @@ -140,7 +140,8 @@ public class TrustedScriptEngineTest { // try nashorn specific extension e.eval("var f = funtion(x) 2*x;"); fail("should have thrown exception!"); - } catch (final ScriptException se) { + } catch (final Exception ex) { + //empty } return; } @@ -156,7 +157,7 @@ public class TrustedScriptEngineTest { */ public void noLoaderPerCompilerTest() { final ScriptEngineManager sm = new ScriptEngineManager(); - for (ScriptEngineFactory fac : sm.getEngineFactories()) { + for (final ScriptEngineFactory fac : sm.getEngineFactories()) { if (fac instanceof NashornScriptEngineFactory) { final NashornScriptEngineFactory nfac = (NashornScriptEngineFactory)fac; final String[] options = new String[] { "--loader-per-compile=false" }; @@ -181,7 +182,7 @@ public class TrustedScriptEngineTest { */ public void noLoaderPerCompilerWithSameNameTest() { final ScriptEngineManager sm = new ScriptEngineManager(); - for (ScriptEngineFactory fac : sm.getEngineFactories()) { + for (final ScriptEngineFactory fac : sm.getEngineFactories()) { if (fac instanceof NashornScriptEngineFactory) { final NashornScriptEngineFactory nfac = (NashornScriptEngineFactory)fac; final String[] options = new String[] { "--loader-per-compile=false" }; @@ -221,8 +222,106 @@ public class TrustedScriptEngineTest { assertTrue(e.eval("typeof bar").equals("function")); } + @Test + public void classFilterTest() throws ScriptException { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + final ScriptEngine e = fac.getScriptEngine(new ClassFilter() { + @Override + public boolean exposeToScripts(final String fullName) { + // don't allow anything that is not "java." + return fullName.startsWith("java."); + } + }); + + assertEquals(e.eval("typeof javax.script.ScriptEngine"), "object"); + assertEquals(e.eval("typeof java.util.Vector"), "function"); + + try { + e.eval("Java.type('javax.script.ScriptContext')"); + fail("should not reach here"); + } catch (final ScriptException | RuntimeException se) { + if (! (se.getCause() instanceof ClassNotFoundException)) { + fail("ClassNotFoundException expected"); + } + } + } + + @Test + public void classFilterTest2() throws ScriptException { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + final ScriptEngine e = fac.getScriptEngine(new String[0], Thread.currentThread().getContextClassLoader(), + new ClassFilter() { + @Override + public boolean exposeToScripts(final String fullName) { + // don't allow anything that is not "java." + return fullName.startsWith("java."); + } + }); + + assertEquals(e.eval("typeof javax.script.ScriptEngine"), "object"); + assertEquals(e.eval("typeof java.util.Vector"), "function"); + + try { + e.eval("Java.type('javax.script.ScriptContext')"); + fail("should not reach here"); + } catch (final ScriptException | RuntimeException se) { + if (! (se.getCause() instanceof ClassNotFoundException)) { + fail("ClassNotFoundException expected"); + } + } + } + + @Test + public void nullClassFilterTest() { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + try { + fac.getScriptEngine((ClassFilter)null); + fail("should have thrown NPE"); + } catch (final NullPointerException e) { + //empty + } + } + + @Test + public void nullClassFilterTest2() { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + try { + fac.getScriptEngine(new String[0], null, null); + fail("should have thrown NPE"); + } catch (final NullPointerException e) { + //empty + } + } + + @Test + public void nullArgsTest() { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + try { + fac.getScriptEngine((String[])null); + fail("should have thrown NPE"); + } catch (final NullPointerException e) { + //empty + } + } + + @Test + public void nullArgsTest2() { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + try { + fac.getScriptEngine(null, null, new ClassFilter() { + @Override + public boolean exposeToScripts(final String name) { + return true; + } + }); + fail("should have thrown NPE"); + } catch (final NullPointerException e) { + //empty + } + } - @Test public void nashornSwallowsConstKeyword() throws Exception { + @Test + public void nashornSwallowsConstKeyword() throws Exception { final NashornScriptEngineFactory f = new NashornScriptEngineFactory(); final String[] args = new String[] { "--const-as-var" }; final ScriptEngine engine = f.getScriptEngine(args); @@ -235,4 +334,29 @@ public class TrustedScriptEngineTest { ); assertEquals(ret, 10, "Parsed and executed OK"); } + + @Test + public void evalDefaultFileNameTest() throws ScriptException { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + final ScriptEngine engine = fac.getScriptEngine(new String[] { "--verify-code=true" }); + // default FILENAME being "<eval>" make sure generated code bytecode verifies. + engine.eval("var a = 3;"); + } + + @Test + public void evalFileNameWithSpecialCharsTest() throws ScriptException { + final NashornScriptEngineFactory fac = new NashornScriptEngineFactory(); + final ScriptEngine engine = fac.getScriptEngine(new String[] { "--verify-code=true" }); + final ScriptContext ctxt = new SimpleScriptContext(); + // use file name with "dangerous" chars. + ctxt.setAttribute(ScriptEngine.FILENAME, "<myscript>", ScriptContext.ENGINE_SCOPE); + engine.eval("var a = 3;"); + ctxt.setAttribute(ScriptEngine.FILENAME, "[myscript]", ScriptContext.ENGINE_SCOPE); + engine.eval("var h = 'hello';"); + ctxt.setAttribute(ScriptEngine.FILENAME, ";/\\$.", ScriptContext.ENGINE_SCOPE); + engine.eval("var foo = 'world';"); + // name used by jjs shell tool for the interactive mode + ctxt.setAttribute(ScriptEngine.FILENAME, "<shell>", ScriptContext.ENGINE_SCOPE); + engine.eval("var foo = 'world';"); + } } |