Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / inspector / sources / debugger / promise-tracker.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
7 function testFunction()
8 {
9     var promise = new Promise(function promiseConstructor(resolve, reject) {
10         resolve("Resolved!");
11     });
12     promise
13         .then(thenCallback, errorCallback)
14         .then(thenCallback2, errorCallback);
15 }
16
17 function thenCallback() { }
18
19 function thenCallback2()
20 {
21     debugger;
22 }
23
24 function errorCallback() { }
25
26 var test = function ()
27 {
28     InspectorTest.startDebuggerTest(step1);
29
30     function step1()
31     {
32         DebuggerAgent.enablePromiseTracker();
33         InspectorTest.runTestFunctionAndWaitUntilPaused(step2);
34     }
35
36     function step2()
37     {
38         DebuggerAgent.getPromises(didGetPromises);
39     }
40
41     function didGetPromises(error, response)
42     {
43         InspectorTest.assertTrue(!error, "FAIL: " + error);
44
45         function comparePromiseData(x, y)
46         {
47             if (x.id < y.id)
48                 return -1;
49             else if (x.id === y.id)
50                 return 0;
51             else
52                 return 1;
53         }
54
55         var minPromiseId;
56         if (response.length) {
57             minPromiseId = response[0].id;
58             for (var i = 0; i < response.length; i++)
59                 minPromiseId = Math.min(minPromiseId, response[i].id);
60         }
61         response.sort(comparePromiseData);
62
63         var output = [];
64         for (var i = 0; i < response.length; i++) {
65             var promise = response[i];
66             var parentId = promise.parentId ? promise.parentId - minPromiseId : undefined;
67             var promiseInfo = "Promise:" +
68                               "\n    id: " + (promise.id - minPromiseId) +
69                               "\n    status: " + promise.status +
70                               "\n    parent id: " + parentId;
71             var callFrame = promise.callFrame;
72             if (callFrame) {
73                 var url = WebInspector.displayNameForURL(callFrame.url);
74                 promiseInfo += "\n    " + callFrame.functionName + " " + url + ":" + callFrame.lineNumber;
75             }
76             output.push(promiseInfo);
77         }
78
79         InspectorTest.addResults(output);
80
81         DebuggerAgent.getPromiseById(response[0].id, "console", didGetPromiseById);
82     }
83
84     function didGetPromiseById(error, response)
85     {
86         InspectorTest.assertTrue(!error, "FAIL: " + error);
87         InspectorTest.assertTrue(response && response.type === "object" && response.className === "Promise", "FAIL: returned by ID object is not a Promise.");
88
89         RuntimeAgent.getProperties(response.objectId, didGetProperties);
90     }
91
92     function didGetProperties(error, properties, internalProperties) {
93         InspectorTest.assertTrue(!error, "FAIL: " + error);
94         InspectorTest.assertTrue(internalProperties && internalProperties.length > 0, "FAIL: no internal properties.");
95
96         var status, value;
97         for (var i = 0; i < internalProperties.length; i++) {
98             var property = internalProperties[i];
99             if (property.name === "[[PromiseStatus]]")
100                 status = property.value.value;
101             if (property.name === "[[PromiseValue]]")
102                 value = property.value.value;
103         }
104
105         InspectorTest.addResult("Promise:\n    status: " + status + "\n    value: " + value);
106
107         DebuggerAgent.disablePromiseTracker();
108         DebuggerAgent.getPromises(didGetPromises2);
109     }
110
111     function didGetPromises2(error, response)
112     {
113         var hasData = !error && response && response.length > 0;
114         InspectorTest.assertTrue(!hasData, "FAIL: expected error or no data after disabling promise tracker.");
115         InspectorTest.completeDebuggerTest();
116     }
117 }
118
119 </script>
120 </head>
121
122 <body onload="runTest()">
123 <p>
124 Tests promise tracker in debugger.
125 </p>
126 </body>
127 </html>