3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/debugger-test.js"></script>
7 function testFunction()
9 var promise = new Promise(function promiseConstructor(resolve, reject) {
13 .then(thenCallback, errorCallback)
14 .then(thenCallback2, errorCallback);
17 function thenCallback() { }
19 function thenCallback2()
24 function errorCallback() { }
26 var test = function ()
28 InspectorTest.startDebuggerTest(step1);
32 DebuggerAgent.enablePromiseTracker();
33 InspectorTest.runTestFunctionAndWaitUntilPaused(step2);
38 DebuggerAgent.getPromises(didGetPromises);
41 function didGetPromises(error, response)
43 InspectorTest.assertTrue(!error, "FAIL: " + error);
45 function comparePromiseData(x, y)
47 var t1 = x.creationTime || 0;
48 var t2 = y.creationTime || 0;
49 return t1 - t2 || x.id - y.id;
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);
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;
70 var url = WebInspector.displayNameForURL(callFrame.url);
71 promiseInfo += "\n " + callFrame.functionName + " " + url + ":" + callFrame.lineNumber;
73 output.push(promiseInfo);
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.");
79 InspectorTest.addResults(output);
81 DebuggerAgent.getPromiseById(response[0].id, "console", didGetPromiseById);
84 function didGetPromiseById(error, response)
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.");
89 RuntimeAgent.getProperties(response.objectId, didGetProperties);
92 function didGetProperties(error, properties, internalProperties)
94 InspectorTest.assertTrue(!error, "FAIL: " + error);
95 InspectorTest.assertTrue(internalProperties && internalProperties.length > 0, "FAIL: no internal properties.");
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;
106 InspectorTest.addResult("Promise:\n status: " + status + "\n value: " + value);
108 DebuggerAgent.disablePromiseTracker();
109 DebuggerAgent.getPromises(didGetPromises2);
112 function didGetPromises2(error, response)
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();
123 <body onload="runTest()">
125 Tests promise tracker in debugger.