| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --expose-debug-as debug --expose-gc |
| |
| function testMapMirror(mirror) { |
| // Create JSON representation. |
| var serializer = debug.MakeMirrorSerializer(); |
| var json = JSON.stringify(serializer.serializeValue(mirror)); |
| |
| // Check the mirror hierachy. |
| assertTrue(mirror instanceof debug.Mirror); |
| assertTrue(mirror instanceof debug.ValueMirror); |
| assertTrue(mirror instanceof debug.ObjectMirror); |
| assertTrue(mirror instanceof debug.MapMirror); |
| |
| assertTrue(mirror.isMap()); |
| |
| // Parse JSON representation and check. |
| var fromJSON = eval('(' + json + ')'); |
| assertEquals('map', fromJSON.type); |
| } |
| |
| function testSetMirror(mirror) { |
| // Create JSON representation. |
| var serializer = debug.MakeMirrorSerializer(); |
| var json = JSON.stringify(serializer.serializeValue(mirror)); |
| |
| // Check the mirror hierachy. |
| assertTrue(mirror instanceof debug.Mirror); |
| assertTrue(mirror instanceof debug.ValueMirror); |
| assertTrue(mirror instanceof debug.ObjectMirror); |
| assertTrue(mirror instanceof debug.SetMirror); |
| |
| assertTrue(mirror.isSet()); |
| |
| // Parse JSON representation and check. |
| var fromJSON = eval('(' + json + ')'); |
| assertEquals('set', fromJSON.type); |
| } |
| |
| var o1 = new Object(); |
| var o2 = new Object(); |
| var o3 = new Object(); |
| |
| // Test the mirror object for Maps |
| var map = new Map(); |
| map.set(o1, 11); |
| map.set(o2, 22); |
| map.delete(o1); |
| var mapMirror = debug.MakeMirror(map); |
| testMapMirror(mapMirror); |
| |
| var entries = mapMirror.entries(); |
| assertEquals(1, entries.length); |
| assertSame(o2, entries[0].key); |
| assertEquals(22, entries[0].value); |
| map.set(o1, 33); |
| map.set(o3, o2); |
| map.delete(o2); |
| map.set(undefined, 44); |
| |
| entries = mapMirror.entries(); |
| assertEquals(3, entries.length); |
| assertSame(o1, entries[0].key); |
| assertEquals(33, entries[0].value); |
| assertSame(o3, entries[1].key); |
| assertSame(o2, entries[1].value); |
| assertEquals(undefined, entries[2].key); |
| assertEquals(44, entries[2].value); |
| |
| assertEquals(3, mapMirror.entries(0).length); |
| assertEquals(1, mapMirror.entries(1).length); |
| assertEquals(2, mapMirror.entries(2).length); |
| |
| // Test the mirror object for Sets |
| var set = new Set(); |
| set.add(o1); |
| set.add(o2); |
| set.delete(o1); |
| set.add(undefined); |
| var setMirror = debug.MakeMirror(set); |
| testSetMirror(setMirror); |
| var values = setMirror.values(); |
| assertEquals(2, values.length); |
| assertEquals(1, setMirror.values(1).length); |
| assertSame(o2, values[0]); |
| assertEquals(undefined, values[1]); |
| |
| // Test the mirror object for WeakMaps |
| var weakMap = new WeakMap(); |
| weakMap.set(o1, 11); |
| weakMap.set(new Object(), 22); |
| weakMap.set(o3, 33); |
| weakMap.set(new Object(), 44); |
| var weakMapMirror = debug.MakeMirror(weakMap); |
| testMapMirror(weakMapMirror); |
| weakMap.set(new Object(), 55); |
| assertTrue(weakMapMirror.entries().length <= 5); |
| gc(); |
| |
| function testWeakMapEntries(weakMapMirror) { |
| var entries = weakMapMirror.entries(); |
| assertEquals(2, entries.length); |
| assertEquals(2, weakMapMirror.entries(0).length); |
| assertEquals(1, weakMapMirror.entries(1).length); |
| var found = 0; |
| for (var i = 0; i < entries.length; i++) { |
| if (Object.is(entries[i].key, o1)) { |
| assertEquals(11, entries[i].value); |
| found++; |
| } |
| if (Object.is(entries[i].key, o3)) { |
| assertEquals(33, entries[i].value); |
| found++; |
| } |
| } |
| assertEquals(2, found); |
| } |
| |
| testWeakMapEntries(weakMapMirror); |
| |
| // Test the mirror object for WeakSets |
| var weakSet = new WeakSet(); |
| weakSet.add(o1); |
| weakSet.add(new Object()); |
| weakSet.add(o2); |
| weakSet.add(new Object()); |
| weakSet.add(new Object()); |
| weakSet.add(o3); |
| weakSet.delete(o2); |
| var weakSetMirror = debug.MakeMirror(weakSet); |
| testSetMirror(weakSetMirror); |
| assertTrue(weakSetMirror.values().length <= 5); |
| gc(); |
| |
| function testWeakSetValues(weakSetMirror) { |
| var values = weakSetMirror.values(); |
| assertEquals(2, values.length); |
| assertEquals(2, weakSetMirror.values(0).length); |
| assertEquals(1, weakSetMirror.values(1).length); |
| var found = 0; |
| for (var i = 0; i < values.length; i++) { |
| if (Object.is(values[i], o1)) { |
| found++; |
| } |
| if (Object.is(values[i], o3)) { |
| found++; |
| } |
| } |
| assertEquals(2, found); |
| } |
| |
| testWeakSetValues(weakSetMirror); |