blob: 5315dff38c40d3d6c1c6c29aedc482efe2fac3f5 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>
<script>
function test()
{
function resetSnippetsSettings()
{
WebInspector.scriptSnippetModel._snippetStorage.reset();
WebInspector.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0);
}
// FIXME: Remove once snippets are taken out of experiments.
WebInspector.experimentsSettings.snippetsSupport = {};
WebInspector.experimentsSettings.snippetsSupport.isEnabled = function() { return true; };
var workspace = new WebInspector.Workspace();
var workspaceController = new WebInspector.WorkspaceController(workspace);
WebInspector.scriptSnippetModel = new WebInspector.ScriptSnippetModel(workspace);
InspectorTest.runDebuggerTestSuite([
function testWorkspaceReset(next)
{
resetSnippetsSettings();
var snippetJavaScriptSource = WebInspector.scriptSnippetModel.createScriptSnippet();
var snippetName = "TestSnippet" + Math.random();
InspectorTest.addResult("Snippet created.");
WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource, snippetName);
workspace.addEventListener(WebInspector.UISourceCodeProvider.Events.UISourceCodeAdded, uiSourceCodeAdded);
InspectorTest.addResult("Resetting snippet script mapping.");
workspaceController._mainFrameNavigated();
function uiSourceCodeAdded(event)
{
InspectorTest.assertEquals(1, workspace.uiSourceCodes().length, "Only one snippet uiSourceCode should be present after project navigation.");
var uiSourceCode = event.data;
if (uiSourceCode.url.indexOf(snippetName) === -1)
return;
InspectorTest.addResult("Snippet uiSourceCode was recreated.");
workspace.removeEventListener(WebInspector.UISourceCodeProvider.Events.UISourceCodeAdded, uiSourceCodeAdded);
next();
}
},
function testEvaluate(next)
{
resetSnippetsSettings();
var snippetJavaScriptSource1 = WebInspector.scriptSnippetModel.createScriptSnippet();
WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource1, "Snippet1");
var content = "";
content += "// This snippet does nothing.\n";
content += "var i = 2+2;\n";
snippetJavaScriptSource1.setWorkingCopy(content);
var snippetJavaScriptSource2 = WebInspector.scriptSnippetModel.createScriptSnippet();
WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource2, "Snippet2");
content = "";
content += "// This snippet creates a function that does nothing and returns it.\n";
content += "function doesNothing() {\n";
content += " var i = 2+2;\n";
content += "};\n";
content += "doesNothing;\n";
snippetJavaScriptSource2.setWorkingCopy(content);
function evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource, callback)
{
InspectorTest.addSniffer(WebInspector.SnippetScriptMapping.prototype, "addScript", dumpScript);
// JSC does not support compile-and-run for snippet evaluation, so different platforms have slightly different codeflow here, hence two sniffers.
InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_printResult", dumpResult);
InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", dumpResult);
WebInspector.scriptSnippetModel.evaluateScriptSnippet(snippetJavaScriptSource);
var evaluationSourceURL = WebInspector.scriptSnippetModel._evaluationSourceURL(snippetJavaScriptSource);
var snippetId = WebInspector.scriptSnippetModel._snippetIdForJavaScriptSource.get(snippetJavaScriptSource);
InspectorTest.addResult("Last evaluation source url for snippet: " + evaluationSourceURL);
InspectorTest.assertEquals(snippetId, WebInspector.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL.");
function dumpScript(script)
{
InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
}
function dumpResult(result, wasThrown)
{
InspectorTest.addResult("Snippet execution result: " + result.description);
callback();
}
}
evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource1, step2);
function step2()
{
evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource2, step3);
}
function step3()
{
evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource1, next);
}
}
]);
};
</script>
</head>
<body onload="runTest()">
<p>Tests script snippet model.</p>
</body>
</html>