OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var global = this; | 5 var global = this; |
6 var globalProto = Object.getPrototypeOf(global); | 6 var globalProto = Object.getPrototypeOf(global); |
7 | 7 |
8 // Number of objects being tested. There is an assert ensuring this is correct. | 8 // Number of objects being tested. There is an assert ensuring this is correct. |
9 var objectCount = 21; | 9 var objectCount = 21; |
10 | 10 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 var z = 3; | 123 var z = 3; |
124 object.x = 4; | 124 object.x = 4; |
125 object.y = 5; | 125 object.y = 5; |
126 | 126 |
127 with (object) { | 127 with (object) { |
128 assertEquals(4, x); | 128 assertEquals(4, x); |
129 assertEquals(5, y); | 129 assertEquals(5, y); |
130 assertEquals(3, z); | 130 assertEquals(3, z); |
131 } | 131 } |
132 | 132 |
133 object[Symbol.unscopables] = {x: true}; | 133 var truthyValues = [true, 1, 'x', {}, Symbol()]; |
134 with (object) { | 134 for (var truthyValue of truthyValues) { |
135 assertEquals(1, x); | 135 object[Symbol.unscopables] = {x: truthyValue}; |
136 assertEquals(5, y); | 136 with (object) { |
137 assertEquals(3, z); | 137 assertEquals(1, x); |
| 138 assertEquals(5, y); |
| 139 assertEquals(3, z); |
| 140 } |
138 } | 141 } |
139 | 142 |
140 object[Symbol.unscopables] = {x: 0, y: true}; | 143 var falsyValues = [false, 0, -0, NaN, '', null, undefined]; |
141 with (object) { | 144 for (var falsyValue of falsyValues) { |
142 assertEquals(1, x); | 145 object[Symbol.unscopables] = {x: falsyValue, y: true}; |
143 assertEquals(2, y); | 146 with (object) { |
144 assertEquals(3, z); | 147 assertEquals(4, x); |
| 148 assertEquals(2, y); |
| 149 assertEquals(3, z); |
| 150 } |
145 } | 151 } |
146 | 152 |
147 object[Symbol.unscopables] = {x: 0, y: undefined}; | 153 for (var xFalsy of falsyValues) { |
148 with (object) { | 154 for (var yFalsy of falsyValues) { |
149 assertEquals(1, x); | 155 object[Symbol.unscopables] = {x: xFalsy, y: yFalsy}; |
150 assertEquals(5, y); | 156 with (object) { |
151 assertEquals(3, z); | 157 assertEquals(4, x); |
| 158 assertEquals(5, y); |
| 159 assertEquals(3, z); |
| 160 } |
| 161 } |
152 } | 162 } |
153 } | 163 } |
154 runTest(TestBasics); | 164 runTest(TestBasics); |
155 | 165 |
156 | 166 |
157 function TestUnscopableChain(object) { | 167 function TestUnscopableChain(object) { |
158 var x = 1; | 168 var x = 1; |
159 object.x = 2; | 169 object.x = 2; |
160 | 170 |
161 with (object) { | 171 with (object) { |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 throw new CustomError(); | 724 throw new CustomError(); |
715 } | 725 } |
716 }; | 726 }; |
717 assertThrows(function() { | 727 assertThrows(function() { |
718 with (object) { | 728 with (object) { |
719 x; | 729 x; |
720 } | 730 } |
721 }, CustomError); | 731 }, CustomError); |
722 } | 732 } |
723 TestGetUnscopablesGetterThrows(); | 733 TestGetUnscopablesGetterThrows(); |
OLD | NEW |