mirror of
https://github.com/hanzoai/core-js.git
synced 2026-09-24 16:58:15 +00:00
156 lines
4.1 KiB
JavaScript
156 lines
4.1 KiB
JavaScript
import { GLOBAL } from '../helpers/constants.js';
|
|
|
|
const Symbol = GLOBAL.Symbol || {};
|
|
|
|
QUnit.test('Array#keys', assert => {
|
|
const { keys } = Array.prototype;
|
|
assert.isFunction(keys);
|
|
assert.arity(keys, 0);
|
|
assert.name(keys, 'keys');
|
|
assert.looksNative(keys);
|
|
assert.nonEnumerable(Array.prototype, 'keys');
|
|
const iterator = ['q', 'w', 'e'].keys();
|
|
assert.isIterator(iterator);
|
|
assert.isIterable(iterator);
|
|
assert.same(iterator[Symbol.toStringTag], 'Array Iterator');
|
|
assert.same(String(iterator), '[object Array Iterator]');
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 0,
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 1,
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 2,
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: undefined,
|
|
done: true,
|
|
});
|
|
/* still not fixed even in modern WebKit
|
|
assert.deepEqual(keys.call({
|
|
length: -1,
|
|
}).next(), {
|
|
value: undefined,
|
|
done: true,
|
|
}, 'uses ToLength');
|
|
*/
|
|
assert.true('keys' in Array.prototype[Symbol.unscopables], 'In Array#@@unscopables');
|
|
});
|
|
|
|
QUnit.test('Array#values', assert => {
|
|
const { values } = Array.prototype;
|
|
assert.isFunction(values);
|
|
assert.arity(values, 0);
|
|
assert.name(values, 'values');
|
|
assert.looksNative(values);
|
|
assert.nonEnumerable(Array.prototype, 'values');
|
|
const iterator = ['q', 'w', 'e'].values();
|
|
assert.isIterator(iterator);
|
|
assert.isIterable(iterator);
|
|
assert.same(iterator[Symbol.toStringTag], 'Array Iterator');
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'q',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'w',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'e',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: undefined,
|
|
done: true,
|
|
});
|
|
/* still not fixed even in modern WebKit
|
|
assert.deepEqual(values.call({
|
|
length: -1,
|
|
}).next(), {
|
|
value: undefined,
|
|
done: true,
|
|
}, 'uses ToLength');
|
|
*/
|
|
assert.true('values' in Array.prototype[Symbol.unscopables], 'In Array#@@unscopables');
|
|
});
|
|
|
|
QUnit.test('Array#entries', assert => {
|
|
const { entries } = Array.prototype;
|
|
assert.isFunction(entries);
|
|
assert.arity(entries, 0);
|
|
assert.name(entries, 'entries');
|
|
assert.looksNative(entries);
|
|
assert.nonEnumerable(Array.prototype, 'entries');
|
|
const iterator = ['q', 'w', 'e'].entries();
|
|
assert.isIterator(iterator);
|
|
assert.isIterable(iterator);
|
|
assert.same(iterator[Symbol.toStringTag], 'Array Iterator');
|
|
assert.deepEqual(iterator.next(), {
|
|
value: [0, 'q'],
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: [1, 'w'],
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: [2, 'e'],
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: undefined,
|
|
done: true,
|
|
});
|
|
/* still not fixed even in modern WebKit
|
|
assert.deepEqual(entries.call({
|
|
length: -1,
|
|
}).next(), {
|
|
value: undefined,
|
|
done: true,
|
|
}, 'uses ToLength');
|
|
*/
|
|
assert.true('entries' in Array.prototype[Symbol.unscopables], 'In Array#@@unscopables');
|
|
});
|
|
|
|
QUnit.test('Array#@@iterator', assert => {
|
|
assert.isIterable(Array.prototype);
|
|
assert.arity(Array.prototype[Symbol.iterator], 0);
|
|
assert.name(Array.prototype[Symbol.iterator], 'values');
|
|
assert.looksNative(Array.prototype[Symbol.iterator]);
|
|
assert.nonEnumerable(Array.prototype, Symbol.iterator);
|
|
assert.same(Array.prototype[Symbol.iterator], Array.prototype.values);
|
|
const iterator = ['q', 'w', 'e'][Symbol.iterator]();
|
|
assert.isIterator(iterator);
|
|
assert.isIterable(iterator);
|
|
assert.same(iterator[Symbol.toStringTag], 'Array Iterator');
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'q',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'w',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: 'e',
|
|
done: false,
|
|
});
|
|
assert.deepEqual(iterator.next(), {
|
|
value: undefined,
|
|
done: true,
|
|
});
|
|
/* still not fixed even in modern WebKit
|
|
assert.deepEqual(Array.prototype[Symbol.iterator].call({
|
|
length: -1,
|
|
}).next(), {
|
|
value: undefined,
|
|
done: true,
|
|
}, 'uses ToLength');
|
|
*/
|
|
});
|