| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 desc = Object.getOwnPropertyDescriptor(obj1, "bar"); | 171 desc = Object.getOwnPropertyDescriptor(obj1, "bar"); |
| 172 assertFalse(desc.configurable); | 172 assertFalse(desc.configurable); |
| 173 assertFalse(desc.enumerable); | 173 assertFalse(desc.enumerable); |
| 174 assertEquals(desc.writable, undefined); | 174 assertEquals(desc.writable, undefined); |
| 175 assertEquals(desc.get, accessorNoConfigurable.get); | 175 assertEquals(desc.get, accessorNoConfigurable.get); |
| 176 assertEquals(desc.set, accessorNoConfigurable.set); | 176 assertEquals(desc.set, accessorNoConfigurable.set); |
| 177 assertEquals(desc.value, undefined); | 177 assertEquals(desc.value, undefined); |
| 178 assertEquals(1, obj1.bar = 1); | 178 assertEquals(1, obj1.bar = 1); |
| 179 assertEquals(2, val1); | 179 assertEquals(2, val1); |
| 180 assertEquals(1, val2); | 180 assertEquals(1, val2); |
| 181 assertEquals(1, obj1.bar = 1) | 181 assertEquals(1, obj1.bar = 1); |
| 182 assertEquals(2, val1); | 182 assertEquals(2, val1); |
| 183 assertEquals(2, val2); | 183 assertEquals(2, val2); |
| 184 assertEquals(2, obj1.bar); | 184 assertEquals(2, obj1.bar); |
| 185 | 185 |
| 186 // Try to redefine bar again - should fail as configurable is false. | 186 // Try to redefine bar again - should fail as configurable is false. |
| 187 try { | 187 try { |
| 188 Object.defineProperty(obj1, "bar", accessorConfigurable); | 188 Object.defineProperty(obj1, "bar", accessorConfigurable); |
| 189 assertTrue(false); | 189 assertTrue(false); |
| 190 } catch(e) { | 190 } catch(e) { |
| 191 assertTrue(/Cannot redefine property/.test(e)); | 191 assertTrue(/Cannot redefine property/.test(e)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 204 desc = Object.getOwnPropertyDescriptor(obj1, "bar"); | 204 desc = Object.getOwnPropertyDescriptor(obj1, "bar"); |
| 205 assertFalse(desc.configurable); | 205 assertFalse(desc.configurable); |
| 206 assertFalse(desc.enumerable); | 206 assertFalse(desc.enumerable); |
| 207 assertEquals(desc.writable, undefined); | 207 assertEquals(desc.writable, undefined); |
| 208 assertEquals(desc.get, accessorNoConfigurable.get); | 208 assertEquals(desc.get, accessorNoConfigurable.get); |
| 209 assertEquals(desc.set, accessorNoConfigurable.set); | 209 assertEquals(desc.set, accessorNoConfigurable.set); |
| 210 assertEquals(desc.value, undefined); | 210 assertEquals(desc.value, undefined); |
| 211 assertEquals(1, obj1.bar = 1); | 211 assertEquals(1, obj1.bar = 1); |
| 212 assertEquals(2, val1); | 212 assertEquals(2, val1); |
| 213 assertEquals(3, val2); | 213 assertEquals(3, val2); |
| 214 assertEquals(1, obj1.bar = 1) | 214 assertEquals(1, obj1.bar = 1); |
| 215 assertEquals(2, val1); | 215 assertEquals(2, val1); |
| 216 assertEquals(4, val2); | 216 assertEquals(4, val2); |
| 217 assertEquals(4, obj1.bar); | 217 assertEquals(4, obj1.bar); |
| 218 | 218 |
| 219 // Define an accessor that has only a setter. | 219 // Define an accessor that has only a setter. |
| 220 Object.defineProperty(obj1, "setOnly", accessorOnlySet); | 220 Object.defineProperty(obj1, "setOnly", accessorOnlySet); |
| 221 desc = Object.getOwnPropertyDescriptor(obj1, "setOnly"); | 221 desc = Object.getOwnPropertyDescriptor(obj1, "setOnly"); |
| 222 assertTrue(desc.configurable); | 222 assertTrue(desc.configurable); |
| 223 assertFalse(desc.enumerable); | 223 assertFalse(desc.enumerable); |
| 224 assertEquals(desc.set, accessorOnlySet.set); | 224 assertEquals(desc.set, accessorOnlySet.set); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 assertEquals(desc.writable, undefined); | 355 assertEquals(desc.writable, undefined); |
| 356 assertEquals(desc.get, accessorConfigurable.get); | 356 assertEquals(desc.get, accessorConfigurable.get); |
| 357 assertEquals(desc.set, accessorConfigurable.set); | 357 assertEquals(desc.set, accessorConfigurable.set); |
| 358 assertEquals(desc.value, undefined); | 358 assertEquals(desc.value, undefined); |
| 359 assertEquals(1, obj2.foo = 1); | 359 assertEquals(1, obj2.foo = 1); |
| 360 assertEquals(3, val1); | 360 assertEquals(3, val1); |
| 361 assertEquals(4, val2); | 361 assertEquals(4, val2); |
| 362 assertEquals(3, obj2.foo); | 362 assertEquals(3, obj2.foo); |
| 363 | 363 |
| 364 // Make data - redefine to accessor | 364 // Make data - redefine to accessor |
| 365 Object.defineProperty(obj2, "bar", dataConfigurable) | 365 Object.defineProperty(obj2, "bar", dataConfigurable); |
| 366 | 366 |
| 367 // Redefine to accessor property | 367 // Redefine to accessor property |
| 368 Object.defineProperty(obj2, "bar", accessorConfigurable); | 368 Object.defineProperty(obj2, "bar", accessorConfigurable); |
| 369 desc = Object.getOwnPropertyDescriptor(obj2, "bar"); | 369 desc = Object.getOwnPropertyDescriptor(obj2, "bar"); |
| 370 assertTrue(desc.configurable); | 370 assertTrue(desc.configurable); |
| 371 assertFalse(desc.enumerable); | 371 assertFalse(desc.enumerable); |
| 372 assertEquals(desc.writable, undefined); | 372 assertEquals(desc.writable, undefined); |
| 373 assertEquals(desc.get, accessorConfigurable.get); | 373 assertEquals(desc.get, accessorConfigurable.get); |
| 374 assertEquals(desc.set, accessorConfigurable.set); | 374 assertEquals(desc.set, accessorConfigurable.set); |
| 375 assertEquals(desc.value, undefined); | 375 assertEquals(desc.value, undefined); |
| 376 assertEquals(1, obj2.bar = 1); | 376 assertEquals(1, obj2.bar = 1); |
| 377 assertEquals(4, val1); | 377 assertEquals(4, val1); |
| 378 assertEquals(4, val2); | 378 assertEquals(4, val2); |
| 379 assertEquals(4, obj2.foo); | 379 assertEquals(4, obj2.foo); |
| 380 | 380 |
| 381 // Redefine back to data property | 381 // Redefine back to data property |
| 382 Object.defineProperty(obj2, "bar", dataConfigurable); | 382 Object.defineProperty(obj2, "bar", dataConfigurable); |
| 383 desc = Object.getOwnPropertyDescriptor(obj2, "bar"); | 383 desc = Object.getOwnPropertyDescriptor(obj2, "bar"); |
| 384 assertEquals(obj2.bar, 1000); | 384 assertEquals(obj2.bar, 1000); |
| 385 assertEquals(desc.value, 1000); | 385 assertEquals(desc.value, 1000); |
| 386 assertTrue(desc.configurable); | 386 assertTrue(desc.configurable); |
| 387 assertFalse(desc.writable); | 387 assertFalse(desc.writable); |
| 388 assertFalse(desc.enumerable); | 388 assertFalse(desc.enumerable); |
| 389 assertEquals(desc.get, undefined); | 389 assertEquals(desc.get, undefined); |
| 390 assertEquals(desc.set, undefined); | 390 assertEquals(desc.set, undefined); |
| 391 | 391 |
| 392 | 392 |
| 393 // Redefinition of an accessor defined using __defineGetter__ and | 393 // Redefinition of an accessor defined using __defineGetter__ and |
| 394 // __defineSetter__. | 394 // __defineSetter__. |
| 395 function get(){return this.x} | 395 function get() { return this.x; } |
| 396 function set(x){this.x=x}; | 396 function set(x) { this.x = x; } |
| 397 | 397 |
| 398 var obj3 = {x:1000}; | 398 var obj3 = {x:1000}; |
| 399 obj3.__defineGetter__("foo", get); | 399 obj3.__defineGetter__("foo", get); |
| 400 obj3.__defineSetter__("foo", set); | 400 obj3.__defineSetter__("foo", set); |
| 401 | 401 |
| 402 desc = Object.getOwnPropertyDescriptor(obj3, "foo"); | 402 desc = Object.getOwnPropertyDescriptor(obj3, "foo"); |
| 403 assertTrue(desc.configurable); | 403 assertTrue(desc.configurable); |
| 404 assertTrue(desc.enumerable); | 404 assertTrue(desc.enumerable); |
| 405 assertEquals(desc.writable, undefined); | 405 assertEquals(desc.writable, undefined); |
| 406 assertEquals(desc.get, get); | 406 assertEquals(desc.get, get); |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 { get: undefined, set: setter1, enumerable : false, configurable : false }); | 1047 { get: undefined, set: setter1, enumerable : false, configurable : false }); |
| 1048 | 1048 |
| 1049 | 1049 |
| 1050 // Regression test: Ensure that growing dictionaries are not ignored. | 1050 // Regression test: Ensure that growing dictionaries are not ignored. |
| 1051 o = {}; | 1051 o = {}; |
| 1052 for (var i = 0; i < 1000; i++) { | 1052 for (var i = 0; i < 1000; i++) { |
| 1053 // Non-enumerable property forces dictionary mode. | 1053 // Non-enumerable property forces dictionary mode. |
| 1054 Object.defineProperty(o, i, {value: i, enumerable: false}); | 1054 Object.defineProperty(o, i, {value: i, enumerable: false}); |
| 1055 } | 1055 } |
| 1056 assertEquals(999, o[999]); | 1056 assertEquals(999, o[999]); |
| OLD | NEW |