From a5bf19486a6e5a58193580c088fb715baa57f90e Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Wed, 30 Dec 2015 17:26:08 -0500
Subject: [PATCH] Extend coverage for PerformPromiseThen

---
 .../prototype/then/prfm-pending-fulfulled.js  | 35 +++++++++++++++++++
 .../prototype/then/prfm-pending-rejected.js   | 35 +++++++++++++++++++
 2 files changed, 70 insertions(+)
 create mode 100644 test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
 create mode 100644 test/built-ins/Promise/prototype/then/prfm-pending-rejected.js

diff --git a/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js b/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
new file mode 100644
index 0000000000..b0d63c056e
--- /dev/null
+++ b/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 25.4.5.3
+description: PerformPromiseThen on a pending promise that is later fulfilled
+info: >
+    7. Return PerformPromiseThen(promise, onFulfilled, onRejected,
+       resultCapability).
+
+    25.4.5.3.1 PerformPromiseThen
+
+    [...]
+    7. If the value of promise's [[PromiseState]] internal slot is "pending",
+       a. Append fulfillReaction as the last element of the List that is the
+          value of promise's [[PromiseFulfillReactions]] internal slot.
+       b. Append rejectReaction as the last element of the List that is the
+          value of promise's [[PromiseRejectReactions]] internal slot.
+    [...]
+---*/
+
+var value = {};
+var resolve;
+var p = new Promise(function(_resolve) { resolve = _resolve; });
+
+p.then(function(x) {
+    if (x !== value) {
+      $DONE('The `onFulfilled` handler should be invoked with the promise result.');
+      return;
+    }
+    $DONE();
+  }, function() {
+    $DONE('The `onRejected` handler should not be invoked.');
+  });
+
+resolve(value);
diff --git a/test/built-ins/Promise/prototype/then/prfm-pending-rejected.js b/test/built-ins/Promise/prototype/then/prfm-pending-rejected.js
new file mode 100644
index 0000000000..23afce4b32
--- /dev/null
+++ b/test/built-ins/Promise/prototype/then/prfm-pending-rejected.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 25.4.5.3
+description: PerformPromiseThen on a pending promise that is later rejected
+info: >
+    7. Return PerformPromiseThen(promise, onFulfilled, onRejected,
+       resultCapability).
+
+    25.4.5.3.1 PerformPromiseThen
+
+    [...]
+    7. If the value of promise's [[PromiseState]] internal slot is "pending",
+       a. Append fulfillReaction as the last element of the List that is the
+          value of promise's [[PromiseFulfillReactions]] internal slot.
+       b. Append rejectReaction as the last element of the List that is the
+          value of promise's [[PromiseRejectReactions]] internal slot.
+    [...]
+---*/
+
+var value = {};
+var reject;
+var p = new Promise(function(_, _reject) { reject = _reject; });
+
+p.then(function() {
+    $DONE('The `onFulfilled` handler should not be invoked.');
+  }, function(x) {
+    if (x !== value) {
+      $DONE('The `onRejected` handler should be invoked with the promise result.');
+      return;
+    }
+    $DONE();
+  });
+
+reject(value);
-- 
GitLab