blob: b278654dc1920ae9ab442fe840a3bdb3e6ea6f34 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
function createCallArgumentWithValue(value) {
return {value};
}
function createCallArgumentWithRemoteObject(remoteObject) {
return {objectId: remoteObject.objectId};
}
function remoteObjectForSimpleObject(simpleObject, callback) {
InspectorTest.evaluateInPage("(" + JSON.stringify(simpleObject) + ")", callback);
}
let contextId = WI.networkManager.mainFrame.pageExecutionContext.id;
let remoteObject1;
let suite = InspectorTest.createAsyncSuite("Runtime.saveResult");
suite.addTestCase({
name: "SavePrimitiveValue1",
description: "Saving a new value should produce a new $n value.",
test(resolve, reject) {
let value = 123;
RuntimeAgent.saveResult(createCallArgumentWithValue(value), contextId, (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 1, `Value ${value} should become $1.`);
resolve();
});
}
});
suite.addTestCase({
name: "SavePrimitiveValue2",
description: "Saving a new value should produce a new $n value.",
test(resolve, reject) {
let value = true;
RuntimeAgent.saveResult(createCallArgumentWithValue(value), contextId, (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 2, `Value ${value} should become $2.`);
resolve();
});
}
});
suite.addTestCase({
name: "RepeatPrimitiveValue1",
description: "Saving a previously saved value should produce the original $n value.",
test(resolve, reject) {
let value = 123;
RuntimeAgent.saveResult(createCallArgumentWithValue(value), contextId, (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 1, `Value ${value} should have existed as $1.`);
resolve();
});
}
});
suite.addTestCase({
name: "$1MatchesValue1",
description: "Evaluating $1 should get us the value we saved previously.",
test(resolve, reject) {
RuntimeAgent.evaluate.invoke({expression: "$1", objectGroup: "test", includeCommandLineAPI: true}, (error, remoteObjectPayload, wasThrown, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
let remoteObject = WI.RemoteObject.fromPayload(remoteObjectPayload);
InspectorTest.assert(remoteObject.hasValue(), "RemoteObject for $1 should be a value, not an object.");
InspectorTest.expectThat(remoteObject.value === 123, "$1 value should be 123.");
resolve();
});
}
});
suite.addTestCase({
name: "SaveObject1",
description: "Saving a new object should produce a new $n value.",
test(resolve, reject) {
let object = {x:100, y:200};
remoteObjectForSimpleObject(object, (error, remoteObject) => {
remoteObject1 = remoteObject;
RuntimeAgent.saveResult(createCallArgumentWithRemoteObject(remoteObject), (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 3, `New Object ${JSON.stringify(object)} should become $3.`);
resolve();
});
});
}
});
suite.addTestCase({
name: "SaveObject2",
description: "Saving a new object should produce a new $n value.",
test(resolve, reject) {
let object = {x:100, y:200};
remoteObjectForSimpleObject(object, (error, remoteObject) => {
RuntimeAgent.saveResult(createCallArgumentWithRemoteObject(remoteObject), (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 4, `New Object ${JSON.stringify(object)} should become $4.`);
resolve();
});
});
}
});
suite.addTestCase({
name: "RepeatSaveObject1",
description: "Saving a previously saved value should produce the original $n value.",
test(resolve, reject) {
RuntimeAgent.saveResult(createCallArgumentWithRemoteObject(remoteObject1), (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 3, `Repeat Object should have existed as $3.`);
resolve();
});
}
});
// ------
suite.addTestCase({
name: "NoContextWithPrimitiveShouldUseMainContext",
description: "Saving a primitive should specify the context.",
test(resolve, reject) {
let value = 999;
RuntimeAgent.saveResult(createCallArgumentWithValue(value), (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 5, `Value ${value} should become $5.`);
});
RuntimeAgent.saveResult(createCallArgumentWithValue(value), contextId, (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 5, `Value ${value} should have existed as $5.`);
resolve();
});
}
});
// ------
suite.addTestCase({
name: "ClearConsoleShouldResetValues",
description: "Clearing the console should reset the $n values.",
test(resolve, reject) {
let value = 999;
ConsoleAgent.clearMessages();
RuntimeAgent.saveResult(createCallArgumentWithValue(value), (error, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 1, `Value ${value} should become $1.`);
resolve();
});
}
});
// ------
suite.addTestCase({
name: "EvaluateWithSaveIndex",
description: "Evalute with the saveIndex option should affect $n.",
test(resolve, reject) {
RuntimeAgent.evaluate.invoke({expression: "900 + 90", objectGroup: "test", includeCommandLineAPI: true, saveResult: true}, (error, remoteObjectPayload, wasThrown, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 2, "Evaluated result 990 should become $2.");
});
RuntimeAgent.evaluate.invoke({expression: "$2 + 9", objectGroup: "test", includeCommandLineAPI: true, saveResult: true}, (error, remoteObjectPayload, wasThrown, savedResultIndex) => {
InspectorTest.assert(!error, "Should not be a protocol error.");
InspectorTest.expectThat(savedResultIndex === 1, "Evaluated result 999 should match previous value $1.");
resolve();
});
}
});
// ------
suite.addTestCase({
name: "SaveFunctionValue",
description: "Ensure that saving a function object doesn't evaluate the function object when fetching it via a $n getter.",
async test() {
const functionName = "testSaveFunctionValue";
const functionReturn = "testSaveFunctionValue Return Value";
let createFunctionEvaluateResult = await RuntimeAgent.evaluate.invoke({expression: `function ${functionName}() { return "${functionReturn}"; } ${functionName}`, objectGroup: "test", includeCommandLineAPI: true, saveResult: true});
InspectorTest.assert(!createFunctionEvaluateResult.error, "Should not be a protocol error.");
InspectorTest.expectEqual(createFunctionEvaluateResult.savedResultIndex, 3, "Function should become $3.");
let getSavedValueEvaluateResult = await RuntimeAgent.evaluate.invoke({expression: `$3`, objectGroup: "test", includeCommandLineAPI: true, saveResult: true});
InspectorTest.assert(!getSavedValueEvaluateResult.error, "Should not be a protocol error.");
InspectorTest.expectEqual(getSavedValueEvaluateResult.savedResultIndex, 3, "Saved value should match previous value $3.");
InspectorTest.expectEqual(createFunctionEvaluateResult.result.description, getSavedValueEvaluateResult.result.description, "Evaluated function should match previous value $3.");
let callFunctionEvaluateResult = await RuntimeAgent.evaluate.invoke({expression: functionName + "()", objectGroup: "test", includeCommandLineAPI: true, saveResult: true});
InspectorTest.assert(!callFunctionEvaluateResult.error, "Should not be a protocol error.");
InspectorTest.expectEqual(callFunctionEvaluateResult.savedResultIndex, 4, "Calling saved function should become $4.");
InspectorTest.expectEqual(callFunctionEvaluateResult.result.value, functionReturn, "Calling saved function should return expected value.");
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for the Runtime.saveResult command ($n values).</p>
</body>
</html>