use of org.graalvm.polyglot.Value in project graal by oracle.
the class ProxyAPITest method testProxyExecutable.
@Test
public void testProxyExecutable() {
ProxyExecutableTest proxy = new ProxyExecutableTest();
Value value = context.asValue(proxy);
assertTrue(value.canExecute());
assertSame(proxy, value.asProxyObject());
assertEquals(0, proxy.executeCounter);
proxy.execute = (args) -> {
assertEquals(2, args.length);
assertEquals("a", args[0].asString());
assertEquals('a', args[0].as(Object.class));
ValueAssert.assertValue(context, args[0], Trait.STRING);
assertTrue(args[1].isNumber());
assertEquals((byte) 42, args[1].asByte());
assertEquals((short) 42, args[1].asShort());
assertEquals(42, args[1].asInt());
assertEquals(42L, args[1].asLong());
assertEquals(42, args[1].as(Object.class));
ValueAssert.assertValue(context, args[1], Trait.NUMBER);
return 42;
};
assertEquals(42, value.execute('a', 42).asInt());
assertEquals(1, proxy.executeCounter);
final RuntimeException ex = new RuntimeException();
proxy.execute = (args) -> {
throw ex;
};
try {
value.execute();
Assert.fail();
} catch (PolyglotException e) {
assertTrue(e.isHostException());
assertSame(ex, e.asHostException());
assertEquals(2, proxy.executeCounter);
}
assertValue(context, value, Trait.PROXY_OBJECT, Trait.EXECUTABLE);
}
use of org.graalvm.polyglot.Value in project graal by oracle.
the class ProxySPITest method testArrayProxy.
@Test
public void testArrayProxy() throws Throwable {
Context context = Context.create();
final int size = 42;
ProxyArray proxyOuter = new ProxyArray() {
int[] array = new int[size];
{
Arrays.fill(array, 42);
}
public Object get(long index) {
return array[(int) index];
}
public void set(long index, Value value) {
array[(int) index] = value.asInt();
}
public long getSize() {
return size;
}
};
eval(context, proxyOuter, (proxyInner) -> {
assertEquals(size, Message.GET_SIZE, proxyInner);
for (int i = 0; i < size; i++) {
assertEquals(42, Message.READ, proxyInner, i);
}
for (int i = 0; i < size; i++) {
assertEquals(41, Message.WRITE, proxyInner, i, 41);
}
for (int i = 0; i < size; i++) {
assertEquals(41, Message.READ, proxyInner, i);
}
assertUnknownIdentifier(Message.READ, proxyInner, 42);
assertUnknownIdentifier(Message.READ, proxyInner, -1);
assertUnknownIdentifier(Message.READ, proxyInner, Integer.MAX_VALUE);
assertUnknownIdentifier(Message.READ, proxyInner, Integer.MIN_VALUE);
assertEquals(true, Message.HAS_SIZE, proxyInner);
assertEquals(EXISTING_KEY, Message.KEY_INFO, proxyInner, 41);
assertEquals(NO_KEY, Message.KEY_INFO, proxyInner, 42);
assertUnsupported(Message.createExecute(0), proxyInner);
assertUnsupported(Message.AS_POINTER, proxyInner);
assertEquals(false, Message.HAS_KEYS, proxyInner);
assertEmpty(Message.KEYS, proxyInner);
assertUnsupported(Message.READ, proxyInner, "");
assertUnsupported(Message.WRITE, proxyInner, "");
assertUnsupported(Message.TO_NATIVE, proxyInner);
assertUnsupported(Message.UNBOX, proxyInner);
assertUnsupported(Message.createInvoke(0), proxyInner);
assertUnsupported(Message.createExecute(0), proxyInner);
assertUnsupported(Message.createNew(0), proxyInner);
assertEquals(false, Message.IS_BOXED, proxyInner);
assertEquals(false, Message.IS_EXECUTABLE, proxyInner);
assertEquals(false, Message.IS_INSTANTIABLE, proxyInner);
assertEquals(false, Message.IS_NULL, proxyInner);
assertEquals(false, Message.IS_POINTER, proxyInner);
assertEquals(0, Message.KEY_INFO, proxyInner);
return null;
});
}
use of org.graalvm.polyglot.Value in project graal by oracle.
the class ProxySPITest method testProxyObjectUnsupported.
@Test
public void testProxyObjectUnsupported() throws Throwable {
Context context = Context.create();
ProxyObject proxyOuter = new ProxyObject() {
public void putMember(String key, Value value) {
throw new UnsupportedOperationException();
}
public boolean hasMember(String key) {
return true;
}
public ProxyArray getMemberKeys() {
return null;
}
public Object getMember(String key) {
throw new UnsupportedOperationException();
}
};
eval(context, proxyOuter, (proxyInner) -> {
assertEmpty(Message.KEYS, proxyInner);
assertUnsupported(Message.READ, proxyInner, "");
assertUnsupported(Message.WRITE, proxyInner, "", 42);
assertUnsupported(Message.createExecute(0), proxyInner);
assertUnsupported(Message.GET_SIZE, proxyInner);
assertUnsupported(Message.READ, proxyInner, 0);
assertUnsupported(Message.WRITE, proxyInner, 1);
assertUnsupported(Message.UNBOX, proxyInner);
assertUnsupported(Message.TO_NATIVE, proxyInner);
assertUnsupported(Message.AS_POINTER, proxyInner);
assertUnsupported(Message.createInvoke(0), proxyInner);
assertUnsupported(Message.createExecute(0), proxyInner);
assertUnsupported(Message.createNew(0), proxyInner);
assertEquals(false, Message.IS_BOXED, proxyInner);
assertEquals(false, Message.IS_EXECUTABLE, proxyInner);
assertEquals(false, Message.IS_INSTANTIABLE, proxyInner);
assertEquals(false, Message.IS_NULL, proxyInner);
assertEquals(true, Message.HAS_KEYS, proxyInner);
assertEquals(false, Message.HAS_SIZE, proxyInner);
assertEquals(false, Message.IS_POINTER, proxyInner);
assertEquals(0, Message.KEY_INFO, proxyInner);
return null;
});
}
use of org.graalvm.polyglot.Value in project graal by oracle.
the class ProxySPITest method testProxyInstantiable.
@Test
public void testProxyInstantiable() throws Throwable {
Context context = Context.create();
ProxyInstantiable proxyOuter = new ProxyInstantiable() {
@Override
public Object newInstance(Value... t) {
return t[0].newInstance();
}
};
eval(context, proxyOuter, (proxyInner) -> {
assertEquals(true, Message.IS_INSTANTIABLE, proxyInner);
assertEquals(false, Message.IS_EXECUTABLE, proxyInner);
assertUnsupported(Message.createExecute(0), proxyInner, 42);
assertUnsupported(Message.AS_POINTER, proxyInner);
assertUnsupported(Message.GET_SIZE, proxyInner);
assertEmpty(Message.KEYS, proxyInner);
assertUnsupported(Message.READ, proxyInner);
assertUnsupported(Message.WRITE, proxyInner);
assertUnsupported(Message.TO_NATIVE, proxyInner);
assertUnsupported(Message.UNBOX, proxyInner);
assertUnsupported(Message.createInvoke(0), proxyInner);
assertEquals(false, Message.IS_BOXED, proxyInner);
assertEquals(false, Message.IS_NULL, proxyInner);
assertEquals(false, Message.HAS_KEYS, proxyInner);
assertEquals(false, Message.HAS_SIZE, proxyInner);
assertEquals(false, Message.IS_POINTER, proxyInner);
assertEquals(0, Message.KEY_INFO, proxyInner);
return null;
});
}
use of org.graalvm.polyglot.Value in project graal by oracle.
the class ContextAPITest method testImportExport.
@Test
public void testImportExport() {
Context context = Context.create();
Value polyglotBindings = context.getPolyglotBindings();
polyglotBindings.putMember("string", "bar");
polyglotBindings.putMember("null", null);
polyglotBindings.putMember("int", 42);
Object object = new Object();
polyglotBindings.putMember("object", object);
assertEquals("bar", polyglotBindings.getMember("string").asString());
assertTrue(polyglotBindings.getMember("null").isNull());
assertEquals(42, polyglotBindings.getMember("int").asInt());
assertSame(object, polyglotBindings.getMember("object").asHostObject());
assertNull(polyglotBindings.getMember("notexisting"));
context.close();
}
Aggregations