| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Flags: --allow-natives-syntax --expose-debug-as debug | |
| 6 | |
| 7 Debug = debug.Debug; | |
| 8 | |
| 9 var eventsExpected = 16; | |
| 10 var exception = null; | |
| 11 var result = []; | |
| 12 | |
| 13 function updatePromise(promise, parentPromise, status, value) { | |
| 14 var i; | |
| 15 for (i = 0; i < result.length; ++i) { | |
| 16 if (result[i].promise === promise) { | |
| 17 result[i].parentPromise = parentPromise || result[i].parentPromise; | |
| 18 result[i].status = status || result[i].status; | |
| 19 result[i].value = value || result[i].value; | |
| 20 break; | |
| 21 } | |
| 22 } | |
| 23 assertTrue(i < result.length); | |
| 24 } | |
| 25 | |
| 26 function listener(event, exec_state, event_data, data) { | |
| 27 if (event != Debug.DebugEvent.PromiseEvent) return; | |
| 28 try { | |
| 29 eventsExpected--; | |
| 30 assertTrue(event_data.promise().isPromise()); | |
| 31 if (event_data.status() === 0) { | |
| 32 // New promise. | |
| 33 assertEquals("pending", event_data.promise().status()); | |
| 34 result.push({ promise: event_data.promise().value(), status: 0 }); | |
| 35 assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); | |
| 36 } else if (event_data.status() !== undefined) { | |
| 37 // Resolve/reject promise. | |
| 38 updatePromise(event_data.promise().value(), | |
| 39 undefined, | |
| 40 event_data.status(), | |
| 41 event_data.value().value()); | |
| 42 } else { | |
| 43 // Chain promises. | |
| 44 assertTrue(event_data.parentPromise().isPromise()); | |
| 45 updatePromise(event_data.promise().value(), | |
| 46 event_data.parentPromise().value()); | |
| 47 assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); | |
| 48 } | |
| 49 } catch (e) { | |
| 50 print(e + e.stack) | |
| 51 exception = e; | |
| 52 } | |
| 53 } | |
| 54 | |
| 55 Debug.setListener(listener); | |
| 56 | |
| 57 function resolver(resolve, reject) { resolve(); } | |
| 58 | |
| 59 var p1 = new Promise(resolver); // event | |
| 60 var p2 = p1.then().then(); // event | |
| 61 var p3 = new Promise(function(resolve, reject) { // event | |
| 62 reject("rejected"); | |
| 63 }); | |
| 64 var p4 = p3.then(); // event | |
| 65 var p5 = p1.then(); // event | |
| 66 | |
| 67 function assertAsync(b, s) { | |
| 68 if (b) { | |
| 69 print(s, "succeeded"); | |
| 70 } else { | |
| 71 %AbortJS(s + " FAILED!"); | |
| 72 } | |
| 73 } | |
| 74 | |
| 75 function testDone(iteration) { | |
| 76 function checkResult() { | |
| 77 if (eventsExpected === 0) { | |
| 78 assertAsync(result.length === 6, "result.length"); | |
| 79 | |
| 80 assertAsync(result[0].promise === p1, "result[0].promise"); | |
| 81 assertAsync(result[0].parentPromise === undefined, | |
| 82 "result[0].parentPromise"); | |
| 83 assertAsync(result[0].status === 1, "result[0].status"); | |
| 84 assertAsync(result[0].value === undefined, "result[0].value"); | |
| 85 | |
| 86 assertAsync(result[1].parentPromise === p1, | |
| 87 "result[1].parentPromise"); | |
| 88 assertAsync(result[1].status === 1, "result[1].status"); | |
| 89 | |
| 90 assertAsync(result[2].promise === p2, "result[2].promise"); | |
| 91 | |
| 92 assertAsync(result[3].promise === p3, "result[3].promise"); | |
| 93 assertAsync(result[3].parentPromise === undefined, | |
| 94 "result[3].parentPromise"); | |
| 95 assertAsync(result[3].status === -1, "result[3].status"); | |
| 96 assertAsync(result[3].value === "rejected", "result[3].value"); | |
| 97 | |
| 98 assertAsync(result[4].promise === p4, "result[4].promise"); | |
| 99 assertAsync(result[4].parentPromise === p3, | |
| 100 "result[4].parentPromise"); | |
| 101 assertAsync(result[4].status === -1, "result[4].status"); | |
| 102 assertAsync(result[4].value === "rejected", "result[4].value"); | |
| 103 | |
| 104 assertAsync(result[5].promise === p5, "result[5].promise"); | |
| 105 assertAsync(result[5].parentPromise === p1, | |
| 106 "result[5].parentPromise"); | |
| 107 assertAsync(result[5].status === 1, "result[5].status"); | |
| 108 | |
| 109 assertAsync(exception === null, "exception === null"); | |
| 110 Debug.setListener(null); | |
| 111 } else if (iteration > 10) { | |
| 112 %AbortJS("Not all events were received!"); | |
| 113 } else { | |
| 114 testDone(iteration + 1); | |
| 115 } | |
| 116 } | |
| 117 | |
| 118 var iteration = iteration || 0; | |
| 119 var dummy = {}; | |
| 120 Object.observe(dummy, checkResult); | |
| 121 dummy.dummy = dummy; | |
| 122 } | |
| 123 | |
| 124 testDone(); | |
| OLD | NEW |