Chromium Code Reviews| Index: test/mjsunit/harmony/object-observe.js |
| diff --git a/test/mjsunit/harmony/object-observe.js b/test/mjsunit/harmony/object-observe.js |
| index f94ab75e9a84d2cf0d819510782b23a660057bcc..d190016ca79c46e2da96f8fb7a140bea9047561b 100644 |
| --- a/test/mjsunit/harmony/object-observe.js |
| +++ b/test/mjsunit/harmony/object-observe.js |
| @@ -300,8 +300,79 @@ observer.assertCallbackRecords([ |
| { object: obj, type: 'deleted', name: '', oldValue: ' ' }, |
| ]); |
| +// Object.preventExtensions |
|
rossberg
2013/10/30 19:11:45
Cases you could add:
- invoking preventExtensions
rafaelw
2013/10/30 23:00:30
Good catch. Note that we now exit early from JSObj
rossberg
2013/10/31 08:03:20
Can you add a similar test for seal and freeze?
rafaelw
2013/11/05 12:20:31
Done.
|
| +reset(); |
| +var obj = { foo: 'bar'}; |
| +Object.observe(obj, observer.callback); |
| +obj.baz = 'bat'; |
| +Object.preventExtensions(obj); |
| + |
| +Object.deliverChangeRecords(observer.callback); |
| +observer.assertCallbackRecords([ |
| + { object: obj, type: 'new', name: 'baz' }, |
| + { object: obj, type: 'preventExtensions' }, |
| +]); |
| + |
| +// Object.freeze |
| +reset(); |
| +var obj = { a: 'a' }; |
| +Object.defineProperty(obj, 'b', { |
| + writable: false, |
| + configurable: true, |
| + value: 'b' |
| +}); |
| +Object.defineProperty(obj, 'c', { |
| + writable: true, |
| + configurable: false, |
| + value: 'c' |
| +}); |
| +Object.defineProperty(obj, 'd', { |
| + writable: false, |
| + configurable: false, |
| + value: 'd' |
| +}); |
| +Object.observe(obj, observer.callback); |
| +Object.freeze(obj); |
| + |
| +Object.deliverChangeRecords(observer.callback); |
| +observer.assertCallbackRecords([ |
| + { object: obj, type: 'reconfigured', name: 'a' }, |
| + { object: obj, type: 'reconfigured', name: 'b' }, |
| + { object: obj, type: 'reconfigured', name: 'c' }, |
| + { object: obj, type: 'preventExtensions' }, |
| +]); |
| + |
| +// Object.seal |
| +reset(); |
| +var obj = { a: 'a' }; |
| +Object.defineProperty(obj, 'b', { |
| + writable: false, |
| + configurable: true, |
| + value: 'b' |
| +}); |
| +Object.defineProperty(obj, 'c', { |
| + writable: true, |
| + configurable: false, |
| + value: 'c' |
| +}); |
| +Object.defineProperty(obj, 'd', { |
| + writable: false, |
| + configurable: false, |
| + value: 'd' |
| +}); |
| +Object.observe(obj, observer.callback); |
| +Object.seal(obj); |
| + |
| +Object.deliverChangeRecords(observer.callback); |
| +observer.assertCallbackRecords([ |
| + { object: obj, type: 'reconfigured', name: 'a' }, |
| + { object: obj, type: 'reconfigured', name: 'b' }, |
| + { object: obj, type: 'preventExtensions' }, |
| +]); |
| + |
| // Observing a continuous stream of changes, while itermittantly unobserving. |
| reset(); |
| +var obj = {}; |
| Object.observe(obj, observer.callback); |
| Object.getNotifier(obj).notify({ |
| type: 'updated', |