| <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> |