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: --expose-debug-as debug
7
8Debug = debug.Debug;
9
10var base_id = -1;
11var exception = null;
12var expected = [
13  "enqueue #1",
14  "willHandle #1",
15  "didHandle #1",
16];
17
18function assertLog(msg) {
19  print(msg);
20  assertTrue(expected.length > 0);
21  assertEquals(expected.shift(), msg);
22  if (!expected.length) {
23    Debug.setListener(null);
24  }
25}
26
27function listener(event, exec_state, event_data, data) {
28  if (event != Debug.DebugEvent.AsyncTaskEvent) return;
29  try {
30    if (base_id < 0)
31      base_id = event_data.id();
32    var id = event_data.id() - base_id + 1;
33    assertEquals("Object.observe", event_data.name());
34    assertLog(event_data.type() + " #" + id);
35  } catch (e) {
36    print(e + e.stack)
37    exception = e;
38  }
39}
40
41Debug.setListener(listener);
42
43var obj = {};
44Object.observe(obj, function(changes) {
45  print(change.type + " " + change.name + " " + change.oldValue);
46});
47
48obj.foo = 1;
49obj.zoo = 2;
50obj.foo = 3;
51
52assertNull(exception);
53