mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
388 lines
8.8 KiB
JavaScript
388 lines
8.8 KiB
JavaScript
var assert = function (result, expected, message = "") {
|
|
if (result !== expected) {
|
|
throw new Error('Error in assert. Expected "' + expected + '" but was "' + result + '":' + message );
|
|
}
|
|
};
|
|
|
|
const Logger = function () {
|
|
var log = [];
|
|
|
|
this.logEvent = (type, value) => {
|
|
log.push({ type, value});
|
|
};
|
|
this.logFulfilledEvent = (value) => {
|
|
this.logEvent('fulfilled', value);
|
|
};
|
|
this.logRejectEvent = error => {
|
|
this.logEvent('reject', error.toString());
|
|
};
|
|
this.logFinallyEvent = value => {
|
|
this.logEvent('finally', value === undefined ? 'undefined' : value.toString());
|
|
};
|
|
this.logCatchEvent = value => {
|
|
this.logEvent('catch', value.toString());
|
|
};
|
|
this.getLogger = () => log;
|
|
|
|
this.clear = () => {
|
|
log = [];
|
|
}
|
|
};
|
|
|
|
var logger = new Logger();
|
|
|
|
const fulfillSpy = (logger => result => logger.logFulfilledEvent(result))(logger);
|
|
const rejectSpy = (logger => error => logger.logRejectEvent(error))(logger);
|
|
const catchSpy = (logger => error => logger.logCatchEvent(error))(logger);
|
|
const finallySpy = (logger => value => logger.logFinallyEvent(value))(logger);
|
|
|
|
const assertLogger = function (loggerObject) {
|
|
const logger = loggerObject.getLogger();
|
|
|
|
var _assertLogger = function () {
|
|
let index = 0;
|
|
|
|
const isNotOutOfLength = () => {
|
|
assert(index < logger.length, true, `Index is greater then log length`);
|
|
}
|
|
|
|
this.fullfilled = function (expectedValue, message = 'on fulfill') {
|
|
isNotOutOfLength();
|
|
|
|
const msg = `step: ${index} - ${message}`;
|
|
let step = logger[index];
|
|
|
|
assert(step.type, 'fulfilled', msg);
|
|
assert(step.value, expectedValue, msg);
|
|
|
|
index++;
|
|
return this;
|
|
};
|
|
|
|
this.rejected = function (error, message = 'on reject') {
|
|
isNotOutOfLength();
|
|
|
|
const msg = `step: ${index} - ${message}`;
|
|
let step = logger[index];
|
|
|
|
assert(step.type, 'reject', msg);
|
|
assert(step.value, error === undefined ? 'undefined' : error.toString(), msg);
|
|
|
|
index++;
|
|
return this;
|
|
};
|
|
|
|
this.finally = function (value, message = 'on reject') {
|
|
isNotOutOfLength();
|
|
|
|
const msg = `step: ${index} - ${message}`;
|
|
let step = logger[index];
|
|
|
|
assert(step.type, 'finally', msg);
|
|
assert(step.value, value === undefined ? 'undefined' : value.toString(), msg);
|
|
index++;
|
|
return this;
|
|
};
|
|
|
|
this.catched = function (expectedError, message = 'on catch') {
|
|
isNotOutOfLength();
|
|
|
|
const msg = `step: ${index} - ${message}`;
|
|
let step = logger[index];
|
|
|
|
assert(step.type, 'catch', msg);
|
|
assert(step.value, expectedError === undefined ? 'undefined' : expectedError.toString(), msg);
|
|
|
|
index++;
|
|
return this;
|
|
};
|
|
|
|
this.isFinal = function (message = '') {
|
|
assert(index, logger.length, `expected final step: ${message}`);
|
|
};
|
|
};
|
|
|
|
return new _assertLogger();
|
|
};
|
|
|
|
logger.clear();
|
|
Promise.resolve(1).finally(finallySpy);
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.finally()
|
|
.isFinal();
|
|
|
|
|
|
logger.clear();
|
|
Promise.reject(1).finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value'}, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-1'}, rejectSpy)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-2'}, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.fullfilled("some-value-1")
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-2'; }, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.rejected(new Error("error#"))
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-2'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.rejected(new Error("error#"))
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(finallySpy)
|
|
.then(fulfillSpy, rejectSpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.catched(new Error('error#'))
|
|
.finally()
|
|
.fullfilled()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(finallySpy)
|
|
.catch(catchSpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.catched(new Error('error#'))
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#'); return 'some-value-1'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(finallySpy)
|
|
.then(fulfillSpy, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.catched(new Error('error#'))
|
|
.finally()
|
|
.fullfilled()
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#1'); return 'some-value-1'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(() => { finallySpy(); throw new Error('error#2'); } )
|
|
.then(fulfillSpy, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.catched(new Error('error#1'))
|
|
.finally()
|
|
.rejected(new Error('error#2'))
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); throw new Error('error#1'); return 'some-value-1'; }, rejectSpy)
|
|
.catch(catchSpy)
|
|
.finally(() => { finallySpy(); throw new Error('error#2'); } )
|
|
.catch(catchSpy)
|
|
.finally();
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.catched(new Error('error#1'))
|
|
.finally()
|
|
.catched(new Error('error#2'))
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-1'; })
|
|
.finally(VALUE => { finallySpy(VALUE); return 'value'; } )
|
|
.then(fulfillSpy, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.finally()
|
|
.fullfilled('some-value-1')
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.then(VALUE => { fulfillSpy(VALUE); return 'some-value-1'; })
|
|
.finally(VALUE => { finallySpy(VALUE); return 'value'; } )
|
|
.then(fulfillSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.fullfilled(1)
|
|
.finally()
|
|
.fullfilled('some-value-1')
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.resolve(1)
|
|
.finally(VALUE => { finallySpy(VALUE); return 'value'; } )
|
|
.then(fulfillSpy, rejectSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.finally()
|
|
.fullfilled(1)
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
Promise.reject(1)
|
|
.then(fulfillSpy, VALUE => { rejectSpy(VALUE); return 'some-value-1'; })
|
|
.finally(VALUE => { finallySpy(VALUE); return 'value'; } )
|
|
.then(fulfillSpy)
|
|
.finally(finallySpy);
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.rejected(1)
|
|
.finally()
|
|
.fullfilled('some-value-1')
|
|
.finally()
|
|
.isFinal();
|
|
|
|
logger.clear();
|
|
|
|
var obj = {};
|
|
|
|
var p = Promise.resolve(obj);
|
|
|
|
p.finally(function () {
|
|
finallySpy(arguments.length);
|
|
return {};
|
|
}).then(function (x) {
|
|
fulfillSpy(x === obj);
|
|
});
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.finally(0)
|
|
.fullfilled(true)
|
|
.isFinal();
|
|
|
|
|
|
logger.clear();
|
|
|
|
p = Promise.reject(obj);
|
|
|
|
p.finally(function () {
|
|
finallySpy(arguments.length);
|
|
return {};
|
|
}).then(function (x) {
|
|
fulfillSpy(x === obj);
|
|
}, function (x) {
|
|
rejectSpy(x === obj);
|
|
});
|
|
|
|
drainMicrotasks();
|
|
|
|
assertLogger(logger)
|
|
.finally(0)
|
|
.rejected(true)
|
|
.isFinal();
|