207 lines
9.7 KiB
HTML
207 lines
9.7 KiB
HTML
<!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>
|