OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 Object.defineProperty(obj, prop, {writable: false}); | 398 Object.defineProperty(obj, prop, {writable: false}); |
399 obj[prop] = 7; // ignored | 399 obj[prop] = 7; // ignored |
400 Object.defineProperty(obj, prop, {value: 8}); | 400 Object.defineProperty(obj, prop, {value: 8}); |
401 Object.defineProperty(obj, prop, {value: 7, writable: true}); | 401 Object.defineProperty(obj, prop, {value: 7, writable: true}); |
402 Object.defineProperty(obj, prop, {get: function() {}}); | 402 Object.defineProperty(obj, prop, {get: function() {}}); |
403 Object.defineProperty(obj, prop, {get: frozenFunction}); | 403 Object.defineProperty(obj, prop, {get: frozenFunction}); |
404 Object.defineProperty(obj, prop, {get: frozenFunction}); // ignored | 404 Object.defineProperty(obj, prop, {get: frozenFunction}); // ignored |
405 Object.defineProperty(obj, prop, {get: frozenFunction, set: frozenFunction}); | 405 Object.defineProperty(obj, prop, {get: frozenFunction, set: frozenFunction}); |
406 Object.defineProperty(obj, prop, {set: frozenFunction}); // ignored | 406 Object.defineProperty(obj, prop, {set: frozenFunction}); // ignored |
407 Object.defineProperty(obj, prop, {get: undefined, set: frozenFunction}); | 407 Object.defineProperty(obj, prop, {get: undefined, set: frozenFunction}); |
| 408 obj.__defineSetter__(prop, frozenFunction); // ignored |
| 409 obj.__defineSetter__(prop, function() {}); |
| 410 obj.__defineGetter__(prop, function() {}); |
408 delete obj[prop]; | 411 delete obj[prop]; |
| 412 delete obj[prop]; // ignored |
| 413 obj.__defineGetter__(prop, function() {}); |
409 delete obj[prop]; | 414 delete obj[prop]; |
410 Object.defineProperty(obj, prop, {get: function() {}, configurable: true}); | 415 Object.defineProperty(obj, prop, {get: function() {}, configurable: true}); |
411 Object.defineProperty(obj, prop, {value: 9, writable: true}); | 416 Object.defineProperty(obj, prop, {value: 9, writable: true}); |
412 obj[prop] = 10; | 417 obj[prop] = 10; |
413 delete obj[prop]; | 418 delete obj[prop]; |
414 Object.defineProperty(obj, prop, {value: 11, configurable: true}); | 419 Object.defineProperty(obj, prop, {value: 11, configurable: true}); |
415 Object.deliverChangeRecords(observer.callback); | 420 Object.deliverChangeRecords(observer.callback); |
416 observer.assertCallbackRecords([ | 421 observer.assertCallbackRecords([ |
417 { object: obj, name: prop, type: "updated", oldValue: 1 }, | 422 { object: obj, name: prop, type: "updated", oldValue: 1 }, |
418 { object: obj, name: prop, type: "updated", oldValue: 2 }, | 423 { object: obj, name: prop, type: "updated", oldValue: 2 }, |
419 { object: obj, name: prop, type: "deleted", oldValue: 3 }, | 424 { object: obj, name: prop, type: "deleted", oldValue: 3 }, |
420 { object: obj, name: prop, type: "new" }, | 425 { object: obj, name: prop, type: "new" }, |
421 { object: obj, name: prop, type: "updated", oldValue: 4 }, | 426 { object: obj, name: prop, type: "updated", oldValue: 4 }, |
422 { object: obj, name: prop, type: "updated", oldValue: 5 }, | 427 { object: obj, name: prop, type: "updated", oldValue: 5 }, |
423 { object: obj, name: prop, type: "reconfigured", oldValue: 6 }, | 428 { object: obj, name: prop, type: "reconfigured", oldValue: 6 }, |
424 { object: obj, name: prop, type: "updated", oldValue: 6 }, | 429 { object: obj, name: prop, type: "updated", oldValue: 6 }, |
425 { object: obj, name: prop, type: "reconfigured", oldValue: 8 }, | 430 { object: obj, name: prop, type: "reconfigured", oldValue: 8 }, |
426 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, | 431 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, |
427 { object: obj, name: prop, type: "reconfigured" }, | 432 { object: obj, name: prop, type: "reconfigured" }, |
428 { object: obj, name: prop, type: "reconfigured" }, | 433 { object: obj, name: prop, type: "reconfigured" }, |
429 { object: obj, name: prop, type: "reconfigured" }, | 434 { object: obj, name: prop, type: "reconfigured" }, |
| 435 { object: obj, name: prop, type: "reconfigured" }, |
| 436 { object: obj, name: prop, type: "reconfigured" }, |
430 { object: obj, name: prop, type: "deleted" }, | 437 { object: obj, name: prop, type: "deleted" }, |
431 { object: obj, name: prop, type: "new" }, | 438 { object: obj, name: prop, type: "new" }, |
| 439 { object: obj, name: prop, type: "deleted" }, |
| 440 { object: obj, name: prop, type: "new" }, |
432 { object: obj, name: prop, type: "reconfigured" }, | 441 { object: obj, name: prop, type: "reconfigured" }, |
433 { object: obj, name: prop, type: "updated", oldValue: 9 }, | 442 { object: obj, name: prop, type: "updated", oldValue: 9 }, |
434 { object: obj, name: prop, type: "deleted", oldValue: 10 }, | 443 { object: obj, name: prop, type: "deleted", oldValue: 10 }, |
435 { object: obj, name: prop, type: "new" }, | 444 { object: obj, name: prop, type: "new" }, |
436 ]); | 445 ]); |
437 Object.unobserve(obj, observer.callback); | 446 Object.unobserve(obj, observer.callback); |
438 delete obj[prop]; | 447 delete obj[prop]; |
439 } | 448 } |
440 | 449 |
441 function TestObserveNonConfigurable(obj, prop) { | 450 function TestObserveNonConfigurable(obj, prop) { |
(...skipping 17 matching lines...) Expand all Loading... |
459 { object: obj, name: prop, type: "updated", oldValue: 5 }, | 468 { object: obj, name: prop, type: "updated", oldValue: 5 }, |
460 { object: obj, name: prop, type: "updated", oldValue: 6 }, | 469 { object: obj, name: prop, type: "updated", oldValue: 6 }, |
461 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, | 470 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, |
462 ]); | 471 ]); |
463 Object.unobserve(obj, observer.callback); | 472 Object.unobserve(obj, observer.callback); |
464 } | 473 } |
465 | 474 |
466 function createProxy(create, x) { | 475 function createProxy(create, x) { |
467 var handler = { | 476 var handler = { |
468 getPropertyDescriptor: function(k) { | 477 getPropertyDescriptor: function(k) { |
469 return Object.getOwnPropertyDescriptor(this.target, k); | 478 for (var o = this.target; o; o = Object.getPrototypeOf(o)) { |
| 479 var desc = Object.getOwnPropertyDescriptor(o, k); |
| 480 if (desc) return desc; |
| 481 } |
| 482 return undefined; |
470 }, | 483 }, |
471 getOwnPropertyDescriptor: function(k) { | 484 getOwnPropertyDescriptor: function(k) { |
472 return Object.getOwnPropertyDescriptor(this.target, k); | 485 return Object.getOwnPropertyDescriptor(this.target, k); |
473 }, | 486 }, |
474 defineProperty: function(k, desc) { | 487 defineProperty: function(k, desc) { |
475 var x = Object.defineProperty(this.target, k, desc); | 488 var x = Object.defineProperty(this.target, k, desc); |
476 Object.deliverChangeRecords(this.callback); | 489 Object.deliverChangeRecords(this.callback); |
477 return x; | 490 return x; |
478 }, | 491 }, |
479 delete: function(k) { | 492 delete: function(k) { |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 Object.observe(dummy, observer.callback); | 804 Object.observe(dummy, observer.callback); |
792 Object.unobserve(dummy, observer.callback); | 805 Object.unobserve(dummy, observer.callback); |
793 var array = [0]; | 806 var array = [0]; |
794 Object.observe(array, observer.callback); | 807 Object.observe(array, observer.callback); |
795 array.splice(0, 1); | 808 array.splice(0, 1); |
796 Object.deliverChangeRecords(observer.callback); | 809 Object.deliverChangeRecords(observer.callback); |
797 observer.assertCallbackRecords([ | 810 observer.assertCallbackRecords([ |
798 { object: array, name: '0', type: 'deleted', oldValue: 0 }, | 811 { object: array, name: '0', type: 'deleted', oldValue: 0 }, |
799 { object: array, name: 'length', type: 'updated', oldValue: 1}, | 812 { object: array, name: 'length', type: 'updated', oldValue: 1}, |
800 ]); | 813 ]); |
OLD | NEW |