From 23d566209a2bccc14d572e0bd81394a9f99ca272 Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Fri, 12 Feb 2016 12:59:51 -0500
Subject: [PATCH] Make asynchronous test configuration explicit

For asynchronous tests, the contract between test file and test runner
is implicit: runners are expected to inspect the source code for
references to a global `$DONE` identifier.

Promote a more explicit contract between test file and test runner by
introducing a new frontmatter "tag", `async`. This brings asynchronous
test configuration in-line with other configuration mechanisms and also
provides a more natural means of test filtering.

The modifications to test files was made programatically using the
`grep` and `sed` utilities:

    $ grep "\$DONE" test/ -r --files-with-match --null | \
        xargs -0 sed -i 's/^\(flags:\s*\)\[/\1[async, /g'
    $ grep "\$DONE" test/ -rl --null | \
        xargs -0 grep -E '^flags:' --files-without-match --null | \
        xargs -0 sed -i 's/^---\*\//flags: [async]\n---*\//'
---
 CONTRIBUTING.md                                               | 4 +++-
 test/built-ins/Promise/S25.4.3.1_A2.3_T1.js                   | 1 +
 test/built-ins/Promise/S25.4.3.1_A2.4_T1.js                   | 1 +
 test/built-ins/Promise/S25.4.3.1_A4.1_T1.js                   | 1 +
 test/built-ins/Promise/S25.4.3.1_A5.1_T1.js                   | 2 +-
 test/built-ins/Promise/S25.4.3.1_A5.1_T2.js                   | 2 +-
 test/built-ins/Promise/all/S25.4.4.1_A2.2_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A2.3_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A2.3_T2.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A2.3_T3.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A3.1_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A3.1_T2.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A3.1_T3.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A5.1_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A6.1_T2.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A7.1_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A7.2_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A8.1_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js               | 1 +
 test/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js               | 1 +
 test/built-ins/Promise/all/does-not-invoke-array-setters.js   | 1 +
 test/built-ins/Promise/all/invoke-resolve-get-error.js        | 1 +
 test/built-ins/Promise/all/invoke-then-error.js               | 1 +
 test/built-ins/Promise/all/iter-next-val-err.js               | 1 +
 test/built-ins/Promise/all/iter-step-err.js                   | 1 +
 test/built-ins/Promise/all/reject-deferred.js                 | 1 +
 test/built-ins/Promise/all/reject-ignored-deferred.js         | 1 +
 test/built-ins/Promise/all/reject-ignored-immed.js            | 1 +
 test/built-ins/Promise/all/reject-immed.js                    | 1 +
 test/built-ins/Promise/all/resolve-non-thenable.js            | 1 +
 test/built-ins/Promise/all/resolve-poisoned-then.js           | 1 +
 test/built-ins/Promise/all/resolve-thenable.js                | 1 +
 test/built-ins/Promise/exception-after-resolve-in-executor.js | 1 +
 .../Promise/exception-after-resolve-in-thenable-job.js        | 1 +
 test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T1.js   | 1 +
 test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T2.js   | 1 +
 test/built-ins/Promise/prototype/then/S25.4.4_A1.1_T1.js      | 1 +
 test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T1.js      | 1 +
 test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T2.js      | 1 +
 test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T3.js      | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T1.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T2.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T1.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T2.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A5.1_T1.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A5.2_T1.js    | 1 +
 test/built-ins/Promise/prototype/then/S25.4.5.3_A5.3_T1.js    | 1 +
 .../Promise/prototype/then/deferred-is-resolved-value.js      | 1 +
 test/built-ins/Promise/prototype/then/prfm-fulfilled.js       | 1 +
 .../Promise/prototype/then/prfm-pending-fulfulled.js          | 1 +
 .../built-ins/Promise/prototype/then/prfm-pending-rejected.js | 1 +
 test/built-ins/Promise/prototype/then/prfm-rejected.js        | 1 +
 .../Promise/prototype/then/reject-pending-fulfilled.js        | 1 +
 .../Promise/prototype/then/reject-pending-rejected.js         | 1 +
 .../Promise/prototype/then/reject-settled-fulfilled.js        | 1 +
 .../Promise/prototype/then/reject-settled-rejected.js         | 1 +
 .../prototype/then/resolve-pending-fulfilled-non-obj.js       | 1 +
 .../prototype/then/resolve-pending-fulfilled-non-thenable.js  | 1 +
 .../prototype/then/resolve-pending-fulfilled-poisoned-then.js | 1 +
 .../Promise/prototype/then/resolve-pending-fulfilled-self.js  | 1 +
 .../prototype/then/resolve-pending-fulfilled-thenable.js      | 1 +
 .../prototype/then/resolve-pending-rejected-non-obj.js        | 1 +
 .../prototype/then/resolve-pending-rejected-non-thenable.js   | 1 +
 .../prototype/then/resolve-pending-rejected-poisoned-then.js  | 1 +
 .../Promise/prototype/then/resolve-pending-rejected-self.js   | 1 +
 .../prototype/then/resolve-pending-rejected-thenable.js       | 1 +
 .../prototype/then/resolve-settled-fulfilled-non-obj.js       | 1 +
 .../prototype/then/resolve-settled-fulfilled-non-thenable.js  | 1 +
 .../prototype/then/resolve-settled-fulfilled-poisoned-then.js | 1 +
 .../Promise/prototype/then/resolve-settled-fulfilled-self.js  | 1 +
 .../prototype/then/resolve-settled-fulfilled-thenable.js      | 1 +
 .../prototype/then/resolve-settled-rejected-non-obj.js        | 1 +
 .../prototype/then/resolve-settled-rejected-non-thenable.js   | 1 +
 .../prototype/then/resolve-settled-rejected-poisoned-then.js  | 1 +
 .../Promise/prototype/then/resolve-settled-rejected-self.js   | 1 +
 .../prototype/then/resolve-settled-rejected-thenable.js       | 1 +
 .../prototype/then/rxn-handler-fulfilled-invoke-nonstrict.js  | 2 +-
 .../prototype/then/rxn-handler-fulfilled-invoke-strict.js     | 2 +-
 .../prototype/then/rxn-handler-fulfilled-next-abrupt.js       | 1 +
 .../Promise/prototype/then/rxn-handler-fulfilled-next.js      | 1 +
 .../prototype/then/rxn-handler-fulfilled-return-abrupt.js     | 1 +
 .../prototype/then/rxn-handler-fulfilled-return-normal.js     | 1 +
 test/built-ins/Promise/prototype/then/rxn-handler-identity.js | 1 +
 .../prototype/then/rxn-handler-rejected-invoke-nonstrict.js   | 2 +-
 .../prototype/then/rxn-handler-rejected-invoke-strict.js      | 2 +-
 .../prototype/then/rxn-handler-rejected-next-abrupt.js        | 1 +
 .../Promise/prototype/then/rxn-handler-rejected-next.js       | 1 +
 .../prototype/then/rxn-handler-rejected-return-abrupt.js      | 1 +
 .../prototype/then/rxn-handler-rejected-return-normal.js      | 1 +
 test/built-ins/Promise/prototype/then/rxn-handler-thrower.js  | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A2.2_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A2.2_T2.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A2.2_T3.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A4.1_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A4.1_T2.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A5.1_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A6.1_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A6.2_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.1_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.1_T2.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.1_T3.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.2_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.3_T1.js              | 1 +
 test/built-ins/Promise/race/S25.4.4.3_A7.3_T2.js              | 1 +
 test/built-ins/Promise/race/invoke-resolve-get-error.js       | 1 +
 test/built-ins/Promise/race/invoke-then-error.js              | 1 +
 test/built-ins/Promise/race/iter-close.js                     | 1 +
 test/built-ins/Promise/race/iter-next-val-err.js              | 1 +
 test/built-ins/Promise/race/iter-step-err.js                  | 1 +
 test/built-ins/Promise/race/reject-deferred.js                | 1 +
 test/built-ins/Promise/race/reject-ignored-deferred.js        | 1 +
 test/built-ins/Promise/race/reject-ignored-immed.js           | 1 +
 test/built-ins/Promise/race/reject-immed.js                   | 1 +
 test/built-ins/Promise/race/resolve-non-obj.js                | 1 +
 test/built-ins/Promise/race/resolve-non-thenable.js           | 1 +
 test/built-ins/Promise/race/resolve-poisoned-then.js          | 1 +
 test/built-ins/Promise/race/resolve-self.js                   | 1 +
 test/built-ins/Promise/race/resolve-thenable.js               | 1 +
 test/built-ins/Promise/reject-ignored-via-abrupt.js           | 1 +
 test/built-ins/Promise/reject-ignored-via-fn-deferred.js      | 1 +
 test/built-ins/Promise/reject-ignored-via-fn-immed.js         | 1 +
 test/built-ins/Promise/reject-via-abrupt.js                   | 1 +
 test/built-ins/Promise/reject-via-fn-deferred.js              | 1 +
 test/built-ins/Promise/reject-via-fn-immed.js                 | 1 +
 test/built-ins/Promise/reject/S25.4.4.4_A2.1_T1.js            | 1 +
 test/built-ins/Promise/resolve-non-obj-deferred.js            | 1 +
 test/built-ins/Promise/resolve-non-obj-immed.js               | 1 +
 test/built-ins/Promise/resolve-non-thenable-deferred.js       | 1 +
 test/built-ins/Promise/resolve-non-thenable-immed.js          | 1 +
 test/built-ins/Promise/resolve-poisoned-then-deferred.js      | 1 +
 test/built-ins/Promise/resolve-poisoned-then-immed.js         | 1 +
 test/built-ins/Promise/resolve-self.js                        | 1 +
 test/built-ins/Promise/resolve-thenable-deferred.js           | 1 +
 test/built-ins/Promise/resolve-thenable-immed.js              | 1 +
 test/built-ins/Promise/resolve/S25.4.4.5_A2.2_T1.js           | 1 +
 test/built-ins/Promise/resolve/S25.4.4.5_A2.3_T1.js           | 1 +
 test/built-ins/Promise/resolve/S25.4.4.5_A3.1_T1.js           | 1 +
 test/built-ins/Promise/resolve/S25.4.4.5_A4.1_T1.js           | 1 +
 .../Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js | 1 +
 .../Promise/resolve/S25.Promise_resolve_foreign_thenable_2.js | 1 +
 test/built-ins/Promise/resolve/arg-non-thenable.js            | 1 +
 test/built-ins/Promise/resolve/arg-poisoned-then.js           | 1 +
 test/built-ins/Promise/resolve/resolve-non-obj.js             | 1 +
 test/built-ins/Promise/resolve/resolve-non-thenable.js        | 1 +
 test/built-ins/Promise/resolve/resolve-poisoned-then.js       | 1 +
 test/built-ins/Promise/resolve/resolve-self.js                | 1 +
 test/built-ins/Promise/resolve/resolve-thenable.js            | 1 +
 tools/packaging/test262.py                                    | 2 +-
 148 files changed, 150 insertions(+), 8 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index da3971ea5f..1276735639 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -128,6 +128,8 @@ This tag is for boolean properties associated with the test.
 - **`raw`** - execute the test without any modification (no helpers will be
   available); necessary to test the behavior of directive prologue; implies
   `noStrict`
