Search in sources :

Example 1 with Value

use of org.graalvm.polyglot.Value in project graal by oracle.

the class ExportValueTest method testToString.

@Test
public void testToString() {
    bindings.putMember("tmp", 10);
    Value value = bindings.getMember("tmp");
    value.toString();
}
Also used : Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Example 2 with Value

use of org.graalvm.polyglot.Value in project graal by oracle.

the class LanguageSPITest method testBindingsWithMultipleScopes.

@Test
public void testBindingsWithMultipleScopes() {
    // innermost to outermost
    TestScope[] scopes = new TestScope[5];
    for (int i = 0; i < 5; i++) {
        scopes[i] = new TestScope();
    }
    setupTopScopes((Object[]) scopes);
    Context c = Context.create();
    assertEquals(0, findScopeInvokes);
    Value bindings = c.getBindings(ProxyLanguage.ID);
    assertEquals(1, findScopeInvokes);
    assertTrue(bindings.hasMembers());
    assertFalse(bindings.hasMember(""));
    assertNull(bindings.getMember(""));
    ValueAssert.assertFails(() -> bindings.putMember("foo", "bar"), UnsupportedOperationException.class);
    // test insertion into first insertable scope
    scopes[1].insertable = true;
    scopes[2].insertable = true;
    // should end up in scope 1
    bindings.putMember("foo", "bar");
    assertEquals("bar", bindings.getMember("foo").asString());
    assertEquals("bar", scopes[1].values.get("foo"));
    assertNull(scopes[0].values.get("foo"));
    assertNull(scopes[2].values.get("foo"));
    ValueAssert.assertValue(c, bindings, ValueAssert.Trait.MEMBERS);
    // test check for existing keys for remove
    scopes[2].removable = true;
    scopes[2].values.put("foo", "baz");
    scopes[2].values.put("bar", "baz");
    scopes[3].values.put("bar", "42");
    assertEquals("bar", bindings.getMember("foo").asString());
    assertEquals("baz", bindings.getMember("bar").asString());
    ValueAssert.assertFails(() -> bindings.removeMember("foo"), UnsupportedOperationException.class);
    assertTrue(bindings.removeMember("bar"));
    assertNotNull(scopes[2].values.get("foo"));
    assertNull(scopes[2].values.get("bar"));
    assertEquals("42", bindings.getMember("bar").asString());
    ValueAssert.assertValue(c, bindings, ValueAssert.Trait.MEMBERS);
    c.close();
}
Also used : Context(org.graalvm.polyglot.Context) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TruffleContext(com.oracle.truffle.api.TruffleContext) Value(org.graalvm.polyglot.Value) TruffleObject(com.oracle.truffle.api.interop.TruffleObject) Test(org.junit.Test)

Example 3 with Value

use of org.graalvm.polyglot.Value in project graal by oracle.

the class LanguageSPITest method testPolyglotBindingsMultiThreaded.

