Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 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: --harmony-promise-finally --allow-natives-syntax | |
| 6 | |
| 7 var asyncAssertsExpected = 0; | |
| 8 | |
| 9 function assertAsyncRan() { | |
| 10 ++asyncAssertsExpected; | |
| 11 } | |
| 12 | |
| 13 function assertAsync(b, s) { | |
| 14 if (b) { | |
| 15 print(s, "succeeded"); | |
| 16 } else { | |
| 17 %AbortJS(s + " FAILED!"); | |
| 18 } | |
| 19 --asyncAssertsExpected; | |
| 20 } | |
| 21 | |
| 22 function assertEqualsAsync(b, s) { | |
| 23 if (b === s) { | |
| 24 print(b, "===", s, "succeeded"); | |
| 25 } else { | |
| 26 %AbortJS(b + "===" + s + " FAILED!"); | |
| 27 } | |
| 28 --asyncAssertsExpected; | |
| 29 } | |
| 30 | |
| 31 function assertAsyncDone(iteration) { | |
| 32 var iteration = iteration || 0; | |
| 33 %EnqueueMicrotask(function() { | |
| 34 if (asyncAssertsExpected === 0) | |
| 35 assertAsync(true, "all"); | |
| 36 else if ( | |
| 37 iteration > 10 // Shouldn't take more. | |
| 38 ) | |
| 39 assertAsync(false, "all... " + asyncAssertsExpected); | |
| 40 else | |
| 41 assertAsyncDone(iteration + 1); | |
| 42 }); | |
| 43 } | |
| 44 | |
| 45 (function() { | |
| 46 Promise.resolve(3) | |
| 47 .then(x => { | |
| 48 assertEqualsAsync(3, x); | |
| 49 return x; | |
| 50 }) | |
|
neis
2017/02/15 12:40:40
Is this .then call useful at all?
gsathya
2017/02/16 15:05:30
Removed
neis
2017/02/17 10:22:54
Still there.
gsathya
2017/02/17 11:26:16
Can you comment on the latest patch set? I can't f
| |
| 51 .finally() | |
| 52 .then( | |
| 53 x => { | |
| 54 assertEqualsAsync(3, x); | |
| 55 }, | |
| 56 assertUnreachable | |
|
neis
2017/02/15 12:40:40
assertUnreachable here is wrong since it would jus
gsathya
2017/02/16 15:05:30
assertUnreachable now aborts the test
| |
| 57 ); | |
| 58 assertAsyncRan(); | |
| 59 assertAsyncRan(); | |
| 60 })(); | |
| 61 | |
| 62 (function() { | |
| 63 Promise.reject(3) | |
| 64 .catch(e => { | |
| 65 assertEqualsAsync(3, e); | |
| 66 throw e; | |
| 67 }) | |
| 68 .finally() | |
| 69 .then(assertUnreachable, reason => { | |
| 70 assertEqualsAsync(3, reason); | |
| 71 }); | |
| 72 assertAsyncRan(); | |
| 73 assertAsyncRan(); | |
| 74 })(); | |
| 75 | |
| 76 (function() { | |
| 77 Promise.resolve(3) | |
| 78 .then(x => { | |
| 79 assertEqualsAsync(3, x); | |
| 80 return x; | |
| 81 }) | |
| 82 .finally(function onFinally() { | |
| 83 assertAsync(arguments.length === 0); | |
|
neis
2017/02/15 12:40:39
Equals?
gsathya
2017/02/16 15:05:30
assertAsync is fine here since we check if true? O
neis
2017/02/17 10:22:54
Yeah I don't see why you don't use assertEqualsAsy
gsathya
2017/02/17 11:26:15
Done.
| |
| 84 throw 1; | |
| 85 }) | |
| 86 .then(assertUnreachable, function onRejected(reason) { | |
| 87 assertEqualsAsync(1, reason); | |
| 88 }); | |
| 89 assertAsyncRan(); | |
| 90 assertAsyncRan(); | |
| 91 assertAsyncRan(); | |
| 92 })(); | |
| 93 | |
| 94 (function() { | |
| 95 Promise.reject(3) | |
| 96 .finally(function onFinally() { | |
| 97 assertAsync(arguments.length === 0); | |
| 98 throw 1; | |
| 99 }) | |
| 100 .then(assertUnreachable, function onRejected(reason) { | |
| 101 assertEqualsAsync(1, reason); | |
| 102 }); | |
| 103 assertAsyncRan(); | |
| 104 assertAsyncRan(); | |
| 105 })(); | |
| 106 | |
| 107 (function() { | |
| 108 Promise.resolve(3) | |
| 109 .then(x => { | |
| 110 assertEqualsAsync(3, x); | |
| 111 return x; | |
| 112 }) | |
| 113 .finally(function onFinally() { | |
| 114 assertAsync(arguments.length === 0); | |
| 115 return 4; | |
| 116 }) | |
| 117 .then( | |
| 118 function onFulfilled(x) { | |
| 119 assertEqualsAsync(x, 3); | |
| 120 }, | |
| 121 assertUnreachable | |
| 122 ); | |
| 123 assertAsyncRan(); | |
| 124 assertAsyncRan(); | |
| 125 assertAsyncRan(); | |
| 126 })(); | |
| 127 | |
| 128 (function() { | |
| 129 Promise.reject(3) | |
| 130 .catch(e => { | |
| 131 assertEqualsAsync(3, e); | |
| 132 throw e; | |
| 133 }) | |
| 134 .finally(function onFinally() { | |
| 135 assertAsync(arguments.length === 0); | |
| 136 throw 4; | |
| 137 }) | |
| 138 .then(assertUnreachable, function onRejected(e) { | |
| 139 assertEqualsAsync(4, e); | |
| 140 }); | |
| 141 assertAsyncRan(); | |
| 142 assertAsyncRan(); | |
| 143 assertAsyncRan(); | |
| 144 })(); | |
| 145 | |
| 146 (function() { | |
| 147 Promise.resolve(3) | |
| 148 .then(x => { | |
| 149 assertEqualsAsync(3, x); | |
| 150 return x; | |
| 151 }) | |
| 152 .finally(function onFinally() { | |
| 153 assertAsync(arguments.length === 0); | |
| 154 return Promise.reject(4); | |
| 155 }) | |
| 156 .then(assertUnreachable, e => { | |
| 157 assertEqualsAsync(4, e); | |
| 158 }); | |
| 159 assertAsyncRan(); | |
| 160 assertAsyncRan(); | |
| 161 assertAsyncRan(); | |
| 162 })(); | |
| 163 | |
| 164 assertAsyncDone(); | |
|
neis
2017/02/15 12:40:39
Please add some tests that check that .finally jus
gsathya
2017/02/16 15:05:30
Added a whole bunch of tests. PTAL.
neis
2017/02/17 10:22:54
I'm still missing a test passing an argument to .f
gsathya
2017/02/17 11:26:15
You mean, makes sure that it's not being passed on
| |
| OLD | NEW |