Upstream version 7.36.149.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                 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", dumpResult);
131                 WebInspector.scriptSnippetModel.evaluateScriptSnippet(WebInspector.context.flavor(WebInspector.ExecutionContext), uiSourceCode);
132                 var evaluationSourceURL = WebInspector.scriptSnippetModel._evaluationSourceURL(uiSourceCode);
133                 var snippetId = WebInspector.scriptSnippetModel._snippetIdForUISourceCode.get(uiSourceCode);
134                 InspectorTest.addResult("Last evaluation source url for snippet: " + evaluationSourceURL);
135                 InspectorTest.assertEquals(snippetId, WebInspector.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL.");
136
137                 function dumpScript(script)
138                 {
139                     InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL);
140                 }
141
142                 function dumpResult(target, result, wasThrown)
143                 {
144                     InspectorTest.addResult("Snippet execution result: " + result.description);
145                     callback();
146                 }
147             }
148
149             resetSnippetsSettings();
150
151             snippetsProject.createFile("", null, "", step2.bind(this));
152             
153             function step2(path)
154             {
155                 uiSourceCode1 = snippetsProject.uiSourceCode(path);
156                 uiSourceCode1.rename("Snippet1", function() { });
157                 var content = "";
158                 content += "// This snippet does nothing.\n";
159                 content += "var i = 2+2;\n";
160                 uiSourceCode1.setWorkingCopy(content);
161                 snippetsProject.createFile("", null, "", step3.bind(this));
162             }
163             
164             function step3(path)
165             {
166                 uiSourceCode2 = snippetsProject.uiSourceCode(path);
167                 uiSourceCode2.rename("Snippet2", function() { });
168                 content = "";
169                 content += "// This snippet creates a function that does nothing and returns it.\n";
170                 content += "function doesNothing() {\n";
171                 content += "    var  i = 2+2;\n";
172                 content += "};\n";
173                 content += "doesNothing;\n";
174                 uiSourceCode2.setWorkingCopy(content);
175                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, step4);
176             }
177
178             function step4()
179             {
180                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, step5);
181             }
182
183             function step5()
184             {
185                 evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, next);
186             }
187         },
188
189         function testEvaluateEditReload(next)
190         {
191             function evaluateSnippetAndReloadPage(uiSourceCode, callback)
192             {
193                 // JSC does not support compile-and-run for snippet evaluation, so different platforms have slightly different codeflow here, hence two sniffers.
194                 InspectorTest.addSniffer(WebInspector.ConsoleView.prototype, "_printResult", snippetFinished);
195                 InspectorTest.addSniffer(WebInspector.ScriptSnippetModel.prototype, "_printRunScriptResult", snippetFinished);
196                 WebInspector.scriptSnippetModel.evaluateScriptSnippet(WebInspector.context.flavor(WebInspector.ExecutionContext), uiSourceCode);
197
198                 function snippetFinished(result, wasThrown)
199                 {
200                     var script = WebInspector.scriptSnippetModel._scriptForUISourceCode.get(uiSourceCode);
201                     InspectorTest.addResult("Snippet execution result: " + result.description);
202
203                     InspectorTest.reloadPage(callback)
204                 }
205             }
206
207             resetSnippetsSettings();
208
209             snippetsProject.createFile("", null, "", step3.bind(this));
210             
211             function step3(path)
212             {
213                 var uiSourceCode1 = snippetsProject.uiSourceCode(path);
214                 uiSourceCode1.rename("Snippet1", function() { });
215                 var content = "";
216                 content += "// This snippet does nothing.\n";
217                 content += "var i = 2+2;\n";
218                 uiSourceCode1.setWorkingCopy(content);
219
220                 evaluateSnippetAndReloadPage(uiSourceCode1, next);
221             }
222         }
223     ]);
224 };
225 </script>
226 </head>
227 <body onload="runTest()">
228 <p>Tests script snippet model.</p>
229 </body>
230 </html>