@Test
public void testPolyglotBindingsMultiThreaded() throws InterruptedException, ExecutionException, TimeoutException {
    ProxyLanguage.setDelegate(new ProxyLanguage() {

        @Override
        protected boolean isThreadAccessAllowed(Thread thread, boolean singleThreaded) {
            return true;
        }

        @Override
        protected CallTarget parse(ParsingRequest request) throws Exception {
            return Truffle.getRuntime().createCallTarget(new RootNode(languageInstance) {

                @Override
                public Object execute(VirtualFrame frame) {
                    return getCurrentContext(ProxyLanguage.class).env.getPolyglotBindings();
                }
            });
        }
    });
    Context c = Context.create();
    ExecutorService service = Executors.newFixedThreadPool(20);
    Value languageBindings = c.eval(ProxyLanguage.ID, "");
    Value polyglotBindings = c.getPolyglotBindings();
    List<Future<?>> futures = new ArrayList<>();
    for (int i = 0; i < 2000; i++) {
        futures.add(service.submit(() -> {
            polyglotBindings.putMember("foo", "bar");
            assertEquals("bar", polyglotBindings.getMember("foo").asString());
            assertEquals("bar", languageBindings.getMember("foo").asString());
            languageBindings.putMember("baz", "42");
            assertEquals("42", polyglotBindings.getMember("baz").asString());
            assertEquals("42", languageBindings.getMember("baz").asString());
        }));
    }
    for (Future<?> future : futures) {
        future.get(100000, TimeUnit.MILLISECONDS);
    }
    service.shutdown();
    service.awaitTermination(100000, TimeUnit.MILLISECONDS);
    c.close();
}
Also used : Context(org.graalvm.polyglot.Context) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TruffleContext(com.oracle.truffle.api.TruffleContext) RootNode(com.oracle.truffle.api.nodes.RootNode) CallTarget(com.oracle.truffle.api.CallTarget) RootCallTarget(com.oracle.truffle.api.RootCallTarget) ArrayList(java.util.ArrayList) TimeoutException(java.util.concurrent.TimeoutException) UnsupportedMessageException(com.oracle.truffle.api.interop.UnsupportedMessageException) TruffleException(com.oracle.truffle.api.TruffleException) PolyglotException(org.graalvm.polyglot.PolyglotException) UnsupportedTypeException(com.oracle.truffle.api.interop.UnsupportedTypeException) UnknownIdentifierException(com.oracle.truffle.api.interop.UnknownIdentifierException) ExecutionException(java.util.concurrent.ExecutionException) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) ExecutorService(java.util.concurrent.ExecutorService) Value(org.graalvm.polyglot.Value) Future(java.util.concurrent.Future) Test(org.junit.Test)

Example 4 with Value

use of org.graalvm.polyglot.Value in project graal by oracle.

the class LanguageSPITest method testBindingsWithDefaultScope.

@Test
public void testBindingsWithDefaultScope() {
    Context c = Context.create();
    Value bindings = c.getBindings(ProxyLanguage.ID);
    assertTrue(bindings.hasMembers());
    assertFalse(bindings.hasMember(""));
    assertTrue(bindings.getMemberKeys().isEmpty());
    assertNull(bindings.getMember(""));
    ValueAssert.assertFails(() -> bindings.putMember("", ""), UnsupportedOperationException.class);
    assertFalse(bindings.removeMember(""));
    ValueAssert.assertValue(c, bindings);
    c.close();
}
Also used : Context(org.graalvm.polyglot.Context) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TruffleContext(com.oracle.truffle.api.TruffleContext) Value(org.graalvm.polyglot.Value) Test(org.junit.Test)

Example 5 with Value

use of org.graalvm.polyglot.Value in project graal by oracle.

the class LanguageSPITest method testErrorInFindMetaObject.

@Test
public void testErrorInFindMetaObject() {
    ProxyLanguage.setDelegate(new ProxyLanguage() {

        @Override
        protected Object findMetaObject(LanguageContext context, Object value) {
            throw new RuntimeException();
        }

        @Override
        protected CallTarget parse(com.oracle.truffle.api.TruffleLanguage.ParsingRequest request) throws Exception {
            return Truffle.getRuntime().createCallTarget(RootNode.createConstantNode(42));
        }
    });
    Context c = Context.create();
    Value v = c.eval(ProxyLanguage.ID, "");
    testFails(() -> v.getMetaObject());
    testFails(() -> v.getMetaObject());
    c.close();
}
Also used : Context(org.graalvm.polyglot.Context) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TruffleContext(com.oracle.truffle.api.TruffleContext) CallTarget(com.oracle.truffle.api.CallTarget) RootCallTarget(com.oracle.truffle.api.RootCallTarget) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TimeoutException(java.util.concurrent.TimeoutException) UnsupportedMessageException(com.oracle.truffle.api.interop.UnsupportedMessageException) TruffleException(com.oracle.truffle.api.TruffleException) PolyglotException(org.graalvm.polyglot.PolyglotException) UnsupportedTypeException(com.oracle.truffle.api.interop.UnsupportedTypeException) UnknownIdentifierException(com.oracle.truffle.api.interop.UnknownIdentifierException) ExecutionException(java.util.concurrent.ExecutionException) Value(org.graalvm.polyglot.Value) TruffleObject(com.oracle.truffle.api.interop.TruffleObject) 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