mirror of https://github.com/tc39/test262.git
add tests for "iterator helpers close receiver on argument validation failure" (#4350)
* add tests for "iterator helpers close receiver on argument validation failure" * address comments * avoid re-using Test262Error
This commit is contained in:
parent
d8e2cb2741
commit
d4052133d5
48
test/built-ins/Iterator/prototype/drop/argument-validation-failure-closes-underlying.js
vendored
Normal file
48
test/built-ins/Iterator/prototype/drop/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.drop
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.drop ( limit )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(RangeError, function() {
|
||||
closable.drop();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(RangeError, function() {
|
||||
closable.drop(NaN);
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(RangeError, function() {
|
||||
closable.drop(-1);
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
class ShouldNotGetValueOf {}
|
||||
assert.throws(ShouldNotGetValueOf, function() {
|
||||
closable.drop({ get valueOf() { throw new ShouldNotGetValueOf(); }});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/every/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/every/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.every
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.every ( predicate )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.every();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.every({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/filter/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/filter/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.filter
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.filter ( predicate )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.filter();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.filter({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/find/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/find/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.find
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.find ( predicate )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.find();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.find({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/flatMap/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/flatMap/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.flatMap
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.flatMap ( mapper )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.flatMap();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.flatMap({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/forEach/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/forEach/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.forEach
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.forEach ( predicate )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.forEach();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.forEach({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/map/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/map/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.map
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.map ( mapper )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.map();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.map({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
35
test/built-ins/Iterator/prototype/reduce/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/reduce/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.reduce
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.reduce ( reducer, [ initialValue ] )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.reduce();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.reduce({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
|
@ -11,12 +11,12 @@ features: [iterator-helpers]
|
|||
flags: []
|
||||
---*/
|
||||
let nonCallable = {};
|
||||
let iterator = (function* () {
|
||||
function* gen() {
|
||||
yield 1;
|
||||
})();
|
||||
}
|
||||
|
||||
assert.throws(TypeError, function () {
|
||||
iterator.reduce(nonCallable);
|
||||
gen().reduce(nonCallable);
|
||||
});
|
||||
|
||||
iterator.reduce(() => {});
|
||||
gen().reduce(() => {});
|
||||
|
|
35
test/built-ins/Iterator/prototype/some/argument-validation-failure-closes-underlying.js
vendored
Normal file
35
test/built-ins/Iterator/prototype/some/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.some
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.some ( predicate )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
closable.some();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(TypeError, function() {
|
||||
closable.some({});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
48
test/built-ins/Iterator/prototype/take/argument-validation-failure-closes-underlying.js
vendored
Normal file
48
test/built-ins/Iterator/prototype/take/argument-validation-failure-closes-underlying.js
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
// Copyright (C) 2024 Kevin Gibbons. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
esid: sec-iteratorprototype.take
|
||||
description: >
|
||||
Underlying iterator is closed when argument validation fails
|
||||
info: |
|
||||
%Iterator.prototype%.take ( limit )
|
||||
|
||||
features: [iterator-helpers]
|
||||
flags: []
|
||||
---*/
|
||||
|
||||
let closed = false;
|
||||
let closable = {
|
||||
__proto__: Iterator.prototype,
|
||||
get next() {
|
||||
throw new Test262Error('next should not be read');
|
||||
},
|
||||
return() {
|
||||
closed = true;
|
||||
return {};
|
||||
},
|
||||
};
|
||||
|
||||
assert.throws(RangeError, function() {
|
||||
closable.take();
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(RangeError, function() {
|
||||
closable.take(NaN);
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
assert.throws(RangeError, function() {
|
||||
closable.take(-1);
|
||||
});
|
||||
assert.sameValue(closed, true);
|
||||
|
||||
closed = false;
|
||||
class ShouldNotGetValueOf {}
|
||||
assert.throws(ShouldNotGetValueOf, function() {
|
||||
closable.take({ get valueOf() { throw new ShouldNotGetValueOf(); }});
|
||||
});
|
||||
assert.sameValue(closed, true);
|
Loading…
Reference in New Issue