+- **`async`** - defer interpretation of test results until after the invocation
+  of the global $DONE` function
 
 #### features
 **features**: [list]
@@ -198,7 +200,7 @@ assert.throws(ReferenceError, function() {
 
 ## Writing Asynchronous Tests
 
-An asynchronous test is any test that includes the string `$DONE` anywhere in the test file.  The test runner checks for the presence of this string; if it is found, the runner expects that the `$DONE()` function will be called to signal test completion.
+An asynchronous test is any test that include the `async` frontmatter flag. When executing such tests, the runner expects that the global `$DONE()` function will be called to signal test completion.
 
  * If the argument to `$DONE` is omitted, is `undefined`, or is any other falsy value, the test is considered to have passed.
 
diff --git a/test/built-ins/Promise/S25.4.3.1_A2.3_T1.js b/test/built-ins/Promise/S25.4.3.1_A2.3_T1.js
index 01574d12e0..22690161bd 100644
--- a/test/built-ins/Promise/S25.4.3.1_A2.3_T1.js
+++ b/test/built-ins/Promise/S25.4.3.1_A2.3_T1.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.3.1_A2.3_T1
 author: Sam Mikes
 description: Promise.call(resolved Promise) throws TypeError
+flags: [async]
 ---*/
 
 var p = new Promise(function(resolve) { resolve(1); });
diff --git a/test/built-ins/Promise/S25.4.3.1_A2.4_T1.js b/test/built-ins/Promise/S25.4.3.1_A2.4_T1.js
index 79666fdfd5..8151f8b66b 100644
--- a/test/built-ins/Promise/S25.4.3.1_A2.4_T1.js
+++ b/test/built-ins/Promise/S25.4.3.1_A2.4_T1.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.3.1_A2.4_T1
 author: Sam Mikes
 description: Promise.call(rejected Promise) throws TypeError
+flags: [async]
 ---*/
 
 var p = new Promise(function(resolve, reject) { reject(1) });
diff --git a/test/built-ins/Promise/S25.4.3.1_A4.1_T1.js b/test/built-ins/Promise/S25.4.3.1_A4.1_T1.js
index 577cb3c1fd..649418b7ed 100644
--- a/test/built-ins/Promise/S25.4.3.1_A4.1_T1.js
+++ b/test/built-ins/Promise/S25.4.3.1_A4.1_T1.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.3.1_A4.1_T1
 author: Sam Mikes
 description: new Promise(function () { throw }) should reject
+flags: [async]
 ---*/
 
 var errorObject = {},
diff --git a/test/built-ins/Promise/S25.4.3.1_A5.1_T1.js b/test/built-ins/Promise/S25.4.3.1_A5.1_T1.js
index 5ad54e7568..f74ccebdd1 100644
--- a/test/built-ins/Promise/S25.4.3.1_A5.1_T1.js
+++ b/test/built-ins/Promise/S25.4.3.1_A5.1_T1.js
@@ -9,7 +9,7 @@ info: >
 es6id: S25.4.3.1_A5.1_T1
 author: Sam Mikes
 description: Promise executor gets default handling for 'this'
-flags: [noStrict]
+flags: [async, noStrict]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/Promise/S25.4.3.1_A5.1_T2.js b/test/built-ins/Promise/S25.4.3.1_A5.1_T2.js
index a3dde91926..c8458c9be8 100644
--- a/test/built-ins/Promise/S25.4.3.1_A5.1_T2.js
+++ b/test/built-ins/Promise/S25.4.3.1_A5.1_T2.js
@@ -9,7 +9,7 @@ info: >
 es6id: S25.4.3.1_A5.1_T2
 author: Sam Mikes
 description: Promise executor gets default handling for 'this'
-flags: [onlyStrict]
+flags: [async, onlyStrict]
 ---*/
 
 var expectedThis = undefined;
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A2.2_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A2.2_T1.js
index 9cd7d17154..a34fb70f6d 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A2.2_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A2.2_T1.js
@@ -7,6 +7,7 @@ es6id: 25.4.4.1_A2.2_T1
 author: Sam Mikes
 includes: [PromiseHelper.js]
 description: Promise.all([]) returns immediately
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T1.js
index fe60c2a75e..1b61ede66d 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T1.js
@@ -6,6 +6,7 @@ info: Promise.all([]) returns a promise for a new empty array
 es6id: 25.4.4.1_A2.3_T1
 author: Sam Mikes
 description: Promise.all([]) returns a promise for an array
+flags: [async]
 ---*/
 
 var arg = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T2.js b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T2.js
index fdfeb567c1..77cd2628e0 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T2.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T2.js
@@ -6,6 +6,7 @@ info: Promise.all is resolved with a new empty array
 es6id: 25.4.4.1_A2.3_T2
 author: Sam Mikes
 description: Promise.all([]) returns a Promise for an empty array
+flags: [async]
 ---*/
 
 var arg = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T3.js b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T3.js
index c936a4d755..5dc1568eb6 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A2.3_T3.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A2.3_T3.js
@@ -6,6 +6,7 @@ info: Promise.all([]) is resolved with Promise for a new empty array
 es6id: 25.4.4.1_A2.3_T3
 author: Sam Mikes
 description: Promise.all([]) is resolved with a Promise for a new array
+flags: [async]
 ---*/
 
 var arg = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T1.js
index 52023add13..3022972a31 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T1.js
@@ -9,6 +9,7 @@ info: >
 es6id: 25.4.4.1_A3.1_T1
 author: Sam Mikes
 description: Promise.all(3) returns Promise rejected with TypeError
+flags: [async]
 ---*/
 
 var nonIterable = 3;
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T2.js b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T2.js
index e046428242..b17b422697 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T2.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T2.js
@@ -10,6 +10,7 @@ info: >
 es6id: S25.4.4.1_A3.1_T2
 author: Sam Mikes
 description: Promise.all(new Error()) returns Promise rejected with TypeError
+flags: [async]
 ---*/
 
 Promise.all(new Error("abrupt")).then(function () {
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T3.js b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T3.js
index 568d5d1708..73b5230b43 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A3.1_T3.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A3.1_T3.js
@@ -9,6 +9,7 @@ es6id: S25.4.4.1_A3.1_T3
 author: Sam Mikes
 description: Promise.all((throw on GetIterator)) returns Promise rejected with TypeError
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterThrows = {};
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A5.1_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A5.1_T1.js
index 31acd2a6a3..1720f8ede7 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A5.1_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A5.1_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.4.1_A5.1_T1
 author: Sam Mikes
 description: iterator.next throws, causing Promise.all to reject
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterThrows = {};
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A6.1_T2.js b/test/built-ins/Promise/all/S25.4.4.1_A6.1_T2.js
index ef9f9dbe9c..3671b7bb15 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A6.1_T2.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A6.1_T2.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.4.1_A6.1_T2
 author: Sam Mikes
 description: Promise.all([]) returns a promise for an empty array
+flags: [async]
 ---*/
 
 var p = Promise.all([]);
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A7.1_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A7.1_T1.js
index cc1152b0e5..4b0636e0c3 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A7.1_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A7.1_T1.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.4.1_A6.1_T2
 author: Sam Mikes
 description: Promise.all([p1]) is resolved with a promise for a one-element array
+flags: [async]
 ---*/
 
 var p1 = Promise.resolve(3);
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A7.2_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A7.2_T1.js
index 10fd498955..2ce3ad82a9 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A7.2_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A7.2_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.4.1_A7.2_T1
 author: Sam Mikes
 description: Promise.all() accepts a one-element array
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A8.1_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A8.1_T1.js
index 7e3df638ec..d9e9cac5a0 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A8.1_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A8.1_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.1_A8.1_T1
 author: Sam Mikes
 description: Promise.all([p1, p2]) resolution functions are called in predictable sequence
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js b/test/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js
index 2bc4ba3635..e8f1320f71 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A8.2_T1.js
@@ -8,6 +8,7 @@ es6id: S25.4.4.1_A8.1_T1
 author: Sam Mikes
 description: Promise.all() rejects when a promise in its array rejects
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var rejectP1,
diff --git a/test/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js b/test/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
index fdd2d449ae..58151d1405 100644
--- a/test/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
+++ b/test/built-ins/Promise/all/S25.4.4.1_A8.2_T2.js
@@ -8,6 +8,7 @@ es6id: S25.4.4.1_A8.2_T2
 author: Sam Mikes
 description: Promise.all() rejects when second promise in array rejects
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var rejectP2,
diff --git a/test/built-ins/Promise/all/does-not-invoke-array-setters.js b/test/built-ins/Promise/all/does-not-invoke-array-setters.js
index baac7abebe..364204a8a6 100755
--- a/test/built-ins/Promise/all/does-not-invoke-array-setters.js
+++ b/test/built-ins/Promise/all/does-not-invoke-array-setters.js
@@ -24,6 +24,7 @@ info: >
       a. Let status be CreateDataProperty(array, ToString(n), e).
       b. Assert: status is true.
     ...
+flags: [async]
 ---*/
 
 Object.defineProperty(Array.prototype, 0, {
diff --git a/test/built-ins/Promise/all/invoke-resolve-get-error.js b/test/built-ins/Promise/all/invoke-resolve-get-error.js
index d7b7a092ca..70c220f0b9 100644
--- a/test/built-ins/Promise/all/invoke-resolve-get-error.js
+++ b/test/built-ins/Promise/all/invoke-resolve-get-error.js
@@ -21,6 +21,7 @@ info: >
         [...]
         i. Let nextPromise be Invoke(constructor, "resolve", «nextValue»).
         j. ReturnIfAbrupt(nextPromise ).
+flags: [async]
 ---*/
 
 var error = new Test262Error();
diff --git a/test/built-ins/Promise/all/invoke-then-error.js b/test/built-ins/Promise/all/invoke-then-error.js
index 957093f2b5..a3fef19b00 100644
--- a/test/built-ins/Promise/all/invoke-then-error.js
+++ b/test/built-ins/Promise/all/invoke-then-error.js
@@ -22,6 +22,7 @@ info: >
         r. Let result be Invoke(nextPromise, "then", «resolveElement,
            resultCapability.[[Reject]]»).
         s. ReturnIfAbrupt(result).
+flags: [async]
 ---*/
 
 var promise = new Promise(function() {});
diff --git a/test/built-ins/Promise/all/iter-next-val-err.js b/test/built-ins/Promise/all/iter-next-val-err.js
index 902e7823e8..20a4d8f8e2 100644
--- a/test/built-ins/Promise/all/iter-next-val-err.js
+++ b/test/built-ins/Promise/all/iter-next-val-err.js
@@ -24,6 +24,7 @@ info: >
            true.
         g. ReturnIfAbrupt(nextValue).
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterNextValThrows = {};
diff --git a/test/built-ins/Promise/all/iter-step-err.js b/test/built-ins/Promise/all/iter-step-err.js
index 6dcf6c7615..9ef1430b88 100644
--- a/test/built-ins/Promise/all/iter-step-err.js
+++ b/test/built-ins/Promise/all/iter-step-err.js
@@ -23,6 +23,7 @@ info: >
            true.
         c. ReturnIfAbrupt(next).
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterStepThrows = {};
diff --git a/test/built-ins/Promise/all/reject-deferred.js b/test/built-ins/Promise/all/reject-deferred.js
index 6b7d43a1ea..785fe8fdec 100644
--- a/test/built-ins/Promise/all/reject-deferred.js
+++ b/test/built-ins/Promise/all/reject-deferred.js
@@ -20,6 +20,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/all/reject-ignored-deferred.js b/test/built-ins/Promise/all/reject-ignored-deferred.js
index 874e1d40f4..aaf33eca18 100644
--- a/test/built-ins/Promise/all/reject-ignored-deferred.js
+++ b/test/built-ins/Promise/all/reject-ignored-deferred.js
@@ -25,6 +25,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var fulfiller = {
diff --git a/test/built-ins/Promise/all/reject-ignored-immed.js b/test/built-ins/Promise/all/reject-ignored-immed.js
index 6ef29d1c6b..9f3e190ca5 100644
--- a/test/built-ins/Promise/all/reject-ignored-immed.js
+++ b/test/built-ins/Promise/all/reject-ignored-immed.js
@@ -25,6 +25,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var fulfiller = {
diff --git a/test/built-ins/Promise/all/reject-immed.js b/test/built-ins/Promise/all/reject-immed.js
index ce7ff4c490..74560c7772 100644
--- a/test/built-ins/Promise/all/reject-immed.js
+++ b/test/built-ins/Promise/all/reject-immed.js
@@ -20,6 +20,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/all/resolve-non-thenable.js b/test/built-ins/Promise/all/resolve-non-thenable.js
index 659e10a219..0c2905a64b 100644
--- a/test/built-ins/Promise/all/resolve-non-thenable.js
+++ b/test/built-ins/Promise/all/resolve-non-thenable.js
@@ -31,6 +31,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var v1 = {};
diff --git a/test/built-ins/Promise/all/resolve-poisoned-then.js b/test/built-ins/Promise/all/resolve-poisoned-then.js
index b8a17cf4f6..0d4722e10d 100644
--- a/test/built-ins/Promise/all/resolve-poisoned-then.js
+++ b/test/built-ins/Promise/all/resolve-poisoned-then.js
@@ -40,6 +40,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/all/resolve-thenable.js b/test/built-ins/Promise/all/resolve-thenable.js
index 99b32585d8..4651422d0b 100644
--- a/test/built-ins/Promise/all/resolve-thenable.js
+++ b/test/built-ins/Promise/all/resolve-thenable.js
@@ -45,6 +45,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/exception-after-resolve-in-executor.js b/test/built-ins/Promise/exception-after-resolve-in-executor.js
index 747c562797..b5ae4ee5a8 100755
--- a/test/built-ins/Promise/exception-after-resolve-in-executor.js
+++ b/test/built-ins/Promise/exception-after-resolve-in-executor.js
@@ -15,6 +15,7 @@ info: >
     a. Let status be Call(resolvingFunctions.[[Reject]], undefined, «completion.[[value]]»).
     b. ReturnIfAbrupt(status).
   ...
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/exception-after-resolve-in-thenable-job.js b/test/built-ins/Promise/exception-after-resolve-in-thenable-job.js
index f10db969b1..3cd4585edc 100755
--- a/test/built-ins/Promise/exception-after-resolve-in-thenable-job.js
+++ b/test/built-ins/Promise/exception-after-resolve-in-thenable-job.js
@@ -14,6 +14,7 @@ info: >
     a. Let status be Call(resolvingFunctions.[[Reject]], undefined, «thenCallResult.[[value]]»)
     b. NextJob Completion(status).
   ...
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T1.js b/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T1.js
index 036905899f..6bfb34c1d4 100644
--- a/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T1.js
+++ b/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T1.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.5.1_A3.1_T1
 author: Sam Mikes
 description: catch is implemented in terms of then
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T2.js b/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T2.js
index a1624e1620..fd2cff8d2b 100644
--- a/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T2.js
+++ b/test/built-ins/Promise/prototype/catch/S25.4.5.1_A3.1_T2.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.5.1_A3.1_T2
 author: Sam Mikes
 description: catch is implemented in terms of then
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/S25.4.4_A1.1_T1.js b/test/built-ins/Promise/prototype/then/S25.4.4_A1.1_T1.js
index f248d345cc..a1c2edcc7e 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.4_A1.1_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.4_A1.1_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.2.1_A3.2_T2
 author: Sam Mikes
 description: Promise onResolved functions are called in predictable sequence
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T1.js b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T1.js
index 1daafe5527..33c1f555a5 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T1.js
@@ -10,6 +10,7 @@ es6id: S25.4.4_A2.1_T1
 author: Sam Mikes
 description: Promise onResolved functions are called in predictable sequence
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var resolveP1, rejectP2, sequence = [];
diff --git a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T2.js b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T2.js
index 8bebe81877..b5bf2c89e6 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T2.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T2.js
@@ -10,6 +10,7 @@ es6id: S25.4.4_A2.1_T2
 author: Sam Mikes
 description: Promise onResolved functions are called in predictable sequence
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var resolveP1, rejectP2, p1, p2,
diff --git a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T3.js b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T3.js
index 2476658a1f..17992e0011 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T3.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.4_A2.1_T3.js
@@ -10,6 +10,7 @@ es6id: S25.4.4_A2.1_T3
 author: Sam Mikes
 description: Promise onResolved functions are called in predictable sequence
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var resolveP1, rejectP2, p1, p2,
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T1.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T1.js
index 960604db5b..e70669dcfc 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T1.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.5.3_A4.1_T1
 author: Sam Mikes
 description: Promise.prototype.then accepts 'undefined' as arg1, arg2
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T2.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T2.js
index 3c817f4f8c..660cc633b3 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T2.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.1_T2.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.5.3_A4.1_T2
 author: Sam Mikes
 description: Promise.prototype.then accepts 'undefined' as arg1, arg2
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T1.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T1.js
index 978e1b52ab..76e1b6f4ec 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T1.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.5.3_A4.2_T1
 author: Sam Mikes
 description: Promise.prototype.then treats non-callable arg1, arg2 as undefined
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T2.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T2.js
index 41bec78e6b..37e3efb5b2 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T2.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A4.2_T2.js
@@ -8,6 +8,7 @@ info: >
 es6id: S25.4.5.3_A4.2_T2
 author: Sam Mikes
 description: Promise.prototype.then treats non-callable arg1, arg2 as undefined
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.1_T1.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.1_T1.js
index c10f534037..b97ae3fc9a 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.1_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.1_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.5.3_A5.1_T1
 author: Sam Mikes
 description: Promise.prototype.then enqueues handler if pending
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [],
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.2_T1.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.2_T1.js
index 46c05ad917..92ad8b82d4 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.2_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.2_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.5.3_A5.2_T1
 author: Sam Mikes
 description: Promise.prototype.then immediately queues handler if fulfilled
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [],
diff --git a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.3_T1.js b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.3_T1.js
index d41180713f..27c65f2692 100644
--- a/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.3_T1.js
+++ b/test/built-ins/Promise/prototype/then/S25.4.5.3_A5.3_T1.js
@@ -9,6 +9,7 @@ es6id: S25.4.5.3_A5.3_T1
 author: Sam Mikes
 description: Promise.prototype.then immediately queues handler if rejected
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [],
diff --git a/test/built-ins/Promise/prototype/then/deferred-is-resolved-value.js b/test/built-ins/Promise/prototype/then/deferred-is-resolved-value.js
index 62063fde45..4b471cd016 100755
--- a/test/built-ins/Promise/prototype/then/deferred-is-resolved-value.js
+++ b/test/built-ins/Promise/prototype/then/deferred-is-resolved-value.js
@@ -34,6 +34,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined, «handlerResult.[[value]]»).
     9. NextJob Completion(status).
 features: [class]
+flags: [async]
 ---*/
 
 var createBadPromise = false;
diff --git a/test/built-ins/Promise/prototype/then/prfm-fulfilled.js b/test/built-ins/Promise/prototype/then/prfm-fulfilled.js
index ac49fee03e..3d8ddee077 100644
--- a/test/built-ins/Promise/prototype/then/prfm-fulfilled.js
+++ b/test/built-ins/Promise/prototype/then/prfm-fulfilled.js
@@ -16,6 +16,7 @@ info: >
        b. Perform EnqueueJob("PromiseJobs", PromiseReactionJob,
           «fulfillReaction, value»).
     [...]
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js b/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
index b0d63c056e..94f4b14007 100644
--- a/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
+++ b/test/built-ins/Promise/prototype/then/prfm-pending-fulfulled.js
@@ -16,6 +16,7 @@ info: >
        b. Append rejectReaction as the last element of the List that is the
           value of promise's [[PromiseRejectReactions]] internal slot.
     [...]
+flags: [async]
 ---*/
 
 var 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
index 23afce4b32..083df48d76 100644
--- a/test/built-ins/Promise/prototype/then/prfm-pending-rejected.js
+++ b/test/built-ins/Promise/prototype/then/prfm-pending-rejected.js
@@ -16,6 +16,7 @@ info: >
        b. Append rejectReaction as the last element of the List that is the
           value of promise's [[PromiseRejectReactions]] internal slot.
     [...]
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/prfm-rejected.js b/test/built-ins/Promise/prototype/then/prfm-rejected.js
index 727eea81f1..6e91adcda0 100644
--- a/test/built-ins/Promise/prototype/then/prfm-rejected.js
+++ b/test/built-ins/Promise/prototype/then/prfm-rejected.js
@@ -16,6 +16,7 @@ info: >
        b. Perform EnqueueJob("PromiseJobs", PromiseReactionJob,
           «rejectReaction, reason»).
     [...]
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/reject-pending-fulfilled.js b/test/built-ins/Promise/prototype/then/reject-pending-fulfilled.js
index f89ea8a8a8..07584596ed 100644
--- a/test/built-ins/Promise/prototype/then/reject-pending-fulfilled.js
+++ b/test/built-ins/Promise/prototype/then/reject-pending-fulfilled.js
@@ -18,6 +18,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var resolve;
diff --git a/test/built-ins/Promise/prototype/then/reject-pending-rejected.js b/test/built-ins/Promise/prototype/then/reject-pending-rejected.js
index fee4066199..bcbca0d1af 100644
--- a/test/built-ins/Promise/prototype/then/reject-pending-rejected.js
+++ b/test/built-ins/Promise/prototype/then/reject-pending-rejected.js
@@ -19,6 +19,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var reject;
diff --git a/test/built-ins/Promise/prototype/then/reject-settled-fulfilled.js b/test/built-ins/Promise/prototype/then/reject-settled-fulfilled.js
index bc638eaf51..32a0a6a3b1 100644
--- a/test/built-ins/Promise/prototype/then/reject-settled-fulfilled.js
+++ b/test/built-ins/Promise/prototype/then/reject-settled-fulfilled.js
@@ -26,6 +26,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = new Promise(function(resolve) { resolve(); });
diff --git a/test/built-ins/Promise/prototype/then/reject-settled-rejected.js b/test/built-ins/Promise/prototype/then/reject-settled-rejected.js
index 487b94444c..042fa25594 100644
--- a/test/built-ins/Promise/prototype/then/reject-settled-rejected.js
+++ b/test/built-ins/Promise/prototype/then/reject-settled-rejected.js
@@ -26,6 +26,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = new Promise(function(resolve) { resolve(); });
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-obj.js b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-obj.js
index 65f95ba0b6..fde854afa6 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-obj.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-obj.js
@@ -18,6 +18,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var resolve;
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-thenable.js b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-thenable.js
index 8012d94a7d..e2ecdf7b7e 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-non-thenable.js
@@ -23,6 +23,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-poisoned-then.js b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-poisoned-then.js
index 9abf9511e3..1d050c6a31 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-poisoned-then.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-poisoned-then.js
@@ -20,6 +20,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-self.js b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-self.js
index 9a2f1da696..e588fe9405 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-self.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-self.js
@@ -20,6 +20,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var resolve;
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-thenable.js b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-thenable.js
index a6153bc8f1..de26a13259 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-fulfilled-thenable.js
@@ -25,6 +25,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-obj.js b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-obj.js
index 576cdf0067..0bbf700b0d 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-obj.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-obj.js
@@ -19,6 +19,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var reject;
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-thenable.js b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-thenable.js
index 95191b0b88..4087ddfee7 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-non-thenable.js
@@ -24,6 +24,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-poisoned-then.js b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-poisoned-then.js
index f7808d038d..db166e8063 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-poisoned-then.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-poisoned-then.js
@@ -21,6 +21,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-self.js b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-self.js
index 87937e398c..e30f32ec63 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-self.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-self.js
@@ -21,6 +21,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var reject;
diff --git a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-thenable.js b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-thenable.js
index bb33553bd9..1ebbfbcb00 100644
--- a/test/built-ins/Promise/prototype/then/resolve-pending-rejected-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-pending-rejected-thenable.js
@@ -26,6 +26,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-obj.js b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-obj.js
index 35e9e3f7fa..3f39485e50 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-obj.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-obj.js
@@ -25,6 +25,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var p1 = new Promise(function(resolve) { resolve(); });
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-thenable.js b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-thenable.js
index 07c40145a5..1166af3a7a 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-non-thenable.js
@@ -30,6 +30,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-poisoned-then.js b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-poisoned-then.js
index ef5a9e0834..9254f36e16 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-poisoned-then.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-poisoned-then.js
@@ -27,6 +27,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-self.js b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-self.js
index d97a348c2b..ac26302473 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-self.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-self.js
@@ -27,6 +27,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var p1 = new Promise(function(resolve) { resolve(); });
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-thenable.js b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-thenable.js
index 86691de55c..447c248b5f 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-fulfilled-thenable.js
@@ -32,6 +32,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-obj.js b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-obj.js
index f9151850dc..bd1ccb9504 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-obj.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-obj.js
@@ -25,6 +25,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var p1 = new Promise(function(_, reject) { reject(); });
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-thenable.js b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-thenable.js
index 421376088f..92c48e7b88 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-non-thenable.js
@@ -30,6 +30,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-poisoned-then.js b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-poisoned-then.js
index 785f557b7b..b276b27ac0 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-poisoned-then.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-poisoned-then.js
@@ -27,6 +27,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-self.js b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-self.js
index cfdf3e4b0a..5aa5d6a2ee 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-self.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-self.js
@@ -27,6 +27,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var p1 = new Promise(function(_, reject) { reject(); });
diff --git a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-thenable.js b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-thenable.js
index 9d1ee3f629..65656f39f1 100644
--- a/test/built-ins/Promise/prototype/then/resolve-settled-rejected-thenable.js
+++ b/test/built-ins/Promise/prototype/then/resolve-settled-rejected-thenable.js
@@ -32,6 +32,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-nonstrict.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-nonstrict.js
index c149da931a..7861def381 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-nonstrict.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-nonstrict.js
@@ -9,7 +9,7 @@ es6id: S25.4.2.1_A3.1_T1
 author: Sam Mikes
 description: >
     "fulfilled" handler invoked correctly outside of strict mode
-flags: [noStrict]
+flags: [async, noStrict]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-strict.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-strict.js
index 33068c06e4..fef11c32c0 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-strict.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-invoke-strict.js
@@ -9,7 +9,7 @@ es6id: S25.4.2.1_A3.1_T2
 author: Sam Mikes
 description: >
     "fulfilled" handler invoked correctly in strict mode
-flags: [onlyStrict]
+flags: [async, onlyStrict]
 ---*/
 
 var expectedThis = undefined,
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next-abrupt.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next-abrupt.js
index 00d6aeff04..06816900d4 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next-abrupt.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next-abrupt.js
@@ -12,6 +12,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var promise = new Promise(function(resolve) {
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next.js
index 1443459a16..287036209f 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-next.js
@@ -12,6 +12,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var promise = new Promise(function(resolve) {
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-abrupt.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-abrupt.js
index 429c3171f5..88ad121f22 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-abrupt.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-abrupt.js
@@ -25,6 +25,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-normal.js b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-normal.js
index 4437d5fb73..752068bc41 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-normal.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-fulfilled-return-normal.js
@@ -25,6 +25,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-identity.js b/test/built-ins/Promise/prototype/then/rxn-handler-identity.js
index 6230f9c9be..1537319457 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-identity.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-identity.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.2.1_A1.1_T1
 author: Sam Mikes
 description: argument passes through "Identity"
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-nonstrict.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-nonstrict.js
index ee2bff3722..d01480d0c9 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-nonstrict.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-nonstrict.js
@@ -9,7 +9,7 @@ es6id: S25.4.2.1_A3.2_T1
 author: Sam Mikes
 description: >
     "rejected" handler invoked correctly outside of strict mode
-flags: [noStrict]
+flags: [async, noStrict]
 includes: [fnGlobalObject.js]
 ---*/
 
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-strict.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-strict.js
index c782ddb9d0..116ea1a141 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-strict.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-invoke-strict.js
@@ -9,7 +9,7 @@ es6id: S25.4.2.1_A3.2_T2
 author: Sam Mikes
 description: >
     "rejected" handler invoked correctly in strict mode
-flags: [onlyStrict]
+flags: [async, onlyStrict]
 ---*/
 
 var expectedThis = undefined,
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next-abrupt.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next-abrupt.js
index 6c3d18b40d..f217bddcbc 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next-abrupt.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next-abrupt.js
@@ -12,6 +12,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var promise = new Promise(function(_, reject) {
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next.js
index 59a3916b3a..9ab10d84af 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-next.js
@@ -12,6 +12,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var promise = new Promise(function(_, reject) {
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-abrupt.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-abrupt.js
index 5b95a5a042..857e0b6e82 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-abrupt.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-abrupt.js
@@ -25,6 +25,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-normal.js b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-normal.js
index 1277801c50..80adf6382f 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-normal.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-rejected-return-normal.js
@@ -25,6 +25,7 @@ info: >
     8. Let status be Call(promiseCapability.[[Resolve]], undefined,
        «handlerResult.[[value]]»).
     9. NextJob Completion(status).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/prototype/then/rxn-handler-thrower.js b/test/built-ins/Promise/prototype/then/rxn-handler-thrower.js
index 437792f970..d2d9cacd8e 100644
--- a/test/built-ins/Promise/prototype/then/rxn-handler-thrower.js
+++ b/test/built-ins/Promise/prototype/then/rxn-handler-thrower.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.2.1_A2.1_T1
 author: Sam Mikes
 description: argument thrown through "Thrower"
+flags: [async]
 ---*/
 
 var obj = {};
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T1.js
index 70e2f001be..87a7c610a3 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T1.js
@@ -6,6 +6,7 @@ info: Promise.race rejects on non-iterable argument
 es6id: S25.4.4.3_A2.2_T1
 author: Sam Mikes
 description: Promise.race rejects if argument is not object or is non-iterable
+flags: [async]
 ---*/
 
 var nonIterable = 3;
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T2.js b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T2.js
index e4188ee458..cca9307220 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T2.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T2.js
@@ -6,6 +6,7 @@ info: Promise.race rejects on non-iterable argument
 es6id: S25.4.4.3_A2.2_T2
 author: Sam Mikes
 description: Promise.race rejects if argument is not object or is non-iterable
+flags: [async]
 ---*/
 
 Promise.race(new Error("abrupt")).then(function () {
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T3.js b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T3.js
index 1714b4f184..464d621358 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A2.2_T3.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A2.2_T3.js
@@ -10,6 +10,7 @@ es6id: S25.4.4.3_A2.2_T3
 author: Sam Mikes
 description: Promise.race rejects if GetIterator throws
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterThrows = {};
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A4.1_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A4.1_T1.js
index e6228c3739..a325a995be 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A4.1_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A4.1_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A4.1_T1
 author: Sam Mikes
 description: Promise.race rejects if IteratorStep throws
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterThrows = {};
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A4.1_T2.js b/test/built-ins/Promise/race/S25.4.4.3_A4.1_T2.js
index b3158a1e3e..00ac77d1b3 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A4.1_T2.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A4.1_T2.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A4.1_T2
 author: Sam Mikes
 description: Promise.race rejects if IteratorStep throws
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterThrows = {};
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A5.1_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A5.1_T1.js
index cc9042d2a7..e5b7526fde 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A5.1_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A5.1_T1.js
@@ -5,6 +5,7 @@
 es6id: S25.4.4.3_A5.1_T1
 author: Sam Mikes
 description: Promise.race([]) never settles
+flags: [async]
 ---*/
 
 var p = Promise.race([]);
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A6.1_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A6.1_T1.js
index e3a8cb6088..99c327c5ce 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A6.1_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A6.1_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A6.1_T1
 author: Sam Mikes
 description: Promise.race([1]) settles immediately
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A6.2_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A6.2_T1.js
index 35b71d966b..93468f8693 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A6.2_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A6.2_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A6.2_T1
 author: Sam Mikes
 description: Promise.race([p1]) settles immediately
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T1.js
index 8e5636a79f..9f0848429f 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A7.1_T1
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T2.js b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T2.js
index a07716d6b1..6f4030d7d4 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T2.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T2.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A7.1_T2
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T3.js b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T3.js
index 941d794743..047dd65d27 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.1_T3.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.1_T3.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A7.1_T3
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.2_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A7.2_T1.js
index 6dbf6fc956..fbbdcf95ee 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.2_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.2_T1.js
@@ -6,6 +6,7 @@ es6id: S25.4.4.3_A7.2_T1
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.3_T1.js b/test/built-ins/Promise/race/S25.4.4.3_A7.3_T1.js
index aedf18bfec..02dad7f9df 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.3_T1.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.3_T1.js
@@ -5,6 +5,7 @@
 es6id: S25.4.4.3_A7.3_T1
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
+flags: [async]
 ---*/
 
 var resolveP1, rejectP2,
diff --git a/test/built-ins/Promise/race/S25.4.4.3_A7.3_T2.js b/test/built-ins/Promise/race/S25.4.4.3_A7.3_T2.js
index 8609e5dd79..535116ea19 100644
--- a/test/built-ins/Promise/race/S25.4.4.3_A7.3_T2.js
+++ b/test/built-ins/Promise/race/S25.4.4.3_A7.3_T2.js
@@ -5,6 +5,7 @@
 es6id: S25.4.4.3_A7.3_T2
 author: Sam Mikes
 description: Promise.race([p1, p2]) settles when first settles
+flags: [async]
 ---*/
 
 var resolveP1, rejectP2,
diff --git a/test/built-ins/Promise/race/invoke-resolve-get-error.js b/test/built-ins/Promise/race/invoke-resolve-get-error.js
index 2ed029d5e9..9fa2dc6ad4 100644
--- a/test/built-ins/Promise/race/invoke-resolve-get-error.js
+++ b/test/built-ins/Promise/race/invoke-resolve-get-error.js
@@ -20,6 +20,7 @@ info: >
         [...]
         h. Let nextPromise be Invoke(C, "resolve", «nextValue»).
         i. ReturnIfAbrupt(nextPromise).
+flags: [async]
 ---*/
 
 var error = new Test262Error();
diff --git a/test/built-ins/Promise/race/invoke-then-error.js b/test/built-ins/Promise/race/invoke-then-error.js
index b2f79f5343..184e3ea5b1 100644
--- a/test/built-ins/Promise/race/invoke-then-error.js
+++ b/test/built-ins/Promise/race/invoke-then-error.js
@@ -21,6 +21,7 @@ info: >
         j. Let result be Invoke(nextPromise, "then",
            «promiseCapability.[[Resolve]], promiseCapability.[[Reject]]»).
         k. ReturnIfAbrupt(result).
+flags: [async]
 ---*/
 
 var promise = new Promise(function() {});
diff --git a/test/built-ins/Promise/race/iter-close.js b/test/built-ins/Promise/race/iter-close.js
index 02858893aa..f66dc68c3c 100644
--- a/test/built-ins/Promise/race/iter-close.js
+++ b/test/built-ins/Promise/race/iter-close.js
@@ -20,6 +20,7 @@ info: >
        h. Let nextPromise be Invoke(C, "resolve", «nextValue»).
        i. ReturnIfAbrupt(nextPromise).
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var err = new Test262Error();
diff --git a/test/built-ins/Promise/race/iter-next-val-err.js b/test/built-ins/Promise/race/iter-next-val-err.js
index eca773a9e6..dfa2177a97 100644
--- a/test/built-ins/Promise/race/iter-next-val-err.js
+++ b/test/built-ins/Promise/race/iter-next-val-err.js
@@ -23,6 +23,7 @@ info: >
            true.
         g. ReturnIfAbrupt(nextValue).
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterNextValThrows = {};
diff --git a/test/built-ins/Promise/race/iter-step-err.js b/test/built-ins/Promise/race/iter-step-err.js
index e248475500..d7dfd34d31 100644
--- a/test/built-ins/Promise/race/iter-step-err.js
+++ b/test/built-ins/Promise/race/iter-step-err.js
@@ -19,6 +19,7 @@ info: >
        b. If next is an abrupt completion, set iteratorRecord.[[done]] to true.
        c. ReturnIfAbrupt(next).
 features: [Symbol.iterator]
+flags: [async]
 ---*/
 
 var iterStepThrows = {};
diff --git a/test/built-ins/Promise/race/reject-deferred.js b/test/built-ins/Promise/race/reject-deferred.js
index e070cef6e2..5c7d7cd0d5 100644
--- a/test/built-ins/Promise/race/reject-deferred.js
+++ b/test/built-ins/Promise/race/reject-deferred.js
@@ -19,6 +19,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/race/reject-ignored-deferred.js b/test/built-ins/Promise/race/reject-ignored-deferred.js
index bf63e7328b..4ebc4ac799 100644
--- a/test/built-ins/Promise/race/reject-ignored-deferred.js
+++ b/test/built-ins/Promise/race/reject-ignored-deferred.js
@@ -24,6 +24,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var fulfiller = {
diff --git a/test/built-ins/Promise/race/reject-ignored-immed.js b/test/built-ins/Promise/race/reject-ignored-immed.js
index a22eac484f..c1b0885dca 100644
--- a/test/built-ins/Promise/race/reject-ignored-immed.js
+++ b/test/built-ins/Promise/race/reject-ignored-immed.js
@@ -24,6 +24,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var fulfiller = {
diff --git a/test/built-ins/Promise/race/reject-immed.js b/test/built-ins/Promise/race/reject-immed.js
index 4cfc9a925f..fd1e645776 100644
--- a/test/built-ins/Promise/race/reject-immed.js
+++ b/test/built-ins/Promise/race/reject-immed.js
@@ -19,6 +19,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/race/resolve-non-obj.js b/test/built-ins/Promise/race/resolve-non-obj.js
index 6dfd31a9cb..6b39a974ab 100644
--- a/test/built-ins/Promise/race/resolve-non-obj.js
+++ b/test/built-ins/Promise/race/resolve-non-obj.js
@@ -20,6 +20,7 @@ info: >
     [...]
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var thenable = {
diff --git a/test/built-ins/Promise/race/resolve-non-thenable.js b/test/built-ins/Promise/race/resolve-non-thenable.js
index 179ab43445..e5b8671e48 100644
--- a/test/built-ins/Promise/race/resolve-non-thenable.js
+++ b/test/built-ins/Promise/race/resolve-non-thenable.js
@@ -24,6 +24,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/race/resolve-poisoned-then.js b/test/built-ins/Promise/race/resolve-poisoned-then.js
index c25563dad4..1d3470afee 100644
--- a/test/built-ins/Promise/race/resolve-poisoned-then.js
+++ b/test/built-ins/Promise/race/resolve-poisoned-then.js
@@ -20,6 +20,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/race/resolve-self.js b/test/built-ins/Promise/race/resolve-self.js
index 511a03200a..9bf40fc474 100644
--- a/test/built-ins/Promise/race/resolve-self.js
+++ b/test/built-ins/Promise/race/resolve-self.js
@@ -20,6 +20,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var self, resolve;
diff --git a/test/built-ins/Promise/race/resolve-thenable.js b/test/built-ins/Promise/race/resolve-thenable.js
index 8eb3f059c6..c1512d9c5d 100644
--- a/test/built-ins/Promise/race/resolve-thenable.js
+++ b/test/built-ins/Promise/race/resolve-thenable.js
@@ -26,6 +26,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/reject-ignored-via-abrupt.js b/test/built-ins/Promise/reject-ignored-via-abrupt.js
index f3cb6c7a77..23848a79dd 100644
--- a/test/built-ins/Promise/reject-ignored-via-abrupt.js
+++ b/test/built-ins/Promise/reject-ignored-via-abrupt.js
@@ -18,6 +18,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject-ignored-via-fn-deferred.js b/test/built-ins/Promise/reject-ignored-via-fn-deferred.js
index 10b0d81e03..117722fa14 100644
--- a/test/built-ins/Promise/reject-ignored-via-fn-deferred.js
+++ b/test/built-ins/Promise/reject-ignored-via-fn-deferred.js
@@ -18,6 +18,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject-ignored-via-fn-immed.js b/test/built-ins/Promise/reject-ignored-via-fn-immed.js
index bd856a342f..1e97f5d917 100644
--- a/test/built-ins/Promise/reject-ignored-via-fn-immed.js
+++ b/test/built-ins/Promise/reject-ignored-via-fn-immed.js
@@ -18,6 +18,7 @@ info: >
     3. Let alreadyResolved be the value of F's [[AlreadyResolved]] internal
        slot.
     4. If alreadyResolved.[[value]] is true, return undefined.
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject-via-abrupt.js b/test/built-ins/Promise/reject-via-abrupt.js
index 6e608bdc22..2916102000 100644
--- a/test/built-ins/Promise/reject-via-abrupt.js
+++ b/test/built-ins/Promise/reject-via-abrupt.js
@@ -16,6 +16,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject-via-fn-deferred.js b/test/built-ins/Promise/reject-via-fn-deferred.js
index 855d92b410..fca3fcafcb 100644
--- a/test/built-ins/Promise/reject-via-fn-deferred.js
+++ b/test/built-ins/Promise/reject-via-fn-deferred.js
@@ -14,6 +14,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject-via-fn-immed.js b/test/built-ins/Promise/reject-via-fn-immed.js
index 474db80d8b..26e841f7f0 100644
--- a/test/built-ins/Promise/reject-via-fn-immed.js
+++ b/test/built-ins/Promise/reject-via-fn-immed.js
@@ -14,6 +14,7 @@ info: >
     25.4.1.3.1 Promise Reject Functions
     [...]
     6. Return RejectPromise(promise, reason).
+flags: [async]
 ---*/
 
 var thenable = new Promise(function() {});
diff --git a/test/built-ins/Promise/reject/S25.4.4.4_A2.1_T1.js b/test/built-ins/Promise/reject/S25.4.4.4_A2.1_T1.js
index bc589ac13f..0b189e52ae 100644
--- a/test/built-ins/Promise/reject/S25.4.4.4_A2.1_T1.js
+++ b/test/built-ins/Promise/reject/S25.4.4.4_A2.1_T1.js
@@ -13,6 +13,7 @@ info: >
 es6id: 25.4.4.4
 author: Sam Mikes
 description: Promise.reject creates a new settled promise
+flags: [async]
 ---*/
 
 var p = Promise.reject(3);
diff --git a/test/built-ins/Promise/resolve-non-obj-deferred.js b/test/built-ins/Promise/resolve-non-obj-deferred.js
index 2516dbd418..8e099a4723 100644
--- a/test/built-ins/Promise/resolve-non-obj-deferred.js
+++ b/test/built-ins/Promise/resolve-non-obj-deferred.js
@@ -13,6 +13,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var resolve;
diff --git a/test/built-ins/Promise/resolve-non-obj-immed.js b/test/built-ins/Promise/resolve-non-obj-immed.js
index 163a1938f9..5f65561008 100644
--- a/test/built-ins/Promise/resolve-non-obj-immed.js
+++ b/test/built-ins/Promise/resolve-non-obj-immed.js
@@ -12,6 +12,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var promise = new Promise(function(resolve) {
diff --git a/test/built-ins/Promise/resolve-non-thenable-deferred.js b/test/built-ins/Promise/resolve-non-thenable-deferred.js
index a6ed852420..d3b93474a7 100644
--- a/test/built-ins/Promise/resolve-non-thenable-deferred.js
+++ b/test/built-ins/Promise/resolve-non-thenable-deferred.js
@@ -18,6 +18,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/resolve-non-thenable-immed.js b/test/built-ins/Promise/resolve-non-thenable-immed.js
index ae02361404..74161789f1 100644
--- a/test/built-ins/Promise/resolve-non-thenable-immed.js
+++ b/test/built-ins/Promise/resolve-non-thenable-immed.js
@@ -18,6 +18,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var nonThenable = { then: null };
diff --git a/test/built-ins/Promise/resolve-poisoned-then-deferred.js b/test/built-ins/Promise/resolve-poisoned-then-deferred.js
index 33c2b78469..d043a5ddd4 100644
--- a/test/built-ins/Promise/resolve-poisoned-then-deferred.js
+++ b/test/built-ins/Promise/resolve-poisoned-then-deferred.js
@@ -14,6 +14,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve-poisoned-then-immed.js b/test/built-ins/Promise/resolve-poisoned-then-immed.js
index ec806a2359..90c678e496 100644
--- a/test/built-ins/Promise/resolve-poisoned-then-immed.js
+++ b/test/built-ins/Promise/resolve-poisoned-then-immed.js
@@ -14,6 +14,7 @@ info: >
     25.4.1.3.2 Promise Resolve Functions
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve-self.js b/test/built-ins/Promise/resolve-self.js
index 9425d42b5b..cd9d988ac1 100644
--- a/test/built-ins/Promise/resolve-self.js
+++ b/test/built-ins/Promise/resolve-self.js
@@ -14,6 +14,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var resolve;
diff --git a/test/built-ins/Promise/resolve-thenable-deferred.js b/test/built-ins/Promise/resolve-thenable-deferred.js
index 93dfab0e53..cd572d1a84 100644
--- a/test/built-ins/Promise/resolve-thenable-deferred.js
+++ b/test/built-ins/Promise/resolve-thenable-deferred.js
@@ -21,6 +21,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve-thenable-immed.js b/test/built-ins/Promise/resolve-thenable-immed.js
index c39f9aff68..f0412ed71a 100644
--- a/test/built-ins/Promise/resolve-thenable-immed.js
+++ b/test/built-ins/Promise/resolve-thenable-immed.js
@@ -20,6 +20,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve/S25.4.4.5_A2.2_T1.js b/test/built-ins/Promise/resolve/S25.4.4.5_A2.2_T1.js
index 1ab3f41cd1..2b471179fc 100644
--- a/test/built-ins/Promise/resolve/S25.4.4.5_A2.2_T1.js
+++ b/test/built-ins/Promise/resolve/S25.4.4.5_A2.2_T1.js
@@ -5,6 +5,7 @@
 es6id: S25.4.4.5_A2.2_T1
 author: Sam Mikes
 description: Promise.resolve passes through an unsettled promise w/ same Constructor
+flags: [async]
 ---*/
 
 var resolveP1,
diff --git a/test/built-ins/Promise/resolve/S25.4.4.5_A2.3_T1.js b/test/built-ins/Promise/resolve/S25.4.4.5_A2.3_T1.js
index a54c21ede0..3ea901fc83 100644
--- a/test/built-ins/Promise/resolve/S25.4.4.5_A2.3_T1.js
+++ b/test/built-ins/Promise/resolve/S25.4.4.5_A2.3_T1.js
@@ -5,6 +5,7 @@
 es6id: S25.4.4.5_A2.3_T1
 author: Sam Mikes
 description: Promise.resolve passes through an unsettled promise w/ same Constructor
+flags: [async]
 ---*/
 
 var rejectP1,
diff --git a/test/built-ins/Promise/resolve/S25.4.4.5_A3.1_T1.js b/test/built-ins/Promise/resolve/S25.4.4.5_A3.1_T1.js
index 8fbc2befb1..e76d00a3d9 100644
--- a/test/built-ins/Promise/resolve/S25.4.4.5_A3.1_T1.js
+++ b/test/built-ins/Promise/resolve/S25.4.4.5_A3.1_T1.js
@@ -8,6 +8,7 @@ es6id: S25.4.4.5_A3.1_T1
 author: Sam Mikes
 description: Promise.resolve delegates to foreign thenable
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/resolve/S25.4.4.5_A4.1_T1.js b/test/built-ins/Promise/resolve/S25.4.4.5_A4.1_T1.js
index aa11bf0125..f6dd291860 100644
--- a/test/built-ins/Promise/resolve/S25.4.4.5_A4.1_T1.js
+++ b/test/built-ins/Promise/resolve/S25.4.4.5_A4.1_T1.js
@@ -7,6 +7,7 @@ info: >
 es6id: S25.4.4.5_A3.1_T1
 author: Sam Mikes
 description: self-resolved Promise throws TypeError
+flags: [async]
 ---*/
 
 var resolveP,
diff --git a/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js b/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
index aa00db6890..bf0f2d6d28 100644
--- a/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
+++ b/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_1.js
@@ -8,6 +8,7 @@ es6id: S25.4.4.5
 author: Sam Mikes
 description: Promise.resolve delegates to foreign thenable
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_2.js b/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_2.js
index 074d0aaca1..b4c0c3ec6b 100644
--- a/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_2.js
+++ b/test/built-ins/Promise/resolve/S25.Promise_resolve_foreign_thenable_2.js
@@ -8,6 +8,7 @@ es6id: S25.4.4.5
 author: Sam Mikes
 description: Promise.resolve delegates to foreign thenable
 includes: [PromiseHelper.js]
+flags: [async]
 ---*/
 
 var sequence = [];
diff --git a/test/built-ins/Promise/resolve/arg-non-thenable.js b/test/built-ins/Promise/resolve/arg-non-thenable.js
index 2aa032efac..12d7beae67 100644
--- a/test/built-ins/Promise/resolve/arg-non-thenable.js
+++ b/test/built-ins/Promise/resolve/arg-non-thenable.js
@@ -18,6 +18,7 @@ info: >
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
     13. Return undefined.
+flags: [async]
 ---*/
 
 var nonThenable = {
diff --git a/test/built-ins/Promise/resolve/arg-poisoned-then.js b/test/built-ins/Promise/resolve/arg-poisoned-then.js
index 085e1455a7..4564314572 100644
--- a/test/built-ins/Promise/resolve/arg-poisoned-then.js
+++ b/test/built-ins/Promise/resolve/arg-poisoned-then.js
@@ -16,6 +16,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var poisonedThen = {};
diff --git a/test/built-ins/Promise/resolve/resolve-non-obj.js b/test/built-ins/Promise/resolve/resolve-non-obj.js
index 9a99e4d1f5..5ec758cf37 100644
--- a/test/built-ins/Promise/resolve/resolve-non-obj.js
+++ b/test/built-ins/Promise/resolve/resolve-non-obj.js
@@ -13,6 +13,7 @@ info: >
     [...]
     7. If Type(resolution) is not Object, then
        a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 Promise.resolve(23).then(function(value) {
diff --git a/test/built-ins/Promise/resolve/resolve-non-thenable.js b/test/built-ins/Promise/resolve/resolve-non-thenable.js
index 446f0f9920..3b6ed6b938 100644
--- a/test/built-ins/Promise/resolve/resolve-non-thenable.js
+++ b/test/built-ins/Promise/resolve/resolve-non-thenable.js
@@ -17,6 +17,7 @@ info: >
     10. Let thenAction be then.[[value]].
     11. If IsCallable(thenAction) is false, then
         a. Return FulfillPromise(promise, resolution).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve/resolve-poisoned-then.js b/test/built-ins/Promise/resolve/resolve-poisoned-then.js
index 8ada16e332..28983a300e 100644
--- a/test/built-ins/Promise/resolve/resolve-poisoned-then.js
+++ b/test/built-ins/Promise/resolve/resolve-poisoned-then.js
@@ -14,6 +14,7 @@ info: >
     8. Let then be Get(resolution, "then").
     9. If then is an abrupt completion, then
        a. Return RejectPromise(promise, then.[[value]]).
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/test/built-ins/Promise/resolve/resolve-self.js b/test/built-ins/Promise/resolve/resolve-self.js
index a9b9b73c48..dded4ecd96 100644
--- a/test/built-ins/Promise/resolve/resolve-self.js
+++ b/test/built-ins/Promise/resolve/resolve-self.js
@@ -17,6 +17,7 @@ info: >
     6. If SameValue(resolution, promise) is true, then
        a. Let selfResolutionError be a newly created TypeError object.
        b. Return RejectPromise(promise, selfResolutionError).
+flags: [async]
 ---*/
 
 var resolve, reject;
diff --git a/test/built-ins/Promise/resolve/resolve-thenable.js b/test/built-ins/Promise/resolve/resolve-thenable.js
index 62b061b2ee..a3f81944c1 100644
--- a/test/built-ins/Promise/resolve/resolve-thenable.js
+++ b/test/built-ins/Promise/resolve/resolve-thenable.js
@@ -19,6 +19,7 @@ info: >
         [...]
     12. Perform EnqueueJob ("PromiseJobs", PromiseResolveThenableJob,
         «promise, resolution, thenAction»)
+flags: [async]
 ---*/
 
 var value = {};
diff --git a/tools/packaging/test262.py b/tools/packaging/test262.py
index 1192005fc9..551d6d3e02 100755
--- a/tools/packaging/test262.py
+++ b/tools/packaging/test262.py
@@ -309,7 +309,7 @@ class TestCase(object):
     return 'raw' in self.testRecord
 
   def IsAsyncTest(self):
-    return '$DONE' in self.test
+    return 'async' in self.testRecord
 
   def GetIncludeList(self):
     if self.testRecord.get('includes'):
-- 
GitLab