Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!doctype html>
<meta charset="utf-8">
<title>Iterator prototype objects</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
assert_equals(Object.getPrototypeOf(iteratorProto), esIteratorPrototype);
}, "Has %IteratorPrototype% as prototype");
test(() => {
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
const desc = Object.getOwnPropertyDescriptor(iteratorProto, "next");
assert_equals(typeof desc.value, "function");
assert_equals(desc.writable, true);
assert_equals(desc.enumerable, true);
assert_equals(desc.configurable, true);
}, "next() exists and is writable, enumerable, and configurable");
test(() => {
const usp = new URLSearchParams();
const iteratorProto = Object.getPrototypeOf(usp.entries());
assert_throws_js(TypeError, () => {
iteratorProto.next();
});
assert_throws_js(TypeError, () => {
iteratorProto.next.call(undefined);
});
assert_throws_js(TypeError, () => {
iteratorProto.next.call(42);
});
assert_throws_js(TypeError, () => {
iteratorProto.next.call(new Headers().entries());
});
}, "next() throws TypeError when called on ineligible receiver");
// class string behavior tested in a dedicated file
test(() => {
const iteratorProto1 = Object.getPrototypeOf(new URLSearchParams().entries());
const iteratorProto2 = Object.getPrototypeOf(new Headers().entries());
assert_not_equals(iteratorProto1, iteratorProto2);
}, "Is specific to an interface");
</script>