diff truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java @ 22121:d045a505c2b3

Asynchronous TruffleVM can be created by providing own Executor when configuring the TruffleVM.Builder
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 02 Sep 2015 10:44:54 +0200
parents cf19259edf87
children dc83cc1f94f2 ffadd23c63c8 3aad794eec0e
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Mon Aug 31 18:15:27 2015 -0700
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Wed Sep 02 10:44:54 2015 +0200
@@ -22,13 +22,6 @@
  */
 package com.oracle.truffle.api.test.vm;
 
-import static org.junit.Assert.*;
-
-import java.io.*;
-import java.util.*;
-
-import org.junit.*;
-
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.TruffleLanguage.Env;
 import com.oracle.truffle.api.debug.*;
@@ -37,25 +30,37 @@
 import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.source.*;
 import com.oracle.truffle.api.vm.*;
+import java.io.*;
+import java.util.*;
+import java.util.concurrent.Executors;
+import org.junit.*;
+import static org.junit.Assert.*;
 
 public class ImplicitExplicitExportTest {
+    private static Thread mainThread;
     private TruffleVM vm;
 
     @Before
     public void initializeVM() {
-        vm = TruffleVM.newVM().build();
+        mainThread = Thread.currentThread();
+        vm = TruffleVM.newVM().executor(Executors.newSingleThreadExecutor()).build();
         assertTrue("Found " + L1 + " language", vm.getLanguages().containsKey(L1));
         assertTrue("Found " + L2 + " language", vm.getLanguages().containsKey(L2));
         assertTrue("Found " + L3 + " language", vm.getLanguages().containsKey(L3));
     }
 
+    @After
+    public void cleanThread() {
+        mainThread = null;
+    }
+
     @Test
     public void explicitExportFound() throws IOException {
         // @formatter:off
         vm.eval(Source.fromText("explicit.ahoj=42", "Fourty two").withMimeType(L1));
         Object ret = vm.eval(
             Source.fromText("return=ahoj", "Return").withMimeType(L3)
-        );
+        ).get();
         // @formatter:on
         assertEquals("42", ret);
     }
@@ -68,7 +73,7 @@
         );
         Object ret = vm.eval(
             Source.fromText("return=ahoj", "Return").withMimeType(L3)
-        );
+        ).get();
         // @formatter:on
         assertEquals("42", ret);
     }
@@ -84,10 +89,10 @@
         );
         Object ret = vm.eval(
             Source.fromText("return=ahoj", "Return").withMimeType(L3)
-        );
+        ).get();
         // @formatter:on
         assertEquals("Explicit import from L2 is used", "43", ret);
-        assertEquals("Global symbol is also 43", "43", vm.findGlobalSymbol("ahoj").invoke(null));
+        assertEquals("Global symbol is also 43", "43", vm.findGlobalSymbol("ahoj").get());
     }
 
     @Test
@@ -101,10 +106,10 @@
         );
         Object ret = vm.eval(
             Source.fromText("return=ahoj", "Return").withMimeType(L3)
-        );
+        ).get();
         // @formatter:on
         assertEquals("Explicit import from L2 is used", "43", ret);
-        assertEquals("Global symbol is also 43", "43", vm.findGlobalSymbol("ahoj").invoke(null));
+        assertEquals("Global symbol is also 43", "43", vm.findGlobalSymbol("ahoj").invoke(null).get());
     }
 
     private static final class Ctx {
@@ -121,6 +126,9 @@
 
         @Override
         protected Ctx createContext(Env env) {
+            if (mainThread != null) {
+                assertNotEquals("Should run asynchronously", Thread.currentThread(), mainThread);
+            }
             return new Ctx(env);
         }
 
@@ -164,6 +172,7 @@
         }
 
         private Object importExport(Source code) {
+            assertNotEquals("Should run asynchronously", Thread.currentThread(), mainThread);
             final Node node = createFindContextNode();
             Ctx ctx = findContext(node);
             Properties p = new Properties();