< 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 >