0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-21 21:19:50 +01:00
nodejs/test/parallel/test-stream-iterator-helpers-test262-tests.mjs
Chemi Atlow d4e99b1a66
stream: remove asIndexedPairs
PR-URL: https://github.com/nodejs/node/pull/48150
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
2023-06-13 12:54:45 +00:00

147 lines
5.7 KiB
JavaScript

import { mustCall } from '../common/index.mjs';
import { Readable } from 'stream';
import assert from 'assert';
// These tests are manually ported from the draft PR for the test262 test suite
// Authored by Rick Waldron in https://github.com/tc39/test262/pull/2818/files
// test262 license:
// The << Software identified by reference to the Ecma Standard* ("Software)">>
// is protected by copyright and is being made available under the
// "BSD License", included below. This Software may be subject to third party
// rights (rights from parties other than Ecma International), including patent
// rights, and no licenses under such third party rights are granted under this
// license even if the third party concerned is a member of Ecma International.
// SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT
// http://www.ecma-international.org/memento/codeofconduct.htm FOR INFORMATION
// REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA
// INTERNATIONAL STANDARDS*
// Copyright (C) 2012-2013 Ecma International
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. Neither the name of the authors nor Ecma International may be used to
// endorse or promote products derived from this software without specific
// prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
// NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// * Ecma International Standards hereafter means Ecma International Standards
// as well as Ecma Technical Reports
// Note all the tests that check AsyncIterator's prototype itself and things
// that happen before stream conversion were not ported.
{
// drop/length
assert.strictEqual(Readable.prototype.drop.length, 1);
const descriptor = Object.getOwnPropertyDescriptor(
Readable.prototype,
'drop'
);
assert.strictEqual(descriptor.enumerable, false);
assert.strictEqual(descriptor.configurable, true);
assert.strictEqual(descriptor.writable, true);
// drop/limit-equals-total
const iterator = Readable.from([1, 2]).drop(2);
const result = await iterator[Symbol.asyncIterator]().next();
assert.deepStrictEqual(result, { done: true, value: undefined });
// drop/limit-greater-than-total.js
const iterator2 = Readable.from([1, 2]).drop(3);
const result2 = await iterator2[Symbol.asyncIterator]().next();
assert.deepStrictEqual(result2, { done: true, value: undefined });
// drop/limit-less-than-total.js
const iterator3 = Readable.from([1, 2]).drop(1);
const result3 = await iterator3[Symbol.asyncIterator]().next();
assert.deepStrictEqual(result3, { done: false, value: 2 });
// drop/limit-rangeerror
assert.throws(() => Readable.from([1]).drop(-1), RangeError);
assert.throws(() => {
Readable.from([1]).drop({
valueOf() {
throw new Error('boom');
}
});
}, /boom/);
// drop/limit-tointeger
const two = await Readable.from([1, 2]).drop({ valueOf: () => 1 }).toArray();
assert.deepStrictEqual(two, [2]);
// drop/name
assert.strictEqual(Readable.prototype.drop.name, 'drop');
// drop/non-constructible
assert.throws(() => new Readable.prototype.drop(1), TypeError);
// drop/proto
const proto = Object.getPrototypeOf(Readable.prototype.drop);
assert.strictEqual(proto, Function.prototype);
}
{
// every/abrupt-iterator-close
const stream = Readable.from([1, 2, 3]);
const e = new Error();
await assert.rejects(stream.every(mustCall(() => {
throw e;
}, 1)), e);
}
{
// every/callable-fn
await assert.rejects(Readable.from([1, 2]).every({}), TypeError);
}
{
// every/callable
Readable.prototype.every.call(Readable.from([]), () => {});
// eslint-disable-next-line array-callback-return
Readable.from([]).every(() => {});
assert.throws(() => {
const r = Readable.from([]);
new r.every(() => {});
}, TypeError);
}
{
// every/false
const iterator = Readable.from([1, 2, 3]);
const result = await iterator.every((v) => v === 1);
assert.strictEqual(result, false);
}
{
// every/every
const iterator = Readable.from([1, 2, 3]);
const result = await iterator.every((v) => true);
assert.strictEqual(result, true);
}
{
// every/is-function
assert.strictEqual(typeof Readable.prototype.every, 'function');
}
{
// every/length
assert.strictEqual(Readable.prototype.every.length, 1);
// every/name
assert.strictEqual(Readable.prototype.every.name, 'every');
// every/propdesc
const descriptor = Object.getOwnPropertyDescriptor(
Readable.prototype,
'every'
);
assert.strictEqual(descriptor.enumerable, false);
assert.strictEqual(descriptor.configurable, true);
assert.strictEqual(descriptor.writable, true);
}