Update To 11.40.268.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             var t1 = x.creationTime || 0;
48             var t2 = y.creationTime || 0;
49             return t1 - t2 || x.id - y.id;
50         }
51
52         InspectorTest.assertEquals(3, response.length, "FAIL: Invalid number of Promises.");
53         var minPromiseId = response[0].id;
54         for (var i = 0; i < response.length; i++)
55             minPromiseId = Math.min(minPromiseId, response[i].id);
56         response.sort(comparePromiseData);
57
58         var output = [];
59         for (var i = 0; i < response.length; i++) {
60             var promise = response[i];
61             InspectorTest.assertTrue(promise.creationTime > 0, "FAIL: invalid Promise creation time.");
62             InspectorTest.assertTrue(!promise.settlementTime || (promise.settlementTime >= promise.creationTime), "FAIL: invalid Promise creation or settlement time.");
63             var parentId = promise.parentId ? promise.parentId - minPromiseId : undefined;
64             var promiseInfo = "Promise:" +
65                               "\n    id: " + (promise.id - minPromiseId) +
66                               "\n    status: " + promise.status +
67                               "\n    parent id: " + parentId;
68             var callFrame = promise.callFrame;
69             if (callFrame) {
70                 var url = WebInspector.displayNameForURL(callFrame.url);
71                 promiseInfo += "\n    " + callFrame.functionName + " " + url + ":" + callFrame.lineNumber;
72             }
73             output.push(promiseInfo);
74         }
75
76         InspectorTest.assertGreaterOrEqual(response[1].settlementTime, response[0].settlementTime, "FAIL: invalid Promise settlement time.");
77         InspectorTest.assertTrue(!response[2].settlementTime, "FAIL: a pending Promise should not have settlement time.");
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     {
94         InspectorTest.assertTrue(!error, "FAIL: " + error);
95         InspectorTest.assertTrue(internalProperties && internalProperties.length > 0, "FAIL: no internal properties.");
96
97         var status, value;
98         for (var i = 0; i < internalProperties.length; i++) {
99             var property = internalProperties[i];
100             if (property.name === "[[PromiseStatus]]")
101                 status = property.value.value;
102             if (property.name === "[[PromiseValue]]")
103                 value = property.value.value;
104         }
105
106         InspectorTest.addResult("Promise:\n    status: " + status + "\n    value: " + value);
107
108         DebuggerAgent.disablePromiseTracker();
109         DebuggerAgent.getPromises(didGetPromises2);
110     }
111
112     function didGetPromises2(error, response)
113     {
114         var hasData = !error && response && response.length > 0;
115         InspectorTest.assertTrue(!hasData, "FAIL: expected error or no data after disabling promise tracker.");
116         InspectorTest.completeDebuggerTest();
117     }
118 }
119
120 </script>
121 </head>
122
123 <body onload="runTest()">
124 <p>
125 Tests promise tracker in debugger.
126 </p>
127 </body>
128 </html>