Chromium Code Reviews| 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 = 13; | |
| 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 if (event_data.status() === 0) { | |
| 31 // New promise. | |
| 32 assertTrue(event_data.promise().isPromise()); | |
| 33 assertEquals("pending", event_data.promise().status()); | |
| 34 result.push({ promise: event_data.promise().value(), status: 0 }); | |
| 35 } else if (event_data.status() !== undefined) { | |
| 36 // Resolve/reject promise. | |
| 37 assertTrue(event_data.promise().isPromise()); | |
| 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.promise().isPromise()); | |
|
aandrey
2014/08/01 13:22:21
code dup x3
Alexandra Mikhaylova
2014/08/01 13:44:53
Done.
| |
| 45 assertTrue(event_data.parentPromise().isPromise()); | |
| 46 updatePromise(event_data.promise().value(), | |
| 47 event_data.parentPromise().value()); | |
| 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) { | |
| 58 resolve(); | |
| 59 } | |
| 60 | |
| 61 var p1 = new Promise(resolver); | |
| 62 var p2 = p1.then().then(); | |
| 63 var p3 = new Promise(function(resolve, reject) { reject("rejected"); }); | |
| 64 var p4 = p3.then(); | |
|
aandrey
2014/08/01 13:22:21
there is still no tree of promises, isn't it? mayb
Alexandra Mikhaylova
2014/08/01 13:44:53
Done.
| |
| 65 | |
| 66 function assertOrAbort(b, s) { | |
|
aandrey
2014/08/01 13:22:21
can we use same name from where it's copied, to ea
Alexandra Mikhaylova
2014/08/01 13:44:53
Done.
| |
| 67 if (b) { | |
| 68 print(s, "succeeded"); | |
| 69 } else { | |
| 70 %AbortJS(s + " FAILED!"); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 function testDone(iteration) { | |
| 75 var iteration = iteration || 0; | |
| 76 var dummy = {}; | |
| 77 Object.observe(dummy, | |
| 78 function() { | |
|
aandrey
2014/08/01 13:22:21
extract this function to top level
Alexandra Mikhaylova
2014/08/01 13:44:53
Done.
| |
| 79 if (eventsExpected === 0) { | |
| 80 assertOrAbort(result.length === 5, "result.length"); | |
| 81 | |
| 82 assertOrAbort(result[0].promise === p1, | |
| 83 "result[0].promise"); | |
| 84 assertOrAbort(result[0].parentPromise === undefined, | |
| 85 "result[0].parentPromise"); | |
| 86 assertOrAbort(result[0].status === 1, "result[0].status"); | |
| 87 assertOrAbort(result[0].value === undefined, | |
| 88 "result[0].value"); | |
| 89 | |
| 90 assertOrAbort(result[1].parentPromise === p1, | |
| 91 "result[1].parentPromise"); | |
| 92 assertOrAbort(result[1].status === 1, "result[1].status"); | |
| 93 | |
| 94 assertOrAbort(result[2].promise === p2, | |
| 95 "result[2].promise"); | |
| 96 | |
| 97 assertOrAbort(result[3].promise === p3, | |
| 98 "result[3].promise"); | |
| 99 assertOrAbort(result[3].parentPromise === undefined, | |
| 100 "result[3].parentPromise"); | |
| 101 assertOrAbort(result[3].status === -1, "result[3].status"); | |
| 102 assertOrAbort(result[3].value === "rejected", | |
| 103 "result[3].value"); | |
| 104 | |
| 105 assertOrAbort(result[4].promise === p4, | |
| 106 "result[4].promise"); | |
| 107 assertOrAbort(result[4].parentPromise === p3, | |
| 108 "result[4].parentPromise"); | |
| 109 assertOrAbort(result[4].status === -1, "result[4].status"); | |
| 110 assertOrAbort(result[4].value === "rejected", | |
| 111 "result[4].value"); | |
| 112 | |
| 113 assertOrAbort(exception === null, "exception === null"); | |
| 114 Debug.setListener(null); | |
| 115 } else if (iteration > 10) { | |
| 116 %AbortJS("Not all events were received!"); | |
| 117 } else { | |
| 118 testDone(iteration + 1); | |
| 119 } | |
| 120 }); | |
| 121 dummy.dummy = dummy; | |
| 122 } | |
| 123 | |
| 124 testDone(); | |
| OLD | NEW |