1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Flags: --harmony-object-observe 6// Flags: --allow-natives-syntax 7 8var v = 0; 9 10function push_wrapper(array, value) { 11 array.push(value); 12} 13function pop_wrapper(array) { 14 return array.pop(); 15} 16 17// Test that Object.observe() notification events are properly sent from 18// Array.push() and Array.pop() both from optimized and un-optimized code. 19var array = []; 20 21function somethingChanged(changes) { 22 v++; 23} 24 25Object.observe(array, somethingChanged); 26push_wrapper(array, 1); 27%RunMicrotasks(); 28assertEquals(1, array.length); 29assertEquals(1, v); 30push_wrapper(array, 1); 31%RunMicrotasks(); 32assertEquals(2, array.length); 33assertEquals(2, v); 34%OptimizeFunctionOnNextCall(push_wrapper); 35push_wrapper(array, 1); 36%RunMicrotasks(); 37assertEquals(3, array.length); 38assertEquals(3, v); 39push_wrapper(array, 1); 40%RunMicrotasks(); 41assertEquals(4, array.length); 42assertEquals(4, v); 43 44pop_wrapper(array); 45%RunMicrotasks(); 46assertEquals(3, array.length); 47assertEquals(5, v); 48pop_wrapper(array); 49%RunMicrotasks(); 50assertEquals(2, array.length); 51assertEquals(6, v); 52%OptimizeFunctionOnNextCall(pop_wrapper); 53pop_wrapper(array); 54%RunMicrotasks(); 55assertEquals(1, array.length); 56assertEquals(7, v); 57pop_wrapper(array); 58%RunMicrotasks(); 59assertEquals(0, array.length); 60assertEquals(8, v); 61