< prev index next >

test/src/jdk/dynalink/test/DynamicLinkerFactoryTest.java

Print this page

        

*** 28,48 **** --- 28,52 ---- import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.util.List; import java.util.ServiceConfigurationError; + import javax.script.ScriptEngine; + import javax.script.ScriptEngineManager; import jdk.dynalink.CallSiteDescriptor; import jdk.dynalink.DynamicLinker; import jdk.dynalink.DynamicLinkerFactory; import jdk.dynalink.NoSuchDynamicMethodException; + import jdk.dynalink.NamedOperation; import jdk.dynalink.Operation; import jdk.dynalink.StandardOperation; import jdk.dynalink.linker.GuardingDynamicLinker; import jdk.dynalink.linker.LinkRequest; import jdk.dynalink.linker.LinkerServices; import jdk.dynalink.support.SimpleRelinkableCallSite; import jdk.dynalink.linker.GuardedInvocation; + import jdk.nashorn.api.scripting.AbstractJSObject; import org.testng.Assert; import org.testng.annotations.Test; @SuppressWarnings("javadoc") public class DynamicLinkerFactoryTest {
*** 252,257 **** --- 256,301 ---- throw new RuntimeException(th); } Assert.assertTrue(reachedAutoLinker); } + + @Test + public void nashornExportedLinkersTest() { + final DynamicLinkerFactory factory = newDynamicLinkerFactory(false); + final DynamicLinker linker = factory.createLinker(); + + final MethodType mt = MethodType.methodType(Object.class, Object.class); + final NamedOperation op = new NamedOperation(StandardOperation.GET_PROPERTY, "foo"); + final CallSite cs = linker.link(new SimpleRelinkableCallSite(new CallSiteDescriptor( + MethodHandles.publicLookup(), op, mt))); + final boolean[] reachedGetMember = new boolean[1]; + // check that the nashorn exported linker can be used for user defined JSObject + Object obj = new AbstractJSObject() { + @Override + public Object getMember(String name) { + reachedGetMember[0] = true; + return name.equals("foo")? "bar" : "<unknown>"; + } + }; + + Object value = null; + try { + value = cs.getTarget().invoke(obj); + } catch (Throwable th) { + throw new RuntimeException(th); + } + + Assert.assertTrue(reachedGetMember[0]); + Assert.assertEquals(value, "bar"); + + // check that the nashorn exported linker can be used for ScriptObjectMirror + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); + try { + obj = engine.eval("({ foo: 'hello' })"); + value = cs.getTarget().invoke(obj); + } catch (Throwable th) { + throw new RuntimeException(th); + } + Assert.assertEquals(value, "hello"); + } }
< prev index next >