null, callbackSemaphore);
callbackSemaphore.acquireDefault(relayOk);
// First time just suspend on breakpoint and go on.
{
DebugContext context = stateManager.expectEvent(EXPECT_SUSPENDED_VISITOR);
context.continueVm(DebugContext.StepAction.CONTINUE, 0, null);
stateManager.expectEvent(EXPECT_RESUMED_VISITOR);
}
// Second time check variables and expressions.
{
DebugContext context = stateManager.expectEvent(EXPECT_SUSPENDED_VISITOR);
{
// Check cache dropping.
JsObject root = evaluateSync(context.getGlobalEvaluateContext(),
"(debug_value_1 = {a:2})").asObject();
if (root == null) {
throw new RuntimeException();
}
String aValue;
aValue = root.getProperty("a").getValue().getValueString();
if (!"2".equals(aValue)) {
throw new SmokeException();
}
evaluateSync(context.getGlobalEvaluateContext(), "debug_value_1.a = 3");
root.getRemoteValueMapping().clearCaches();
aValue = root.getProperty("a").getValue().getValueString();
if (!"3".equals(aValue)) {
throw new SmokeException();
}
}
{
// Check literals.
for (LiteralTestCase literal : TEST_LITERALS) {
JsValue resultValue = evaluateSync(context.getGlobalEvaluateContext(),
literal.javaScriptExpression);
if (resultValue.getType() != literal.expectedType) {
throw new SmokeException("Unexpected type of '" + literal.javaScriptExpression +
"': " + resultValue.getType());
}
if (!literal.expectedDescription.equals(resultValue.getValueString())) {
throw new SmokeException("Unexpected string value of '" +
literal.javaScriptExpression + "': " + resultValue.getValueString());
}
}
}
// Do not block dispatcher thread.
stateManager.setDefaultReceiver(IGNORE_SCRIPTS_VISITOR);
List<? extends CallFrame> callFrames = context.getCallFrames();
CallFrame topFrame = callFrames.get(0);
JsScope localScope;
findScope: {
for (JsScope scope : topFrame.getVariableScopes()) {
if (scope.getType() == JsScope.Type.LOCAL) {
localScope = scope;
break findScope;
}
}
throw new SmokeException("Failed to find local scope");
}
JsVariable xVar = getVariable(localScope, "x");
if (!"1".equals(xVar.getValue().getValueString())) {
throw new SmokeException("Unexpected value of local variable");
}
JsVariable yVar = getVariable(localScope, "y");
if (!"2".equals(yVar.getValue().getValueString())) {
throw new SmokeException("Unexpected value of local variable");
}
for (CallFrame frame : callFrames) {
checkExpression(frame);
}
context.continueVm(DebugContext.StepAction.CONTINUE, 0, null);
stateManager.expectEvent(EXPECT_RESUMED_VISITOR);
}
stateManager.setDefaultReceiver(IGNORE_ALL_VISITOR);
vm.detach();