use of org.graalvm.polyglot.Context in project graal by oracle.
the class LanguageSPITest method testErrorInParse.
@Test
public void testErrorInParse() {
ProxyLanguage.setDelegate(new ProxyLanguage() {
@Override
protected CallTarget parse(com.oracle.truffle.api.TruffleLanguage.ParsingRequest request) throws Exception {
throw new RuntimeException();
}
});
Context c = Context.create();
c.initialize(ProxyLanguage.ID);
testFails(() -> c.eval(ProxyLanguage.ID, "t0"));
testFails(() -> c.eval(ProxyLanguage.ID, "t1"));
c.close();
}
use of org.graalvm.polyglot.Context 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();
}
use of org.graalvm.polyglot.Context 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();
}
use of org.graalvm.polyglot.Context in project graal by oracle.
the class LanguageSPITest method testPolyglotClose.
@Test
public void testPolyglotClose() {
langContext = null;
Engine engine = Engine.create();
Context context = Context.newBuilder().engine(engine).build();
context.initialize(LanguageSPITestLanguage.ID);
assertNotNull(langContext);
assertEquals(0, langContext.disposeCalled);
context.close();
engine.close();
assertEquals(1, langContext.disposeCalled);
}
use of org.graalvm.polyglot.Context in project graal by oracle.
the class LanguageSPITest method testPolyglotBindingsPreserveLanguage.
@Test
public void testPolyglotBindingsPreserveLanguage() {
ProxyLanguage.setDelegate(new ProxyLanguage() {
@Override
protected CallTarget parse(ParsingRequest request) throws Exception {
return Truffle.getRuntime().createCallTarget(new RootNode(languageInstance) {
@Override
public Object execute(VirtualFrame frame) {
Object bindings = getCurrentContext(ProxyLanguage.class).env.getPolyglotBindings();
try {
ForeignAccess.sendWrite(Message.WRITE.createNode(), (TruffleObject) bindings, "exportedValue", "convertOnToString");
} catch (UnknownIdentifierException | UnsupportedTypeException | UnsupportedMessageException e) {
throw new AssertionError(e);
}
return bindings;
}
});
}
@Override
protected String toString(LanguageContext context, Object value) {
if (value.equals("convertOnToString")) {
return "myStringToString";
}
return super.toString(context, value);
}
});
Context c = Context.create();
c.eval(ProxyLanguage.ID, "");
assertEquals("Make sure language specific toString was invoked.", "myStringToString", c.getPolyglotBindings().getMember("exportedValue").toString());
}
Aggregations