Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / inspector / sources / debugger / script-snippet-model.html
1 <html>
2 <head>
3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/debugger-test.js"></script>
5 <script>
6 function test()
7 {
8     function resetSnippetsSettings()
9     {
10         WebInspector.scriptSnippetModel._snippetStorage.reset();
11         WebInspector.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0);
12         WebInspector.scriptSnippetModel.reset();
13     }
14
15     var workspace = WebInspector.workspace;
16     var snippetsProject = WebInspector.scriptSnippetModel.project();
17     InspectorTest.runDebuggerTestSuite([
18         function testCreateEditRenameRemove(next)
19         {
20             var uiSourceCode1;
21
22             function filterSnippet(uiSourceCode)
23             {
24                 return uiSourceCode.project().type() === WebInspector.projectTypes.Snippets;
25             }
26
27             function uiSourceCodeAdded(event)
28             {
29                 var uiSourceCode = event.data;
30                 InspectorTest.addResult("UISourceCodeAdded: " + uiSourceCode.name());
31             }
32
33             function uiSourceCodeRemoved(event)
34             {
35                 var uiSourceCode = event.data;
36                 InspectorTest.addResult("UISourceCodeRemoved: " + uiSourceCode.name());
37             }
38
39             workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
40             workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
41
42             function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName)
43             {
44                 InspectorTest.addResult("Renaming snippet to '" + snippetName + "' ...");
45                 uiSourceCode.rename(snippetName, renameCallback);
46
47                 function renameCallback(success)
48                 {
49                     if (success)
50                         InspectorTest.addResult("Snippet renamed successfully.");
51                     else
52                         InspectorTest.addResult("Snippet was not renamed.");
53                 }
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);
58             }
59
60             function contentCallback(content)
61             {
62                 InspectorTest.addResult("Snippet content: " + content);
63             }
64
65             resetSnippetsSettings();
66             
67             snippetsProject.createFile("", null, "", step2.bind(this));
68             
69             function step2(path)
70             {
71                 uiSourceCode1 = snippetsProject.uiSourceCode(path);
72                 
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.");
80
81                 snippetsProject.createFile("", null, "", step3.bind(this));
82             }
83
84             function step3(path)
85             {
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);
97     
98                 snippetsProject.deleteFile(uiSourceCode1.path());
99                 snippetsProject.deleteFile(uiSourceCode2.path());
100
101                 snippetsProject.createFile("", null, "", step4.bind(this));
102             }
103
104             function step4(path)
105             {
106                 var uiSourceCode3 = snippetsProject.uiSourceCode(path);
107                 InspectorTest.addResult("Snippet3 created.");
108                 snippetsProject.deleteFile(uiSourceCode3.path());
109                 InspectorTest.addResult("Snippet3 deleted.");
110     
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);
114     
115                 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
116                 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
117     
118                 next();
119             }
120         },
121
122         function testEvaluate(next)
123         {
124             var uiSourceCode1;
125             var uiSourceCode2;
126
127             function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, callback)
128             {
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.");
138
139                 function dumpScript(script)
140                 {
141                     InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
142                 }
143
144                 function dumpResult(result, wasThrown)
145                 {
146                     InspectorTest.addResult("Snippet execution result: " + result.description);
147                     callback();
148                 }
149             }
150
151             resetSnippetsSettings();
152
153             snippetsProject.createFile("", null, "", step2.bind(this));
154             
155             function step2(path)
156             {
157                 uiSourceCode1 = snippetsProject.uiSourceCode(path);
158                 uiSourceCode1.rename("Snippet1", function() { });
159                 var content = "";
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));
164             }
165             
166             function step3(path)
167             {
168                 uiSourceCode2 = snippetsProject.uiSourceCode(path);
169                 uiSourceCode2.rename("Snippet2", function() { });
170                 content = "";
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";
174                 content += "};\n";
175                 content += "doesNothing;\n";
176                 uiSourceCode2.setWorkingCopy(content);
177                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, step4);
178             }
179
180             function step4()
181             {
182                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, step5);
183             }
184
185             function step5()
186             {
187                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, next);
188             }
189         },
190
191         function testEvaluateEditReload(next)
192         {
193             function evaluateSnippetAndReloadPage(uiSourceCode, callback)
194             {
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);
199
200                 function snippetFinished(result, wasThrown)
201                 {
202                     var script = WebInspector.scriptSnippetModel._scriptForUISourceCode.get(uiSourceCode);
203                     InspectorTest.addResult("Snippet execution result: " + result.description);
204
205                     InspectorTest.reloadPage(callback)
206                 }
207             }
208
209             resetSnippetsSettings();
210
211             snippetsProject.createFile("", null, "", step3.bind(this));
212             
213             function step3(path)
214             {
215                 var uiSourceCode1 = snippetsProject.uiSourceCode(path);
216                 uiSourceCode1.rename("Snippet1", function() { });
217                 var content = "";
218                 content += "// This snippet does nothing.\n";
219                 content += "var i = 2+2;\n";
220                 uiSourceCode1.setWorkingCopy(content);
221
222                 evaluateSnippetAndReloadPage(uiSourceCode1, next);
223             }
224         }
225     ]);
226 };
227 </script>
228 </head>
229 <body onload="runTest()">
230 <p>Tests script snippet model.</p>
231 </body>
232 </html>