Revision f230a1cf deps/v8/test/mjsunit/harmony/object-observe.js
deps/v8/test/mjsunit/harmony/object-observe.js | ||
---|---|---|
110 | 110 |
|
111 | 111 |
|
112 | 112 |
// Object.observe |
113 |
assertThrows(function() { Object.observe("non-object", observer.callback); }, TypeError); |
|
113 |
assertThrows(function() { Object.observe("non-object", observer.callback); }, |
|
114 |
TypeError); |
|
114 | 115 |
assertThrows(function() { Object.observe(obj, nonFunction); }, TypeError); |
115 | 116 |
assertThrows(function() { Object.observe(obj, frozenFunction); }, TypeError); |
116 |
assertThrows(function() { Object.observe(obj, function() {}, 1); }, TypeError); |
|
117 |
assertThrows(function() { Object.observe(obj, function() {}, [undefined]); }, TypeError); |
|
118 |
assertThrows(function() { Object.observe(obj, function() {}, [1]); }, TypeError); |
|
119 |
assertThrows(function() { Object.observe(obj, function() {}, ['foo', null]); }, TypeError); |
|
120 |
assertEquals(obj, Object.observe(obj, observer.callback, ['foo', 'bar', 'baz'])); |
|
117 |
assertEquals(obj, Object.observe(obj, observer.callback, [1])); |
|
118 |
assertEquals(obj, Object.observe(obj, observer.callback, [true])); |
|
119 |
assertEquals(obj, Object.observe(obj, observer.callback, ['foo', null])); |
|
120 |
assertEquals(obj, Object.observe(obj, observer.callback, [undefined])); |
|
121 |
assertEquals(obj, Object.observe(obj, observer.callback, |
|
122 |
['foo', 'bar', 'baz'])); |
|
121 | 123 |
assertEquals(obj, Object.observe(obj, observer.callback, [])); |
122 | 124 |
assertEquals(obj, Object.observe(obj, observer.callback, undefined)); |
123 | 125 |
assertEquals(obj, Object.observe(obj, observer.callback)); |
... | ... | |
202 | 204 |
{ object: obj, name: 'bar', type: 'deleted', expando2: 'str' } |
203 | 205 |
]); |
204 | 206 |
|
207 |
// Non-string accept values are coerced to strings |
|
208 |
reset(); |
|
209 |
Object.observe(obj, observer.callback, [true, 1, null, undefined]); |
|
210 |
notifier = Object.getNotifier(obj); |
|
211 |
notifier.notify({ type: 'true' }); |
|
212 |
notifier.notify({ type: 'false' }); |
|
213 |
notifier.notify({ type: '1' }); |
|
214 |
notifier.notify({ type: '-1' }); |
|
215 |
notifier.notify({ type: 'null' }); |
|
216 |
notifier.notify({ type: 'nill' }); |
|
217 |
notifier.notify({ type: 'undefined' }); |
|
218 |
notifier.notify({ type: 'defined' }); |
|
219 |
Object.deliverChangeRecords(observer.callback); |
|
220 |
observer.assertCallbackRecords([ |
|
221 |
{ object: obj, type: 'true' }, |
|
222 |
{ object: obj, type: '1' }, |
|
223 |
{ object: obj, type: 'null' }, |
|
224 |
{ object: obj, type: 'undefined' } |
|
225 |
]); |
|
205 | 226 |
|
206 | 227 |
// No delivery takes place if no records are pending |
207 | 228 |
reset(); |
... | ... | |
265 | 286 |
{ object: obj, type: 'new', name: 'id' }, |
266 | 287 |
]); |
267 | 288 |
|
289 |
// The empty-string property is observable |
|
290 |
reset(); |
|
291 |
var obj = {}; |
|
292 |
Object.observe(obj, observer.callback); |
|
293 |
obj[''] = ''; |
|
294 |
obj[''] = ' '; |
|
295 |
delete obj['']; |
|
296 |
Object.deliverChangeRecords(observer.callback); |
|
297 |
observer.assertCallbackRecords([ |
|
298 |
{ object: obj, type: 'new', name: '' }, |
|
299 |
{ object: obj, type: 'updated', name: '', oldValue: '' }, |
|
300 |
{ object: obj, type: 'deleted', name: '', oldValue: ' ' }, |
|
301 |
]); |
|
302 |
|
|
268 | 303 |
// Observing a continuous stream of changes, while itermittantly unobserving. |
269 | 304 |
reset(); |
270 | 305 |
Object.observe(obj, observer.callback); |
... | ... | |
307 | 342 |
|
308 | 343 |
// Accept |
309 | 344 |
reset(); |
310 |
Object.observe(obj, observer.callback, []); |
|
345 |
Object.observe(obj, observer.callback, ['somethingElse']);
|
|
311 | 346 |
Object.getNotifier(obj).notify({ |
312 | 347 |
type: 'new' |
313 | 348 |
}); |
... | ... | |
1233 | 1268 |
{ object: array, name: '0', type: 'updated', oldValue: 2 }, |
1234 | 1269 |
]); |
1235 | 1270 |
|
1271 |
// Splice emitted after Array mutation methods |
|
1272 |
function MockArray(initial, observer) { |
|
1273 |
for (var i = 0; i < initial.length; i++) |
|
1274 |
this[i] = initial[i]; |
|
1275 |
|
|
1276 |
this.length_ = initial.length; |
|
1277 |
this.observer = observer; |
|
1278 |
} |
|
1279 |
MockArray.prototype = { |
|
1280 |
set length(length) { |
|
1281 |
Object.getNotifier(this).notify({ type: 'lengthChange' }); |
|
1282 |
this.length_ = length; |
|
1283 |
Object.observe(this, this.observer.callback, ['splice']); |
|
1284 |
}, |
|
1285 |
get length() { |
|
1286 |
return this.length_; |
|
1287 |
} |
|
1288 |
} |
|
1289 |
|
|
1290 |
reset(); |
|
1291 |
var array = new MockArray([], observer); |
|
1292 |
Object.observe(array, observer.callback, ['lengthChange']); |
|
1293 |
Array.prototype.push.call(array, 1); |
|
1294 |
Object.deliverChangeRecords(observer.callback); |
|
1295 |
observer.assertCallbackRecords([ |
|
1296 |
{ object: array, type: 'lengthChange' }, |
|
1297 |
{ object: array, type: 'splice', index: 0, removed: [], addedCount: 1 }, |
|
1298 |
]); |
|
1299 |
|
|
1300 |
reset(); |
|
1301 |
var array = new MockArray([1], observer); |
|
1302 |
Object.observe(array, observer.callback, ['lengthChange']); |
|
1303 |
Array.prototype.pop.call(array); |
|
1304 |
Object.deliverChangeRecords(observer.callback); |
|
1305 |
observer.assertCallbackRecords([ |
|
1306 |
{ object: array, type: 'lengthChange' }, |
|
1307 |
{ object: array, type: 'splice', index: 0, removed: [1], addedCount: 0 }, |
|
1308 |
]); |
|
1309 |
|
|
1310 |
reset(); |
|
1311 |
var array = new MockArray([1], observer); |
|
1312 |
Object.observe(array, observer.callback, ['lengthChange']); |
|
1313 |
Array.prototype.shift.call(array); |
|
1314 |
Object.deliverChangeRecords(observer.callback); |
|
1315 |
observer.assertCallbackRecords([ |
|
1316 |
{ object: array, type: 'lengthChange' }, |
|
1317 |
{ object: array, type: 'splice', index: 0, removed: [1], addedCount: 0 }, |
|
1318 |
]); |
|
1319 |
|
|
1320 |
reset(); |
|
1321 |
var array = new MockArray([], observer); |
|
1322 |
Object.observe(array, observer.callback, ['lengthChange']); |
|
1323 |
Array.prototype.unshift.call(array, 1); |
|
1324 |
Object.deliverChangeRecords(observer.callback); |
|
1325 |
observer.assertCallbackRecords([ |
|
1326 |
{ object: array, type: 'lengthChange' }, |
|
1327 |
{ object: array, type: 'splice', index: 0, removed: [], addedCount: 1 }, |
|
1328 |
]); |
|
1329 |
|
|
1330 |
reset(); |
|
1331 |
var array = new MockArray([0, 1, 2], observer); |
|
1332 |
Object.observe(array, observer.callback, ['lengthChange']); |
|
1333 |
Array.prototype.splice.call(array, 1, 1); |
|
1334 |
Object.deliverChangeRecords(observer.callback); |
|
1335 |
observer.assertCallbackRecords([ |
|
1336 |
{ object: array, type: 'lengthChange' }, |
|
1337 |
{ object: array, type: 'splice', index: 1, removed: [1], addedCount: 0 }, |
|
1338 |
]); |
|
1339 |
|
|
1236 | 1340 |
// |
1237 | 1341 |
// === PLAIN OBJECTS === |
1238 | 1342 |
// |
Also available in: Unified diff