Revision f230a1cf deps/v8/test/mjsunit/harmony/object-observe.js

View differences:

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