Skip to content

Commit 8431fb9

Browse files
benjamingrsxa
authored andcommitted
stream: port more test262 tests
Add some test262 tests for `every`, add some `length` checks. Turns out properties need to be writable after all according to the test262 tests. PR-URL: #41974 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Robert Nagy <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
1 parent 26fe61b commit 8431fb9

File tree

3 files changed

+62
-6
lines changed

3 files changed

+62
-6
lines changed

lib/internal/streams/operators.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -186,15 +186,15 @@ function asIndexedPairs(options = undefined) {
186186
}.call(this);
187187
}
188188

189-
async function some(fn, options) {
189+
async function some(fn, options = undefined) {
190190
// eslint-disable-next-line no-unused-vars
191191
for await (const unused of filter.call(this, fn, options)) {
192192
return true;
193193
}
194194
return false;
195195
}
196196

197-
async function every(fn, options) {
197+
async function every(fn, options = undefined) {
198198
if (typeof fn !== 'function') {
199199
throw new ERR_INVALID_ARG_TYPE(
200200
'fn', ['Function', 'AsyncFunction'], fn);

lib/stream.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ for (const key of ObjectKeys(streamReturningOperators)) {
7575
for (const key of ObjectKeys(promiseReturningOperators)) {
7676
const op = promiseReturningOperators[key];
7777
function fn(...args) {
78+
if (new.target) {
79+
throw ERR_ILLEGAL_CONSTRUCTOR();
80+
}
7881
return ReflectApply(op, this, args);
7982
}
8083
ObjectDefineProperty(fn, 'name', { value: op.name });
@@ -83,7 +86,7 @@ for (const key of ObjectKeys(promiseReturningOperators)) {
8386
value: fn,
8487
enumerable: false,
8588
configurable: true,
86-
writable: false,
89+
writable: true,
8790
});
8891
}
8992
Stream.Writable = require('internal/streams/writable');

test/parallel/test-stream-iterator-helpers-test262-tests.mjs

+56-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import '../common/index.mjs';
1+
import { mustCall } from '../common/index.mjs';
22
import { Readable } from 'stream';
33
import assert from 'assert';
44

@@ -68,7 +68,7 @@ import assert from 'assert';
6868
);
6969
assert.strictEqual(descriptor.enumerable, false);
7070
assert.strictEqual(descriptor.configurable, true);
71-
// assert.strictEqual(descriptor.writable, false);
71+
// assert.strictEqual(descriptor.writable, true);
7272
}
7373
{
7474
// drop/length
@@ -79,7 +79,7 @@ import assert from 'assert';
7979
);
8080
assert.strictEqual(descriptor.enumerable, false);
8181
assert.strictEqual(descriptor.configurable, true);
82-
// assert.strictEqual(descriptor.writable, false);
82+
// assert.strictEqual(descriptor.writable, true);
8383
// drop/limit-equals-total
8484
const iterator = Readable.from([1, 2]).drop(2);
8585
const result = await iterator[Symbol.asyncIterator]().next();
@@ -111,5 +111,58 @@ import assert from 'assert';
111111
// drop/proto
112112
const proto = Object.getPrototypeOf(Readable.prototype.drop);
113113
assert.strictEqual(proto, Function.prototype);
114+
}
115+
{
116+
// every/abrupt-iterator-close
117+
const stream = Readable.from([1, 2, 3]);
118+
const e = new Error();
119+
await assert.rejects(stream.every(mustCall(() => {
120+
throw e;
121+
}, 1)), e);
122+
}
123+
{
124+
// every/callable-fn
125+
await assert.rejects(Readable.from([1, 2]).every({}), TypeError);
126+
}
127+
{
128+
// every/callable
129+
Readable.prototype.every.call(Readable.from([]), () => {});
130+
// eslint-disable-next-line array-callback-return
131+
Readable.from([]).every(() => {});
132+
assert.throws(() => {
133+
const r = Readable.from([]);
134+
new r.every(() => {});
135+
}, TypeError);
136+
}
114137

138+
{
139+
// every/false
140+
const iterator = Readable.from([1, 2, 3]);
141+
const result = await iterator.every((v) => v === 1);
142+
assert.strictEqual(result, false);
143+
}
144+
{
145+
// every/every
146+
const iterator = Readable.from([1, 2, 3]);
147+
const result = await iterator.every((v) => true);
148+
assert.strictEqual(result, true);
149+
}
150+
151+
{
152+
// every/is-function
153+
assert.strictEqual(typeof Readable.prototype.every, 'function');
154+
}
155+
{
156+
// every/length
157+
assert.strictEqual(Readable.prototype.every.length, 1);
158+
// every/name
159+
assert.strictEqual(Readable.prototype.every.name, 'every');
160+
// every/propdesc
161+
const descriptor = Object.getOwnPropertyDescriptor(
162+
Readable.prototype,
163+
'every'
164+
);
165+
assert.strictEqual(descriptor.enumerable, false);
166+
assert.strictEqual(descriptor.configurable, true);
167+
assert.strictEqual(descriptor.writable, true);
115168
}

0 commit comments

Comments
 (0)