Search in sources :

Example 11 with Value

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);
}
Also used : ValueAssert.assertValue(com.oracle.truffle.api.test.polyglot.ValueAssert.assertValue) Value(org.graalvm.polyglot.Value) ProxyObject(org.graalvm.polyglot.proxy.ProxyObject) PolyglotException(org.graalvm.polyglot.PolyglotException) Test(org.junit.Test)

Example 12 with Value

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;
    });
}
Also used : LanguageContext(com.oracle.truffle.api.test.polyglot.ContextAPITestLanguage.LanguageContext) Context(org.graalvm.polyglot.Context) ProxyArray(org.graalvm.polyglot.proxy.ProxyArray) Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Example 13 with Value

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;
    });
}
Also used : LanguageContext(com.oracle.truffle.api.test.polyglot.ContextAPITestLanguage.LanguageContext) Context(org.graalvm.polyglot.Context) ProxyObject(org.graalvm.polyglot.proxy.ProxyObject) Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Example 14 with Value

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;
    });
}
Also used : LanguageContext(com.oracle.truffle.api.test.polyglot.ContextAPITestLanguage.LanguageContext) Context(org.graalvm.polyglot.Context) ProxyInstantiable(org.graalvm.polyglot.proxy.ProxyInstantiable) Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Example 15 with Value

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();
}
Also used : LanguageContext(com.oracle.truffle.api.test.polyglot.ContextAPITestLanguage.LanguageContext) Context(org.graalvm.polyglot.Context) Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Aggregations

Value (org.graalvm.polyglot.Value)277 Test (org.junit.Test)203 ValueAssert.assertValue (com.oracle.truffle.api.test.polyglot.ValueAssert.assertValue)65 Context (org.graalvm.polyglot.Context)58 BoxedTestValue (com.oracle.truffle.llvm.test.interop.values.BoxedTestValue)43 PolyglotException (org.graalvm.polyglot.PolyglotException)42 TruffleObject (com.oracle.truffle.api.interop.TruffleObject)34 ProxyObject (org.graalvm.polyglot.proxy.ProxyObject)34 Source (org.graalvm.polyglot.Source)31 ArrayList (java.util.ArrayList)30 CEntryPoint (org.graalvm.nativeimage.c.function.CEntryPoint)23 ProxyExecutable (org.graalvm.polyglot.proxy.ProxyExecutable)18 HashMap (java.util.HashMap)14 TruffleContext (com.oracle.truffle.api.TruffleContext)11 UnsupportedMessageException (com.oracle.truffle.api.interop.UnsupportedMessageException)11 NullValue (com.oracle.truffle.llvm.test.interop.values.NullValue)11 UnsupportedTypeException (com.oracle.truffle.api.interop.UnsupportedTypeException)10 DebugValue (com.oracle.truffle.api.debug.DebugValue)9 LanguageContext (com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext)9 List (java.util.List)9