Search in sources :

Example 1 with ContinuationPending

use of org.mozilla.javascript.ContinuationPending in project hackpad by dropbox.

the class ContinuationsApiTest method testScriptWithMultipleContinuations.

public void testScriptWithMultipleContinuations() {
    Context cx = Context.enter();
    try {
        // must use interpreter mode
        cx.setOptimizationLevel(-1);
        Script script = cx.compileString("myObject.f(3) + myObject.g(3) + 2;", "test source", 1, null);
        cx.executeScriptWithContinuations(script, globalScope);
        fail("Should throw ContinuationPending");
    } catch (ContinuationPending pending) {
        try {
            Object applicationState = pending.getApplicationState();
            assertEquals(new Integer(3), applicationState);
            int saved = (Integer) applicationState;
            cx.resumeContinuation(pending.getContinuation(), globalScope, saved + 1);
            fail("Should throw another ContinuationPending");
        } catch (ContinuationPending pending2) {
            Object applicationState2 = pending2.getApplicationState();
            assertEquals(new Integer(6), applicationState2);
            int saved2 = (Integer) applicationState2;
            Object result2 = cx.resumeContinuation(pending2.getContinuation(), globalScope, saved2 + 1);
            assertEquals(13, ((Number) result2).intValue());
        }
    } finally {
        Context.exit();
    }
}
Also used : Context(org.mozilla.javascript.Context) Script(org.mozilla.javascript.Script) ContinuationPending(org.mozilla.javascript.ContinuationPending)

Example 2 with ContinuationPending

use of org.mozilla.javascript.ContinuationPending in project hackpad by dropbox.

the class ContinuationsApiTest method testScriptWithContinuations.

public void testScriptWithContinuations() {
    Context cx = Context.enter();
    try {
        // must use interpreter mode
        cx.setOptimizationLevel(-1);
        Script script = cx.compileString("myObject.f(3) + 1;", "test source", 1, null);
        cx.executeScriptWithContinuations(script, globalScope);
        fail("Should throw ContinuationPending");
    } catch (ContinuationPending pending) {
        Object applicationState = pending.getApplicationState();
        assertEquals(new Integer(3), applicationState);
        int saved = (Integer) applicationState;
        Object result = cx.resumeContinuation(pending.getContinuation(), globalScope, saved + 1);
        assertEquals(5, ((Number) result).intValue());
    } finally {
        Context.exit();
    }
}
Also used : Context(org.mozilla.javascript.Context) Script(org.mozilla.javascript.Script) ContinuationPending(org.mozilla.javascript.ContinuationPending)

Example 3 with ContinuationPending

use of org.mozilla.javascript.ContinuationPending in project BPjs by bThink-BGU.

the class BThreadJsProxy method captureBThreadState.

private void captureBThreadState(BSyncStatement stmt) throws ContinuationPending {
    bthread.setBSyncStatement(stmt);
    stmt.setBthread(bthread);
    ContinuationPending capturedContinuation = Context.getCurrentContext().captureContinuation();
    capturedContinuation.setApplicationState(stmt);
    throw capturedContinuation;
}
Also used : ContinuationPending(org.mozilla.javascript.ContinuationPending)

Example 4 with ContinuationPending

use of org.mozilla.javascript.ContinuationPending in project hackpad by dropbox.

the class ContinuationsApiTest method testSerializationWithContinuations.

public void testSerializationWithContinuations() throws IOException, ClassNotFoundException {
    Context cx = Context.enter();
    try {
        // must use interpreter mode
        cx.setOptimizationLevel(-1);
        cx.evaluateString(globalScope, "function f(a) { var k = myObject.f(a); var t = []; return k; }", "function test source", 1, null);
        Function f = (Function) globalScope.get("f", globalScope);
        Object[] args = { 7 };
        cx.callFunctionWithContinuations(f, globalScope, args);
        fail("Should throw ContinuationPending");
    } catch (ContinuationPending pending) {
        // serialize
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ScriptableOutputStream sos = new ScriptableOutputStream(baos, globalScope);
        sos.writeObject(globalScope);
        sos.writeObject(pending.getContinuation());
        sos.close();
        baos.close();
        byte[] serializedData = baos.toByteArray();
        // deserialize
        ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
        ScriptableInputStream sis = new ScriptableInputStream(bais, globalScope);
        globalScope = (Scriptable) sis.readObject();
        Object continuation = sis.readObject();
        sis.close();
        bais.close();
        Object result = cx.resumeContinuation(continuation, globalScope, 8);
        assertEquals(8, ((Number) result).intValue());
    } finally {
        Context.exit();
    }
}
Also used : Context(org.mozilla.javascript.Context) Function(org.mozilla.javascript.Function) ContinuationPending(org.mozilla.javascript.ContinuationPending) ScriptableInputStream(org.mozilla.javascript.serialize.ScriptableInputStream) ScriptableOutputStream(org.mozilla.javascript.serialize.ScriptableOutputStream) Scriptable(org.mozilla.javascript.Scriptable)

Example 5 with ContinuationPending

use of org.mozilla.javascript.ContinuationPending in project hackpad by dropbox.

the class ContinuationsApiTest method testScriptWithNestedContinuations.

public void testScriptWithNestedContinuations() {
    Context cx = Context.enter();
    try {
        // must use interpreter mode
        cx.setOptimizationLevel(-1);
        Script script = cx.compileString("myObject.g( myObject.f(1) ) + 2;", "test source", 1, null);
        cx.executeScriptWithContinuations(script, globalScope);
        fail("Should throw ContinuationPending");
    } catch (ContinuationPending pending) {
        try {
            Object applicationState = pending.getApplicationState();
            assertEquals(new Integer(1), applicationState);
            int saved = (Integer) applicationState;
            cx.resumeContinuation(pending.getContinuation(), globalScope, saved + 1);
            fail("Should throw another ContinuationPending");
        } catch (ContinuationPending pending2) {
            Object applicationState2 = pending2.getApplicationState();
            assertEquals(new Integer(4), applicationState2);
            int saved2 = (Integer) applicationState2;
            Object result2 = cx.resumeContinuation(pending2.getContinuation(), globalScope, saved2 + 2);
            assertEquals(8, ((Number) result2).intValue());
        }
    } finally {
        Context.exit();
    }
}
Also used : Context(org.mozilla.javascript.Context) Script(org.mozilla.javascript.Script) ContinuationPending(org.mozilla.javascript.ContinuationPending)

Aggregations

ContinuationPending (org.mozilla.javascript.ContinuationPending)8 Context (org.mozilla.javascript.Context)6 Script (org.mozilla.javascript.Script)3 Function (org.mozilla.javascript.Function)2 Scriptable (org.mozilla.javascript.Scriptable)2 BProgramException (il.ac.bgu.cs.bp.bpjs.exceptions.BProgramException)1 BProgramRunnerListener (il.ac.bgu.cs.bp.bpjs.execution.listeners.BProgramRunnerListener)1 BPEngineTask (il.ac.bgu.cs.bp.bpjs.execution.tasks.BPEngineTask)1 ResumeBThread (il.ac.bgu.cs.bp.bpjs.execution.tasks.ResumeBThread)1 StartBThread (il.ac.bgu.cs.bp.bpjs.execution.tasks.StartBThread)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Objects (java.util.Objects)1 Set (java.util.Set)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1 RejectedExecutionException (java.util.concurrent.RejectedExecutionException)1