// Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: | Check that an array contains a numeric sequence starting at 1 and incrementing by 1 for each entry in the array. Used by Promise tests to assert the order of execution in deep Promise resolution pipelines. defines: [checkSequence, checkSettledPromises] ---*/ function checkSequence(arr, message) { arr.forEach(function(e, i) { if (e !== (i+1)) { $ERROR((message ? message : "Steps in unexpected sequence:") + " '" + arr.join(',') + "'"); } }); return true; } function checkSettledPromises(settleds, expected, message) { const prefix = message ? `${message}: ` : ''; assert.sameValue(Array.isArray(settleds), true, `${prefix}Settled values is an array`); assert.sameValue( settleds.length, expected.length, `${prefix}The settled values has a different length than expected` ); settleds.forEach((settled, i) => { assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'status'), true, `${prefix}The settled value has a property status` ); assert.sameValue(settled.status, expected[i].status, `${prefix}status for item ${i}`); if (settled.status === 'fulfilled') { assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'value'), true, `${prefix}The fulfilled promise has a property named value` ); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'reason'), false, `${prefix}The fulfilled promise has no property named reason` ); assert.sameValue(settled.value, expected[i].value, `${prefix}value for item ${i}`); } else { assert.sameValue(settled.status, 'rejected', `${prefix}Valid statuses are only fulfilled or rejected`); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'value'), false, `${prefix}The fulfilled promise has no property named value` ); assert.sameValue( Object.prototype.hasOwnProperty.call(settled, 'reason'), true, `${prefix}The fulfilled promise has a property named reason` ); assert.sameValue(settled.reason, expected[i].reason, `${prefix}Reason value for item ${i}`); } }); }