blob: 697bea0b3e427cae031303605dfb570314b6b803 [file] [log] [blame]
// Copyright (C) 2017 Jordan Harband. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
author: Jordan Harband
description: Promise.prototype.finally invokes `then` method
esid: sec-promise.prototype.finally
features: [Promise.prototype.finally]
---*/
var target = new Promise(function() {});
var returnValue = {};
var callCount = 0;
var thisValue = null;
var argCount = null;
var firstArg = null;
var secondArg = null;
target.then = function(a, b) {
callCount += 1;
thisValue = this;
argCount = arguments.length;
firstArg = a;
secondArg = b;
return returnValue;
};
var originalFinallyHandler = function() {};
var anonName = Object(function() {}).name;
var result = Promise.prototype.finally.call(target, originalFinallyHandler, 2, 3);
assert.sameValue(callCount, 1, 'Invokes `then` method exactly once');
assert.sameValue(
thisValue,
target,
'Invokes `then` method with the instance as the `this` value'
);
assert.sameValue(argCount, 2, 'Invokes `then` method with exactly two single arguments');
assert.sameValue(
typeof firstArg,
'function',
'Invokes `then` method with a function as the first argument'
);
assert.notSameValue(firstArg, originalFinallyHandler, 'Invokes `then` method with a different fulfillment handler');
assert.sameValue(firstArg.length, 1, 'fulfillment handler has a length of 1');
assert.sameValue(firstArg.name, anonName, 'fulfillment handler is anonymous');
assert.sameValue(
typeof secondArg,
'function',
'Invokes `then` method with a function as the second argument'
);
assert.notSameValue(secondArg, originalFinallyHandler, 'Invokes `then` method with a different rejection handler');
assert.sameValue(secondArg.length, 1, 'rejection handler has a length of 1');
assert.sameValue(secondArg.name, anonName, 'rejection handler is anonymous');
assert.sameValue(result, returnValue, 'Returns the result of the invocation of `then`');