iterator-next-result-done-attr.js (2341B)
1 // Copyright (C) 2013 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 7.4.3 5 description: > 6 The `done` value of iteration result objects should be interpreted as 7 incomplete as per `ToBoolean` (7.1.2). 8 features: [Symbol.iterator] 9 ---*/ 10 11 var iterable = {}; 12 var i, firstIterResult; 13 14 iterable[Symbol.iterator] = function() { 15 var finalIterResult = { value: null, done: true }; 16 var nextIterResult = firstIterResult; 17 18 return { 19 next: function() { 20 var iterResult = nextIterResult; 21 22 nextIterResult = finalIterResult; 23 24 return iterResult; 25 } 26 }; 27 }; 28 29 firstIterResult = { value: null, done: undefined }; 30 i = 0; 31 for (var x of iterable) { 32 i++; 33 } 34 assert.sameValue(i, 1); 35 36 firstIterResult = { value: null }; 37 i = 0; 38 for (var x of iterable) { 39 i++; 40 } 41 assert.sameValue(i, 1); 42 43 firstIterResult = { value: null, done: null }; 44 i = 0; 45 for (var x of iterable) { 46 i++; 47 } 48 assert.sameValue(i, 1); 49 50 firstIterResult = { value: null, done: false }; 51 i = 0; 52 for (var x of iterable) { 53 i++; 54 } 55 assert.sameValue(i, 1); 56 57 firstIterResult = { value: null, done: true }; 58 i = 0; 59 for (var x of iterable) { 60 i++; 61 } 62 assert.sameValue(i, 0); 63 64 firstIterResult = { value: null, done: 1 }; 65 i = 0; 66 for (var x of iterable) { 67 i++; 68 } 69 assert.sameValue(i, 0); 70 71 firstIterResult = { value: null, done: 0 }; 72 i = 0; 73 for (var x of iterable) { 74 i++; 75 } 76 assert.sameValue(i, 1); 77 78 firstIterResult = { value: null, done: -0 }; 79 i = 0; 80 for (var x of iterable) { 81 i++; 82 } 83 assert.sameValue(i, 1); 84 85 firstIterResult = { value: null, done: NaN }; 86 i = 0; 87 for (var x of iterable) { 88 i++; 89 } 90 assert.sameValue(i, 1); 91 92 firstIterResult = { value: null, done: '' }; 93 i = 0; 94 for (var x of iterable) { 95 i++; 96 } 97 assert.sameValue(i, 1); 98 99 firstIterResult = { value: null, done: '0' }; 100 i = 0; 101 for (var x of iterable) { 102 i++; 103 } 104 assert.sameValue(i, 0); 105 106 firstIterResult = { value: null, done: Symbol() }; 107 i = 0; 108 for (var x of iterable) { 109 i++; 110 } 111 assert.sameValue(i, 0); 112 113 firstIterResult = { value: null, done: {} }; 114 i = 0; 115 for (var x of iterable) { 116 i++; 117 } 118 assert.sameValue(i, 0); 119 120 firstIterResult = { value: null }; 121 Object.defineProperty(firstIterResult, 'done', { 122 get: function() { 123 return true; 124 } 125 }); 126 i = 0; 127 for (var x of iterable) { 128 i++; 129 } 130 assert.sameValue(i, 0); 131 132 reportCompare(0, 0);