Attachment #8767835: Part 4: Add test for IteratorNext with non-object returned by iterator.next(). for bug #1016936

View | Details | Raw Unified | Return to bug 1016936
Collapse All | Expand All

(-)a/js/src/tests/ecma_6/Generators/iterator-next-non-object.js (+64 lines)
Line     Link Here 
Line 0    Link Here 
1
var BUGNUMBER = 1016936;
2
var summary = "IteratorNext should throw if the value returned by iterator.next() is not an object.";
3
4
print(BUGNUMBER + ": " + summary);
5
6
var nonobjs = [
7
    null,
8
    undefined,
9
    1,
10
    true,
11
    "a",
12
    Symbol.iterator,
13
];
14
15
function createIterable(v) {
16
    var iterable = {};
17
    iterable[Symbol.iterator] = function () {
18
        return {
19
            next: function () {
20
                return v;
21
            }
22
        };
23
    };
24
    return iterable;
25
}
26
27
function f() {
28
}
29
30
for (var nonobj of nonobjs) {
31
    var iterable = createIterable(nonobj);
32
33
    assertThrowsInstanceOf(() => [...iterable], TypeError);
34
    assertThrowsInstanceOf(() => f(...iterable), TypeError);
35
36
    assertThrowsInstanceOf(() => { for (var x of iterable) {} }, TypeError);
37
38
    assertThrowsInstanceOf(() => {
39
        var [a] = iterable;
40
    }, TypeError);
41
    assertThrowsInstanceOf(() => {
42
        var [...a] = iterable;
43
    }, TypeError);
44
45
    assertThrowsInstanceOf(() => Array.from(iterable), TypeError);
46
    assertThrowsInstanceOf(() => new Map(iterable), TypeError);
47
    assertThrowsInstanceOf(() => new Set(iterable), TypeError);
48
    assertThrowsInstanceOf(() => new WeakMap(iterable), TypeError);
49
    assertThrowsInstanceOf(() => new WeakSet(iterable), TypeError);
50
    // FIXME: bug 1232266
51
    // assertThrowsInstanceOf(() => new Int8Array(iterable), TypeError);
52
    assertThrowsInstanceOf(() => Int8Array.from(iterable), TypeError);
53
54
    assertThrowsInstanceOf(() => {
55
        var g = function*() {
56
            yield* iterable;
57
        };
58
        var v = g();
59
        v.next();
60
    }, TypeError);
61
}
62
63
if (typeof reportCompare === "function")
64
    reportCompare(true, true);

Return to bug 1016936