mirror of https://github.com/tc39/test262.git
Harness tests for asyncHelpers.js' asyncTest function
This commit is contained in:
parent
c056d31b9b
commit
cb9b45ded2
|
@ -0,0 +1,16 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper reports synchronous errors via $DONE.
|
||||||
|
includes: [asyncHelpers.js]
|
||||||
|
---*/
|
||||||
|
var called = false;
|
||||||
|
function $DONE(error) {
|
||||||
|
called = true;
|
||||||
|
assert(error instanceof Test262Error);
|
||||||
|
}
|
||||||
|
asyncTest(function () {
|
||||||
|
throw new Test262Error("Should not be evaluated");
|
||||||
|
});
|
||||||
|
assert(called, "asyncTest called $DONE with a synchronously thrown error");
|
|
@ -0,0 +1,19 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper rejects non-callable test functions.
|
||||||
|
includes: [asyncHelpers.js, compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const doneValues = [];
|
||||||
|
function $DONE(error) {
|
||||||
|
doneValues.push(error instanceof Test262Error);
|
||||||
|
}
|
||||||
|
asyncTest(null);
|
||||||
|
asyncTest({});
|
||||||
|
asyncTest("string");
|
||||||
|
asyncTest(42);
|
||||||
|
asyncTest(undefined);
|
||||||
|
asyncTest();
|
||||||
|
assert.compareArray(doneValues, [true, true, true, true, true, true]);
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper rejects test functions that do not return a thenable.
|
||||||
|
includes: [asyncHelpers.js, compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
const doneValues = [];
|
||||||
|
function $DONE(error) {
|
||||||
|
doneValues.push(error instanceof TypeError);
|
||||||
|
}
|
||||||
|
asyncTest(function () {
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
asyncTest(function () {
|
||||||
|
return {};
|
||||||
|
});
|
||||||
|
asyncTest(function () {
|
||||||
|
return "string";
|
||||||
|
});
|
||||||
|
asyncTest(function () {
|
||||||
|
return 42;
|
||||||
|
});
|
||||||
|
asyncTest(function () {});
|
||||||
|
asyncTest(function () {
|
||||||
|
return function () {};
|
||||||
|
});
|
||||||
|
assert.compareArray(doneValues, [true, true, true, true, true, true]);
|
|
@ -0,0 +1,45 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper when called with async flag always returns a promise that resolves to undefined.
|
||||||
|
flags: [async]
|
||||||
|
includes: [asyncHelpers.js]
|
||||||
|
---*/
|
||||||
|
var realDone = $DONE;
|
||||||
|
var doneCalls = 0;
|
||||||
|
globalThis.$DONE = function () {
|
||||||
|
doneCalls++;
|
||||||
|
};
|
||||||
|
|
||||||
|
async function assertPromiseUndefined(returnedPromise) {
|
||||||
|
assert(
|
||||||
|
returnedPromise instanceof Promise,
|
||||||
|
"returned value should be a Promise"
|
||||||
|
);
|
||||||
|
assert.sameValue(
|
||||||
|
await returnedPromise,
|
||||||
|
undefined,
|
||||||
|
"returned Promise should resolve to undefined"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
await assertPromiseUndefined(asyncTest({}));
|
||||||
|
await assertPromiseUndefined(
|
||||||
|
asyncTest(function () {
|
||||||
|
return "non-thenable";
|
||||||
|
})
|
||||||
|
);
|
||||||
|
await assertPromiseUndefined(
|
||||||
|
asyncTest(function () {
|
||||||
|
return Promise.resolve(true);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
await assertPromiseUndefined(
|
||||||
|
asyncTest(function () {
|
||||||
|
return Promise.reject(new Test262Error("oh no"));
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert.sameValue(doneCalls, 4, "asyncTest must call $DONE");
|
||||||
|
})().then(realDone, realDone);
|
|
@ -0,0 +1,37 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper calls $DONE with the rejection value if the test function rejects.
|
||||||
|
flags: [async]
|
||||||
|
includes: [asyncHelpers.js, compareArray.js]
|
||||||
|
---*/
|
||||||
|
const rejectionValues = [];
|
||||||
|
var realDone = $DONE;
|
||||||
|
globalThis.$DONE = function (mustBeDefined) {
|
||||||
|
rejectionValues.push(mustBeDefined);
|
||||||
|
};
|
||||||
|
const someObject = {};
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.reject(null);
|
||||||
|
});
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.reject(someObject);
|
||||||
|
});
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.reject("hi");
|
||||||
|
});
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.reject(10);
|
||||||
|
});
|
||||||
|
await asyncTest(function () {
|
||||||
|
return {
|
||||||
|
then(res, rej) {
|
||||||
|
rej(true);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
assert.compareArray(rejectionValues, [null, someObject, "hi", 10, true]);
|
||||||
|
})().then(realDone, realDone);
|
|
@ -0,0 +1,45 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper calls $DONE with undefined, regardless of what value the promise resolves with
|
||||||
|
flags: [async]
|
||||||
|
includes: [asyncHelpers.js]
|
||||||
|
---*/
|
||||||
|
var doneCalls = 0;
|
||||||
|
var realDone = $DONE;
|
||||||
|
globalThis.$DONE = function (noError) {
|
||||||
|
doneCalls++;
|
||||||
|
assert.sameValue(
|
||||||
|
noError,
|
||||||
|
undefined,
|
||||||
|
"asyncTest should discard promise's resolved value"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.resolve(null);
|
||||||
|
});
|
||||||
|
assert.sameValue(doneCalls, 1, "asyncTest called $DONE with undefined");
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.resolve({});
|
||||||
|
});
|
||||||
|
assert.sameValue(doneCalls, 2, "asyncTest called $DONE with undefined");
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.resolve("hi");
|
||||||
|
});
|
||||||
|
assert.sameValue(doneCalls, 3, "asyncTest called $DONE with undefined");
|
||||||
|
await asyncTest(function () {
|
||||||
|
return Promise.resolve(10);
|
||||||
|
});
|
||||||
|
assert.sameValue(doneCalls, 4, "asyncTest called $DONE with undefined");
|
||||||
|
await asyncTest(function () {
|
||||||
|
return {
|
||||||
|
then(res, rej) {
|
||||||
|
res(true);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
assert.sameValue(doneCalls, 5, "asyncTest called $DONE with undefined");
|
||||||
|
})().then(realDone, realDone);
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
description: |
|
||||||
|
The 'asyncTest' helper checks that it is called with the 'async' flag.
|
||||||
|
includes: [asyncHelpers.js]
|
||||||
|
---*/
|
||||||
|
function makePromise() {
|
||||||
|
return {
|
||||||
|
then(res, rej) {
|
||||||
|
throw new Test262Error("Should not be evaluated");
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
assert(
|
||||||
|
!Object.hasOwn(globalThis, "$DONE"),
|
||||||
|
"Without 'async' flag, $DONE should not be defined"
|
||||||
|
);
|
||||||
|
assert.throws(Test262Error, function () {
|
||||||
|
asyncTest(makePromise);
|
||||||
|
});
|
Loading…
Reference in New Issue