Update To 11.40.268.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 startWorker()
7 {
8     var workerScript = "postMessage('Done.');";
9     var blob = new Blob([workerScript], { type: "text/javascript" });
10     var worker = new Worker(URL.createObjectURL(blob));
11 }
12
13 function test()
14 {
15     function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, callback)
16     {
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.");
26
27         function dumpScript(script)
28         {
29             InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
30         }
31
32         function dumpResult(target, result, wasThrown)
33         {
34             InspectorTest.addResult("Snippet execution result: " + result.description);
35             callback();
36         }
37     }
38
39     function resetSnippetsSettings()
40     {
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);
45     }
46
47     var workspace = WebInspector.workspace;
48     InspectorTest.runDebuggerTestSuite([
49         function testCreateEditRenameRemove(next)
50         {
51             var uiSourceCode1;
52
53             function filterSnippet(uiSourceCode)
54             {
55                 return uiSourceCode.project().type() === WebInspector.projectTypes.Snippets;
56             }
57
58             function uiSourceCodeAdded(event)
59             {
60                 var uiSourceCode = event.data;
61                 InspectorTest.addResult("UISourceCodeAdded: " + uiSourceCode.name());
62             }
63
64             function uiSourceCodeRemoved(event)
65             {
66                 var uiSourceCode = event.data;
67                 InspectorTest.addResult("UISourceCodeRemoved: " + uiSourceCode.name());
68             }
69
70             workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
71             workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
72
73             function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName)
74             {
75                 InspectorTest.addResult("Renaming snippet to '" + snippetName + "' ...");
76                 uiSourceCode.rename(snippetName, renameCallback);
77
78                 function renameCallback(success)
79                 {
80                     if (success)
81                         InspectorTest.addResult("Snippet renamed successfully.");
82                     else
83                         InspectorTest.addResult("Snippet was not renamed.");
84                 }
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);
89             }
90
91             function contentCallback(content)
92             {
93                 InspectorTest.addResult("Snippet content: " + content);
94             }
95
96             resetSnippetsSettings();
97             
98             WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
99             
100             function step2(path)
101             {
102                 uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
103                 
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.");
111
112                 WebInspector.scriptSnippetModel.project().createFile("", null, "", step3.bind(this));
113             }
114
115             function step3(path)
116             {
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);
128     
129                 WebInspector.scriptSnippetModel.project().deleteFile(uiSourceCode1.path());
130                 WebInspector.scriptSnippetModel.project().deleteFile(uiSourceCode2.path());
131
132                 WebInspector.scriptSnippetModel.project().createFile("", null, "", step4.bind(this));
133             }
134
135             function step4(path)
136             {
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.");
141     
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);
145     
146                 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded);
147                 workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved);
148     
149                 next();
150             }
151         },
152
153         function testEvaluate(next)
154         {
155             var uiSourceCode1;
156             var uiSourceCode2;
157             var context = WebInspector.context.flavor(WebInspector.ExecutionContext);
158
159             resetSnippetsSettings();
160             var snippetScriptMapping = WebInspector.scriptSnippetModel.snippetScriptMapping(WebInspector.targetManager.targets()[0]);
161
162             WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
163             
164             function step2(path)
165             {
166                 uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
167                 uiSourceCode1.rename("Snippet1", function() { });
168                 var content = "";
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));
173             }
174             
175             function step3(path)
176             {
177                 uiSourceCode2 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
178                 uiSourceCode2.rename("Snippet2", function() { });
179                 content = "";
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";
183                 content += "};\n";
184                 content += "doesNothing;\n";
185                 uiSourceCode2.setWorkingCopy(content);
186                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step4);
187             }
188
189             function step4()
190             {
191                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, context, step5);
192             }
193
194             function step5()
195             {
196                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, next);
197             }
198         },
199
200         function testEvaluateEditReload(next)
201         {
202             function evaluateSnippetAndReloadPage(uiSourceCode, callback)
203             {
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);
208
209                 function snippetFinished(result, wasThrown)
210                 {
211                     var script = snippetScriptMapping._scriptForUISourceCode.get(uiSourceCode);
212                     InspectorTest.addResult("Snippet execution result: " + result.description);
213
214                     InspectorTest.reloadPage(callback)
215                 }
216             }
217
218             resetSnippetsSettings();
219             var snippetScriptMapping = WebInspector.scriptSnippetModel.snippetScriptMapping(WebInspector.targetManager.targets()[0]);
220
221             WebInspector.scriptSnippetModel.project().createFile("", null, "", step3.bind(this));
222             
223             function step3(path)
224             {
225                 var uiSourceCode1 = WebInspector.scriptSnippetModel.project().uiSourceCode(path);
226                 uiSourceCode1.rename("Snippet1", function() { });
227                 var content = "";
228                 content += "// This snippet does nothing.\n";
229                 content += "var i = 2+2;\n";
230                 uiSourceCode1.setWorkingCopy(content);
231
232                 evaluateSnippetAndReloadPage(uiSourceCode1, next);
233             }
234         },
235
236         function testEvaluateInWorker(next)
237         {
238             var context;
239
240             InspectorTest.addSniffer(WebInspector.RuntimeModel.prototype, "_executionContextCreated", contextCreated);
241             InspectorTest.evaluateInPage("startWorker()");
242
243             function contextCreated()
244             {
245                 // Take the only execution context from the worker's RuntimeModel.
246                 context = this.executionContexts()[0];
247
248                 resetSnippetsSettings();
249                 WebInspector.scriptSnippetModel.project().createFile("", null, "", step2.bind(this));
250             }
251
252             function step2(path)
253             {
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);
259             }
260         },
261     ]);
262 };
263 </script>
264 </head>
265 <body onload="runTest()">
266 <p>Tests script snippet model.</p>
267 </body>
268 </html>