3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/debugger-test.js"></script>
8 var workerScript = "postMessage('Done.');";
9 var blob = new Blob([workerScript], { type: "text/javascript" });
10 var worker = new Worker(URL.createObjectURL(blob));
15 function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, callback)
17 InspectorTest.addSniffer(WebInspector.SnippetScriptMapping.prototype, "addScript", dumpScript);
18 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", dumpResult);
19 WebInspector.scriptSnippetModel.evaluateScriptSnippet(context, uiSourceCode);
20 var target = context.target();
21 var mapping = WebInspector.scriptSnippetModel._mappingForTarget.get(target);
22 var evaluationSourceURL = mapping._evaluationSourceURL(uiSourceCode);
23 var snippetId = WebInspector.scriptSnippetModel._snippetIdForUISourceCode.get(uiSourceCode);
24 InspectorTest.addResult("Last evaluation source url for snippet: " + evaluationSourceURL);
25 InspectorTest.assertEquals(snippetId, WebInspector.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL.");
27 function dumpScript(script)
29 InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
32 function dumpResult(target, result, wasThrown)
34 InspectorTest.addResult("Snippet execution result: " + result.description);
39 function resetSnippetsSettings()
41 WebInspector.scriptSnippetModel._snippetStorage._lastSnippetIdentifierSetting.set(0);
42 WebInspector.scriptSnippetModel._snippetStorage._snippetsSetting.set([]);
43 WebInspector.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0);
44 WebInspector.scriptSnippetModel = new WebInspector.ScriptSnippetModel(WebInspector.workspace);
47 var workspace = WebInspector.workspace;
48 InspectorTest.runDebuggerTestSuite([
49 function testCreateEditRenameRemove(next)
53 function filterSnippet(uiSourceCode)
55 return uiSourceCode.project().type() === WebInspector.projectTypes.Snippets;
58 function uiSourceCodeAdded(event)
60 var uiSourceCode = event.data;
61 InspectorTest.addResult("UISourceCodeAdded: " + uiSourceCode.name());
64 function uiSourceCodeRemoved(event)
66 var uiSourceCode = event.data;
67 InspectorTest.addResult("UISourceCodeRemoved: " + uiSourceCode.name());
70 workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
71 workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
73 function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName)
75 InspectorTest.addResult("Renaming snippet to '" + snippetName + "' ...");
76 uiSourceCode.rename(snippetName, renameCallback);
78 function renameCallback(success)
81 InspectorTest.addResult("Snippet renamed successfully.");
83 InspectorTest.addResult("Snippet was not renamed.");
85 InspectorTest.addResult("UISourceCode name is '" + uiSourceCode.name() + "' now.");
86 InspectorTest.addResult("Number of uiSourceCodes in workspace: " + workspace.uiSourceCodes().filter(filterSnippet).length);
87 var storageSnippetsCount = WebInspector.scriptSnippetModel._snippetStorage.snippets().length;
88 InspectorTest.addResult("Number of snippets in the storage: " + storageSnippetsCount);
91 function contentCallback(content)
93 InspectorTest.addResult("Snippet content: " + content);
96 resetSnippetsSettings();
98 WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
102 uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
104 uiSourceCode1.requestContent(contentCallback);
105 uiSourceCode1.addRevision("<snippet content>");
106 InspectorTest.addResult("Snippet content set.");
107 delete uiSourceCode1._content;
108 delete uiSourceCode1._contentLoaded;
109 uiSourceCode1.requestContent(contentCallback);
110 InspectorTest.addResult("Snippet1 created.");
112 WebInspector.scriptSnippetModel.project().createFile("", null, "", step3.bind(this));
117 var uiSourceCode2 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
118 InspectorTest.addResult("Snippet2 created.");
119 renameSnippetAndCheckWorkspace(uiSourceCode1, "foo");
120 renameSnippetAndCheckWorkspace(uiSourceCode1, " ");
121 renameSnippetAndCheckWorkspace(uiSourceCode1, " bar ");
122 renameSnippetAndCheckWorkspace(uiSourceCode1, "foo");
123 renameSnippetAndCheckWorkspace(uiSourceCode2, "bar");
124 renameSnippetAndCheckWorkspace(uiSourceCode2, "foo");
125 delete uiSourceCode1._content;
126 delete uiSourceCode1._contentLoaded;
127 uiSourceCode1.requestContent(contentCallback);
129 WebInspector.scriptSnippetModel.project().deleteFile(uiSourceCode1.path());
130 WebInspector.scriptSnippetModel.project().deleteFile(uiSourceCode2.path());
132 WebInspector.scriptSnippetModel.project().createFile("", null, "", step4.bind(this));
137 var uiSourceCode3 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
138 InspectorTest.addResult("Snippet3 created.");
139 WebInspector.scriptSnippetModel.project().deleteFile(uiSourceCode3.path());
140 InspectorTest.addResult("Snippet3 deleted.");
142 InspectorTest.addResult("Number of uiSourceCodes in workspace: " + workspace.uiSourceCodes().filter(filterSnippet).length);
143 var storageSnippetsCount = WebInspector.scriptSnippetModel._snippetStorage.snippets().length;
144 InspectorTest.addResult("Number of snippets in the storage: " + storageSnippetsCount);
146 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
147 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
153 function testEvaluate(next)
157 var context = WebInspector.context.flavor(WebInspector.ExecutionContext);
159 resetSnippetsSettings();
160 var snippetScriptMapping = WebInspector.scriptSnippetModel.snippetScriptMapping(WebInspector.targetManager.targets()[0]);
162 WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
166 uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
167 uiSourceCode1.rename("Snippet1", function() { });
169 content += "// This snippet does nothing.\n";
170 content += "var i = 2+2;\n";
171 uiSourceCode1.setWorkingCopy(content);
172 WebInspector.scriptSnippetModel.project().createFile("", null, "", step3.bind(this));
177 uiSourceCode2 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
178 uiSourceCode2.rename("Snippet2", function() { });
180 content += "// This snippet creates a function that does nothing and returns it.\n";
181 content += "function doesNothing() {\n";
182 content += " var i = 2+2;\n";
184 content += "doesNothing;\n";
185 uiSourceCode2.setWorkingCopy(content);
186 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step4);
191 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, context, step5);
196 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, next);
200 function testEvaluateEditReload(next)
202 function evaluateSnippetAndReloadPage(uiSourceCode, callback)
204 // JSC does not support compile-and-run for snippet evaluation, so different platforms have slightly different codeflow here, hence two sniffers.
205 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_printResult", snippetFinished);
206 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", snippetFinished);
207 WebInspector.scriptSnippetModel.evaluateScriptSnippet(WebInspector.context.flavor(WebInspector.ExecutionContext), uiSourceCode);
209 function snippetFinished(result, wasThrown)
211 var script = snippetScriptMapping._scriptForUISourceCode.get(uiSourceCode);
212 InspectorTest.addResult("Snippet execution result: " + result.description);
214 InspectorTest.reloadPage(callback)
218 resetSnippetsSettings();
219 var snippetScriptMapping = WebInspector.scriptSnippetModel.snippetScriptMapping(WebInspector.targetManager.targets()[0]);
221 WebInspector.scriptSnippetModel.project().createFile("", null, "", step3.bind(this));
225 var uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
226 uiSourceCode1.rename("Snippet1", function() { });
228 content += "// This snippet does nothing.\n";
229 content += "var i = 2+2;\n";
230 uiSourceCode1.setWorkingCopy(content);
232 evaluateSnippetAndReloadPage(uiSourceCode1, next);
236 function testEvaluateInWorker(next)
240 InspectorTest.addSniffer(WebInspector.RuntimeModel.prototype, "_executionContextCreated", contextCreated);
241 InspectorTest.evaluateInPage("startWorker()");
243 function contextCreated()
245 // Take the only execution context from the worker's RuntimeModel.
246 context = this.executionContexts()[0];
248 resetSnippetsSettings();
249 WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
254 var uiSourceCode = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
255 uiSourceCode.rename("Snippet1", function() { });
256 var content = "2+2;\n";
257 uiSourceCode.setWorkingCopy(content);
258 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, next);
265 <body onload="runTest()">
266 <p>Tests script snippet model.</p>