mirror of
https://github.com/tc39/test262.git
synced 2025-11-28 17:43:19 +01:00
106 lines
2.9 KiB
JavaScript
106 lines
2.9 KiB
JavaScript
// Copyright (C) 2025 André Bargull. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
esid: sec-iterator.zipkeyed
|
|
description: >
|
|
Basic Iterator.zipKeyed test with "longest" mode.
|
|
includes: [compareArray.js, propertyHelper.js, iteratorZipUtils.js]
|
|
features: [joint-iteration]
|
|
---*/
|
|
|
|
function testSequence(inputs, inputsLabel, minLength, maxLength) {
|
|
function test(options, optionsLabel, getPaddingForInput) {
|
|
var label = optionsLabel + ", " + inputsLabel;
|
|
var it = Iterator.zipKeyed(inputs, options);
|
|
assertZippedKeyed(it, inputs, minLength, label);
|
|
|
|
var expectedKeys = Object.keys(inputs);
|
|
|
|
for (var i = minLength; i < maxLength; i++) {
|
|
var itemLabel = label + ", step " + i;
|
|
|
|
var result = it.next();
|
|
var value = result.value;
|
|
|
|
// Test IteratorResult structure.
|
|
assertIteratorResult(result, value, false, itemLabel);
|
|
|
|
// Ensure resulting object has the expected keys and values.
|
|
assert.compareArray(Object.keys(value), expectedKeys, itemLabel + ": result object keys");
|
|
|
|
var expectedValues = Object.values(inputs).map(function (input, j) {
|
|
return i < input.length ? input[i] : getPaddingForInput(j);
|
|
});
|
|
assert.compareArray(Object.values(value), expectedValues, itemLabel + ": result object values");
|
|
}
|
|
assertIteratorResult(it.next(), undefined, true, label + ": after completion");
|
|
}
|
|
|
|
test(
|
|
{ mode: "longest" },
|
|
"options = { mode: 'longest' }",
|
|
function () {
|
|
return undefined;
|
|
},
|
|
);
|
|
|
|
test(
|
|
{ mode: "longest", padding: {} },
|
|
"options = { mode: 'longest', padding: {} }",
|
|
function () {
|
|
return undefined;
|
|
},
|
|
);
|
|
|
|
test(
|
|
{ mode: "longest", padding: { prop_0: "pad" } },
|
|
"options = { mode: 'longest', padding: { prop_0: 'pad' } }",
|
|
function (idx) {
|
|
return idx === 0 ? "pad" : undefined;
|
|
},
|
|
);
|
|
|
|
test(
|
|
{ mode: "longest", padding: { prop_1: "pad" } },
|
|
"options = { mode: 'longest', padding: { prop_1: 'pad' } }",
|
|
function (idx) {
|
|
return idx === 1 ? "pad" : undefined;
|
|
},
|
|
);
|
|
|
|
var padding = {};
|
|
for (var key in inputs) {
|
|
padding[key] = "pad";
|
|
}
|
|
test(
|
|
{ mode: "longest", padding: padding },
|
|
"options = { mode: 'longest', padding: { prop_0: 'pad', ..., prop_N: 'pad' } }",
|
|
function (idx) {
|
|
return "pad";
|
|
},
|
|
);
|
|
|
|
// Object with many properties.
|
|
padding = new Proxy({}, {
|
|
has(target, key) {
|
|
return key.indexOf('_') !== -1;
|
|
},
|
|
get(target, key, receiver) {
|
|
var split = key.split('_');
|
|
if (split.length !== 2) return undefined;
|
|
return 'pad_' + split[1];
|
|
}
|
|
});
|
|
test(
|
|
{ mode: "longest", padding: padding },
|
|
"options = { mode: 'longest', padding: { prop_0: 'pad_1', ..., prop_N: 'pad_N' } }",
|
|
function (idx) {
|
|
return 'pad_' + idx;
|
|
},
|
|
);
|
|
|
|
}
|
|
|
|
forEachSequenceCombinationKeyed(testSequence);
|