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();
}
}
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();
}
}
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;
}
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();
}
}
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();
}
}
Aggregations