3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/debugger-test.js"></script>
8 function resetSnippetsSettings()
10 WebInspector.scriptSnippetModel._snippetStorage.reset();
11 WebInspector.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0);
12 WebInspector.scriptSnippetModel.reset();
15 var workspace = WebInspector.workspace;
16 var snippetsProject = WebInspector.scriptSnippetModel.project();
17 InspectorTest.runDebuggerTestSuite([
18 function testCreateEditRenameRemove(next)
22 function filterSnippet(uiSourceCode)
24 return uiSourceCode.project().type() === WebInspector.projectTypes.Snippets;
27 function uiSourceCodeAdded(event)
29 var uiSourceCode = event.data;
30 InspectorTest.addResult("UISourceCodeAdded: " + uiSourceCode.name());
33 function uiSourceCodeRemoved(event)
35 var uiSourceCode = event.data;
36 InspectorTest.addResult("UISourceCodeRemoved: " + uiSourceCode.name());
39 workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
40 workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
42 function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName)
44 InspectorTest.addResult("Renaming snippet to '" + snippetName + "' ...");
45 uiSourceCode.rename(snippetName, renameCallback);
47 function renameCallback(success)
50 InspectorTest.addResult("Snippet renamed successfully.");
52 InspectorTest.addResult("Snippet was not renamed.");
54 InspectorTest.addResult("UISourceCode name is '" + uiSourceCode.name() + "' now.");
55 InspectorTest.addResult("Number of uiSourceCodes in workspace: " + workspace.uiSourceCodes().filter(filterSnippet).length);
56 var storageSnippetsCount = WebInspector.scriptSnippetModel._snippetStorage.snippets().length;
57 InspectorTest.addResult("Number of snippets in the storage: " + storageSnippetsCount);
60 function contentCallback(content)
62 InspectorTest.addResult("Snippet content: " + content);
65 resetSnippetsSettings();
67 snippetsProject.createFile("", null, "", step2.bind(this));
71 uiSourceCode1 = snippetsProject.uiSourceCode(path);
73 uiSourceCode1.requestContent(contentCallback);
74 uiSourceCode1.addRevision("<snippet content>");
75 InspectorTest.addResult("Snippet content set.");
76 delete uiSourceCode1._content;
77 delete uiSourceCode1._contentLoaded;
78 uiSourceCode1.requestContent(contentCallback);
79 InspectorTest.addResult("Snippet1 created.");
81 snippetsProject.createFile("", null, "", step3.bind(this));
86 var uiSourceCode2 = snippetsProject.uiSourceCode(path);
87 InspectorTest.addResult("Snippet2 created.");
88 renameSnippetAndCheckWorkspace(uiSourceCode1, "foo");
89 renameSnippetAndCheckWorkspace(uiSourceCode1, " ");
90 renameSnippetAndCheckWorkspace(uiSourceCode1, " bar ");
91 renameSnippetAndCheckWorkspace(uiSourceCode1, "foo");
92 renameSnippetAndCheckWorkspace(uiSourceCode2, "bar");
93 renameSnippetAndCheckWorkspace(uiSourceCode2, "foo");
94 delete uiSourceCode1._content;
95 delete uiSourceCode1._contentLoaded;
96 uiSourceCode1.requestContent(contentCallback);
98 snippetsProject.deleteFile(uiSourceCode1.path());
99 snippetsProject.deleteFile(uiSourceCode2.path());
101 snippetsProject.createFile("", null, "", step4.bind(this));
106 var uiSourceCode3 = snippetsProject.uiSourceCode(path);
107 InspectorTest.addResult("Snippet3 created.");
108 snippetsProject.deleteFile(uiSourceCode3.path());
109 InspectorTest.addResult("Snippet3 deleted.");
111 InspectorTest.addResult("Number of uiSourceCodes in workspace: " + workspace.uiSourceCodes().filter(filterSnippet).length);
112 var storageSnippetsCount = WebInspector.scriptSnippetModel._snippetStorage.snippets().length;
113 InspectorTest.addResult("Number of snippets in the storage: " + storageSnippetsCount);
115 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
116 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
122 function testEvaluate(next)
127 function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, callback)
129 InspectorTest.addSniffer(WebInspector.SnippetScriptMapping.prototype, "addScript", dumpScript);
130 // JSC does not support compile-and-run for snippet evaluation, so different platforms have slightly different codeflow here, hence two sniffers.
131 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_printResult", dumpResult);
132 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", dumpResult);
133 WebInspector.scriptSnippetModel.evaluateScriptSnippet(uiSourceCode);
134 var evaluationSourceURL = WebInspector.scriptSnippetModel._evaluationSourceURL(uiSourceCode);
135 var snippetId = WebInspector.scriptSnippetModel._snippetIdForUISourceCode.get(uiSourceCode);
136 InspectorTest.addResult("Last evaluation source url for snippet: " + evaluationSourceURL);
137 InspectorTest.assertEquals(snippetId, WebInspector.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL.");
139 function dumpScript(script)
141 InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
144 function dumpResult(result, wasThrown)
146 InspectorTest.addResult("Snippet execution result: " + result.description);
151 resetSnippetsSettings();
153 snippetsProject.createFile("", null, "", step2.bind(this));
157 uiSourceCode1 = snippetsProject.uiSourceCode(path);
158 uiSourceCode1.rename("Snippet1", function() { });
160 content += "// This snippet does nothing.\n";
161 content += "var i = 2+2;\n";
162 uiSourceCode1.setWorkingCopy(content);
163 snippetsProject.createFile("", null, "", step3.bind(this));
168 uiSourceCode2 = snippetsProject.uiSourceCode(path);
169 uiSourceCode2.rename("Snippet2", function() { });
171 content += "// This snippet creates a function that does nothing and returns it.\n";
172 content += "function doesNothing() {\n";
173 content += " var i = 2+2;\n";
175 content += "doesNothing;\n";
176 uiSourceCode2.setWorkingCopy(content);
177 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, step4);
182 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, step5);
187 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, next);
191 function testEvaluateEditReload(next)
193 function evaluateSnippetAndReloadPage(uiSourceCode, callback)
195 // JSC does not support compile-and-run for snippet evaluation, so different platforms have slightly different codeflow here, hence two sniffers.
196 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_printResult", snippetFinished);
197 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", snippetFinished);
198 WebInspector.scriptSnippetModel.evaluateScriptSnippet(uiSourceCode);
200 function snippetFinished(result, wasThrown)
202 var script = WebInspector.scriptSnippetModel._scriptForUISourceCode.get(uiSourceCode);
203 InspectorTest.addResult("Snippet execution result: " + result.description);
205 InspectorTest.reloadPage(callback)
209 resetSnippetsSettings();
211 snippetsProject.createFile("", null, "", step3.bind(this));
215 var uiSourceCode1 = snippetsProject.uiSourceCode(path);
216 uiSourceCode1.rename("Snippet1", function() { });
218 content += "// This snippet does nothing.\n";
219 content += "var i = 2+2;\n";
220 uiSourceCode1.setWorkingCopy(content);
222 evaluateSnippetAndReloadPage(uiSourceCode1, next);
229 <body onload="runTest()">
230 <p>Tests script snippet model.</p>