blob: 4232ef91cb41cab69ebfa0dcdad226e1d508be8c [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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: --expose-debug-as debug --expose-gc
6
7function testMapMirror(mirror) {
8 // Create JSON representation.
9 var serializer = debug.MakeMirrorSerializer();
10 var json = JSON.stringify(serializer.serializeValue(mirror));
11
12 // Check the mirror hierachy.
13 assertTrue(mirror instanceof debug.Mirror);
14 assertTrue(mirror instanceof debug.ValueMirror);
15 assertTrue(mirror instanceof debug.ObjectMirror);
16 assertTrue(mirror instanceof debug.MapMirror);
17
18 assertTrue(mirror.isMap());
19
20 // Parse JSON representation and check.
21 var fromJSON = eval('(' + json + ')');
22 assertEquals('map', fromJSON.type);
23}
24
25function testSetMirror(mirror) {
26 // Create JSON representation.
27 var serializer = debug.MakeMirrorSerializer();
28 var json = JSON.stringify(serializer.serializeValue(mirror));
29
30 // Check the mirror hierachy.
31 assertTrue(mirror instanceof debug.Mirror);
32 assertTrue(mirror instanceof debug.ValueMirror);
33 assertTrue(mirror instanceof debug.ObjectMirror);
34 assertTrue(mirror instanceof debug.SetMirror);
35
36 assertTrue(mirror.isSet());
37
38 // Parse JSON representation and check.
39 var fromJSON = eval('(' + json + ')');
40 assertEquals('set', fromJSON.type);
41}
42
43var o1 = new Object();
44var o2 = new Object();
45var o3 = new Object();
46
47// Test the mirror object for Maps
48var map = new Map();
49map.set(o1, 11);
50map.set(o2, 22);
51map.delete(o1);
52var mapMirror = debug.MakeMirror(map);
53testMapMirror(mapMirror);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040054
Ben Murdochb8a8cc12014-11-26 15:28:44 +000055var entries = mapMirror.entries();
56assertEquals(1, entries.length);
57assertSame(o2, entries[0].key);
58assertEquals(22, entries[0].value);
59map.set(o1, 33);
60map.set(o3, o2);
61map.delete(o2);
62map.set(undefined, 44);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040063
Ben Murdochb8a8cc12014-11-26 15:28:44 +000064entries = mapMirror.entries();
65assertEquals(3, entries.length);
66assertSame(o1, entries[0].key);
67assertEquals(33, entries[0].value);
68assertSame(o3, entries[1].key);
69assertSame(o2, entries[1].value);
70assertEquals(undefined, entries[2].key);
71assertEquals(44, entries[2].value);
72
Emily Bernierd0a1eb72015-03-24 16:35:39 -040073assertEquals(3, mapMirror.entries(0).length);
74assertEquals(1, mapMirror.entries(1).length);
75assertEquals(2, mapMirror.entries(2).length);
76
Ben Murdochb8a8cc12014-11-26 15:28:44 +000077// Test the mirror object for Sets
78var set = new Set();
79set.add(o1);
80set.add(o2);
81set.delete(o1);
82set.add(undefined);
83var setMirror = debug.MakeMirror(set);
84testSetMirror(setMirror);
85var values = setMirror.values();
86assertEquals(2, values.length);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040087assertEquals(1, setMirror.values(1).length);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000088assertSame(o2, values[0]);
89assertEquals(undefined, values[1]);
90
Ben Murdochc5610432016-08-08 18:44:38 +010091function initWeakMap(weakMap) {
92 weakMap.set(o1, 11);
93 weakMap.set(new Object(), 22);
94 weakMap.set(o3, 33);
95 weakMap.set(new Object(), 44);
96 var weakMapMirror = debug.MakeMirror(weakMap);
97 testMapMirror(weakMapMirror);
98 weakMap.set(new Object(), 55);
99 assertTrue(weakMapMirror.entries().length <= 5);
100 return weakMapMirror;
101}
102
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000103// Test the mirror object for WeakMaps
104var weakMap = new WeakMap();
Ben Murdochc5610432016-08-08 18:44:38 +0100105var weakMapMirror = initWeakMap(weakMap);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000106gc();
107
108function testWeakMapEntries(weakMapMirror) {
109 var entries = weakMapMirror.entries();
110 assertEquals(2, entries.length);
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400111 assertEquals(2, weakMapMirror.entries(0).length);
112 assertEquals(1, weakMapMirror.entries(1).length);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000113 var found = 0;
114 for (var i = 0; i < entries.length; i++) {
115 if (Object.is(entries[i].key, o1)) {
116 assertEquals(11, entries[i].value);
117 found++;
118 }
119 if (Object.is(entries[i].key, o3)) {
120 assertEquals(33, entries[i].value);
121 found++;
122 }
123 }
124 assertEquals(2, found);
125}
126
127testWeakMapEntries(weakMapMirror);
128
Ben Murdochc5610432016-08-08 18:44:38 +0100129function initWeakSet(weakSet) {
130 weakSet.add(o1);
131 weakSet.add(new Object());
132 weakSet.add(o2);
133 weakSet.add(new Object());
134 weakSet.add(new Object());
135 weakSet.add(o3);
136 weakSet.delete(o2);
137 var weakSetMirror = debug.MakeMirror(weakSet);
138 testSetMirror(weakSetMirror);
139 assertTrue(weakSetMirror.values().length <= 5);
140 return weakSetMirror;
141}
142
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000143// Test the mirror object for WeakSets
144var weakSet = new WeakSet();
Ben Murdochc5610432016-08-08 18:44:38 +0100145var weakSetMirror = initWeakSet(weakSet);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000146gc();
147
148function testWeakSetValues(weakSetMirror) {
149 var values = weakSetMirror.values();
150 assertEquals(2, values.length);
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400151 assertEquals(2, weakSetMirror.values(0).length);
152 assertEquals(1, weakSetMirror.values(1).length);
Ben Murdochb8a8cc12014-11-26 15:28:44 +0000153 var found = 0;
154 for (var i = 0; i < values.length; i++) {
155 if (Object.is(values[i], o1)) {
156 found++;
157 }
158 if (Object.is(values[i], o3)) {
159 found++;
160 }
161 }
162 assertEquals(2, found);
163}
164
165testWeakSetValues(weakSetMirror);