Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(571)

Unified Diff: test/mjsunit/harmony/promise-prototype-finally.js

Issue 2695753002: [ESnext] Implement Promise.prototype.finally (Closed)
Patch Set: add comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/flag-definitions.h ('K') | « src/objects-printer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/promise-prototype-finally.js
diff --git a/test/mjsunit/harmony/promise-prototype-finally.js b/test/mjsunit/harmony/promise-prototype-finally.js
new file mode 100644
index 0000000000000000000000000000000000000000..e61e75b0f599d9a1a0d12ac610ae15a05e39b995
--- /dev/null
+++ b/test/mjsunit/harmony/promise-prototype-finally.js
@@ -0,0 +1,164 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-promise-finally --allow-natives-syntax
+
+var asyncAssertsExpected = 0;
+
+function assertAsyncRan() {
+ ++asyncAssertsExpected;
+}
+
+function assertAsync(b, s) {
+ if (b) {
+ print(s, "succeeded");
+ } else {
+ %AbortJS(s + " FAILED!");
+ }
+ --asyncAssertsExpected;
+}
+
+function assertEqualsAsync(b, s) {
+ if (b === s) {
+ print(b, "===", s, "succeeded");
+ } else {
+ %AbortJS(b + "===" + s + " FAILED!");
+ }
+ --asyncAssertsExpected;
+}
+
+function assertAsyncDone(iteration) {
+ var iteration = iteration || 0;
+ %EnqueueMicrotask(function() {
+ if (asyncAssertsExpected === 0)
+ assertAsync(true, "all");
+ else if (
+ iteration > 10 // Shouldn't take more.
+ )
+ assertAsync(false, "all... " + asyncAssertsExpected);
+ else
+ assertAsyncDone(iteration + 1);
+ });
+}
+
+(function() {
+ Promise.resolve(3)
+ .then(x => {
+ assertEqualsAsync(3, x);
+ return x;
+ })
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
+ .finally()
+ .then(
+ x => {
+ assertEqualsAsync(3, x);
+ },
+ 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
+ );
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.reject(3)
+ .catch(e => {
+ assertEqualsAsync(3, e);
+ throw e;
+ })
+ .finally()
+ .then(assertUnreachable, reason => {
+ assertEqualsAsync(3, reason);
+ });
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.resolve(3)
+ .then(x => {
+ assertEqualsAsync(3, x);
+ return x;
+ })
+ .finally(function onFinally() {
+ 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.
+ throw 1;
+ })
+ .then(assertUnreachable, function onRejected(reason) {
+ assertEqualsAsync(1, reason);
+ });
+ assertAsyncRan();
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.reject(3)
+ .finally(function onFinally() {
+ assertAsync(arguments.length === 0);
+ throw 1;
+ })
+ .then(assertUnreachable, function onRejected(reason) {
+ assertEqualsAsync(1, reason);
+ });
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.resolve(3)
+ .then(x => {
+ assertEqualsAsync(3, x);
+ return x;
+ })
+ .finally(function onFinally() {
+ assertAsync(arguments.length === 0);
+ return 4;
+ })
+ .then(
+ function onFulfilled(x) {
+ assertEqualsAsync(x, 3);
+ },
+ assertUnreachable
+ );
+ assertAsyncRan();
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.reject(3)
+ .catch(e => {
+ assertEqualsAsync(3, e);
+ throw e;
+ })
+ .finally(function onFinally() {
+ assertAsync(arguments.length === 0);
+ throw 4;
+ })
+ .then(assertUnreachable, function onRejected(e) {
+ assertEqualsAsync(4, e);
+ });
+ assertAsyncRan();
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+(function() {
+ Promise.resolve(3)
+ .then(x => {
+ assertEqualsAsync(3, x);
+ return x;
+ })
+ .finally(function onFinally() {
+ assertAsync(arguments.length === 0);
+ return Promise.reject(4);
+ })
+ .then(assertUnreachable, e => {
+ assertEqualsAsync(4, e);
+ });
+ assertAsyncRan();
+ assertAsyncRan();
+ assertAsyncRan();
+})();
+
+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
« src/flag-definitions.h ('K') | « src/objects-printer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698