Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: test/mjsunit/mirror-object.js

Issue 443843004: Mirror object properties are always names (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« src/mirror-debugger.js ('K') | « src/mirror-debugger.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 22 matching lines...) Expand all
33 this.refs_ = []; 33 this.refs_ = [];
34 for (var i = 0; i < tmp.length; i++) { 34 for (var i = 0; i < tmp.length; i++) {
35 this.refs_[tmp[i].handle] = tmp[i]; 35 this.refs_[tmp[i].handle] = tmp[i];
36 } 36 }
37 } 37 }
38 38
39 MirrorRefCache.prototype.lookup = function(handle) { 39 MirrorRefCache.prototype.lookup = function(handle) {
40 return this.refs_[handle]; 40 return this.refs_[handle];
41 }; 41 };
42 42
43 function isName(val) {
44 return typeof val === 'string' || typeof val === 'symbol';
45 }
46
43 function testObjectMirror(obj, cls_name, ctor_name, hasSpecialProperties) { 47 function testObjectMirror(obj, cls_name, ctor_name, hasSpecialProperties) {
44 // Create mirror and JSON representation. 48 // Create mirror and JSON representation.
45 var mirror = debug.MakeMirror(obj); 49 var mirror = debug.MakeMirror(obj);
46 var serializer = debug.MakeMirrorSerializer(); 50 var serializer = debug.MakeMirrorSerializer();
47 var json = JSON.stringify(serializer.serializeValue(mirror)); 51 var json = JSON.stringify(serializer.serializeValue(mirror));
48 var refs = new MirrorRefCache( 52 var refs = new MirrorRefCache(
49 JSON.stringify(serializer.serializeReferencedObjects())); 53 JSON.stringify(serializer.serializeReferencedObjects()));
50 54
51 // Check the mirror hierachy. 55 // Check the mirror hierachy.
52 assertTrue(mirror instanceof debug.Mirror, 'Unexpected mirror hierarchy'); 56 assertTrue(mirror instanceof debug.Mirror, 'Unexpected mirror hierarchy');
(...skipping 12 matching lines...) Expand all
65 assertFalse(mirror.hasNamedInterceptor(), 'No named interceptor expected'); 69 assertFalse(mirror.hasNamedInterceptor(), 'No named interceptor expected');
66 assertFalse(mirror.hasIndexedInterceptor(), 'No indexed interceptor expected') ; 70 assertFalse(mirror.hasIndexedInterceptor(), 'No indexed interceptor expected') ;
67 71
68 var names = mirror.propertyNames(); 72 var names = mirror.propertyNames();
69 var properties = mirror.properties(); 73 var properties = mirror.properties();
70 assertEquals(names.length, properties.length); 74 assertEquals(names.length, properties.length);
71 for (var i = 0; i < properties.length; i++) { 75 for (var i = 0; i < properties.length; i++) {
72 assertTrue(properties[i] instanceof debug.Mirror, 'Unexpected mirror hierarc hy'); 76 assertTrue(properties[i] instanceof debug.Mirror, 'Unexpected mirror hierarc hy');
73 assertTrue(properties[i] instanceof debug.PropertyMirror, 'Unexpected mirror hierarchy'); 77 assertTrue(properties[i] instanceof debug.PropertyMirror, 'Unexpected mirror hierarchy');
74 assertEquals('property', properties[i].type(), 'Unexpected mirror type'); 78 assertEquals('property', properties[i].type(), 'Unexpected mirror type');
79 assertTrue(isName(names[i]), "Expected string or symbol property name");
75 assertEquals(names[i], properties[i].name(), 'Unexpected property name'); 80 assertEquals(names[i], properties[i].name(), 'Unexpected property name');
76 } 81 }
77 82
78 var internalProperties = mirror.internalProperties(); 83 var internalProperties = mirror.internalProperties();
79 for (var i = 0; i < internalProperties.length; i++) { 84 for (var i = 0; i < internalProperties.length; i++) {
80 assertTrue(internalProperties[i] instanceof debug.Mirror, 'Unexpected mirror hierarchy'); 85 assertTrue(internalProperties[i] instanceof debug.Mirror, 'Unexpected mirror hierarchy');
81 assertTrue(internalProperties[i] instanceof debug.InternalPropertyMirror, 'U nexpected mirror hierarchy'); 86 assertTrue(internalProperties[i] instanceof debug.InternalPropertyMirror, 'U nexpected mirror hierarchy');
82 assertEquals('internalProperty', internalProperties[i].type(), 'Unexpected m irror type'); 87 assertEquals('internalProperty', internalProperties[i].type(), 'Unexpected m irror type');
83 } 88 }
84 89
(...skipping 19 matching lines...) Expand all
104 assertEquals(ctor_name, refs.lookup(fromJSON.constructorFunction.ref).name, 'U nexpected constructor function name in JSON'); 109 assertEquals(ctor_name, refs.lookup(fromJSON.constructorFunction.ref).name, 'U nexpected constructor function name in JSON');
105 assertEquals(mirror.protoObject().handle(), fromJSON.protoObject.ref, 'Unexpec ted proto object handle in JSON'); 110 assertEquals(mirror.protoObject().handle(), fromJSON.protoObject.ref, 'Unexpec ted proto object handle in JSON');
106 assertEquals(mirror.protoObject().type(), refs.lookup(fromJSON.protoObject.ref ).type, 'Unexpected proto object type in JSON'); 111 assertEquals(mirror.protoObject().type(), refs.lookup(fromJSON.protoObject.ref ).type, 'Unexpected proto object type in JSON');
107 assertEquals(mirror.prototypeObject().handle(), fromJSON.prototypeObject.ref, 'Unexpected prototype object handle in JSON'); 112 assertEquals(mirror.prototypeObject().handle(), fromJSON.prototypeObject.ref, 'Unexpected prototype object handle in JSON');
108 assertEquals(mirror.prototypeObject().type(), refs.lookup(fromJSON.prototypeOb ject.ref).type, 'Unexpected prototype object type in JSON'); 113 assertEquals(mirror.prototypeObject().type(), refs.lookup(fromJSON.prototypeOb ject.ref).type, 'Unexpected prototype object type in JSON');
109 assertEquals(void 0, fromJSON.namedInterceptor, 'No named interceptor expected in JSON'); 114 assertEquals(void 0, fromJSON.namedInterceptor, 'No named interceptor expected in JSON');
110 assertEquals(void 0, fromJSON.indexedInterceptor, 'No indexed interceptor expe cted in JSON'); 115 assertEquals(void 0, fromJSON.indexedInterceptor, 'No indexed interceptor expe cted in JSON');
111 116
112 // Check that the serialization contains all properties. 117 // Check that the serialization contains all properties.
113 assertEquals(names.length, fromJSON.properties.length, 'Some properties missin g in JSON'); 118 assertEquals(names.length, fromJSON.properties.length, 'Some properties missin g in JSON');
114 for (var i = 0; i < fromJSON.properties.length; i++) { 119 for (var j = 0; j < names.length; j++) {
115 var name = fromJSON.properties[i].name; 120 var name = names[j];
116 if (typeof name == 'undefined') name = fromJSON.properties[i].index; 121 // Serialization of symbol-named properties to JSON doesn't really
122 // work currently, as they don't get a {name: ...} entry.
123 if (typeof name === 'symbol') continue;
117 var found = false; 124 var found = false;
118 for (var j = 0; j < names.length; j++) { 125 for (var i = 0; i < fromJSON.properties.length; i++) {
119 if (names[j] == name) { 126 if (fromJSON.properties[i].name == name) {
120 // Check that serialized handle is correct. 127 // Check that serialized handle is correct.
121 assertEquals(properties[i].value().handle(), fromJSON.properties[i].ref, 'Unexpected serialized handle'); 128 assertEquals(properties[i].value().handle(), fromJSON.properties[i].ref, 'Unexpected serialized handle');
122 129
123 // Check that serialized name is correct. 130 // Check that serialized name is correct.
124 assertEquals(properties[i].name(), fromJSON.properties[i].name, 'Unexpec ted serialized name'); 131 assertEquals(properties[i].name(), fromJSON.properties[i].name, 'Unexpec ted serialized name');
125 132
126 // If property type is normal property type is not serialized. 133 // If property type is normal property type is not serialized.
127 if (properties[i].propertyType() != debug.PropertyType.Normal) { 134 if (properties[i].propertyType() != debug.PropertyType.Normal) {
128 assertEquals(properties[i].propertyType(), fromJSON.properties[i].prop ertyType, 'Unexpected serialized property type'); 135 assertEquals(properties[i].propertyType(), fromJSON.properties[i].prop ertyType, 'Unexpected serialized property type');
129 } else { 136 } else {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 assertTrue(found, '"' + name + '" not found (' + json + ')'); 170 assertTrue(found, '"' + name + '" not found (' + json + ')');
164 } 171 }
165 } 172 }
166 173
167 174
168 function Point(x,y) { 175 function Point(x,y) {
169 this.x_ = x; 176 this.x_ = x;
170 this.y_ = y; 177 this.y_ = y;
171 } 178 }
172 179
180 var object_with_symbol = {};
181 object_with_symbol[Symbol.iterator] = 42;
182
173 // Test a number of different objects. 183 // Test a number of different objects.
174 testObjectMirror({}, 'Object', 'Object'); 184 testObjectMirror({}, 'Object', 'Object');
175 testObjectMirror({'a':1,'b':2}, 'Object', 'Object'); 185 testObjectMirror({'a':1,'b':2}, 'Object', 'Object');
176 testObjectMirror({'1':void 0,'2':null,'f':function pow(x,y){return Math.pow(x,y) ;}}, 'Object', 'Object'); 186 testObjectMirror({'1':void 0,'2':null,'f':function pow(x,y){return Math.pow(x,y) ;}}, 'Object', 'Object');
177 testObjectMirror(new Point(-1.2,2.003), 'Object', 'Point'); 187 testObjectMirror(new Point(-1.2,2.003), 'Object', 'Point');
178 testObjectMirror(this, 'global', '', true); // Global object has special proper ties 188 testObjectMirror(this, 'global', '', true); // Global object has special proper ties
179 testObjectMirror(this.__proto__, 'Object', ''); 189 testObjectMirror(this.__proto__, 'Object', '');
180 testObjectMirror([], 'Array', 'Array'); 190 testObjectMirror([], 'Array', 'Array');
181 testObjectMirror([1,2], 'Array', 'Array'); 191 testObjectMirror([1,2], 'Array', 'Array');
182 testObjectMirror(Object(17), 'Number', 'Number'); 192 testObjectMirror(Object(17), 'Number', 'Number');
193 testObjectMirror(object_with_symbol, 'Object', 'Object');
183 194
184 // Test circular references. 195 // Test circular references.
185 o = {}; 196 o = {};
186 o.o = o; 197 o.o = o;
187 testObjectMirror(o, 'Object', 'Object'); 198 testObjectMirror(o, 'Object', 'Object');
188 199
189 // Test that non enumerable properties are part of the mirror 200 // Test that non enumerable properties are part of the mirror
190 global_mirror = debug.MakeMirror(this); 201 global_mirror = debug.MakeMirror(this);
191 assertEquals('property', global_mirror.property("Math").type()); 202 assertEquals('property', global_mirror.property("Math").type());
192 assertFalse(global_mirror.property("Math").isEnum(), "Math is enumerable" + glob al_mirror.property("Math").attributes()); 203 assertFalse(global_mirror.property("Math").isEnum(), "Math is enumerable" + glob al_mirror.property("Math").attributes());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 268 }
258 assertTrue("[[BoundThis]]" in property_map); 269 assertTrue("[[BoundThis]]" in property_map);
259 assertEquals("function", property_map["[[BoundThis]]"].value().type()); 270 assertEquals("function", property_map["[[BoundThis]]"].value().type());
260 assertEquals(Array, property_map["[[BoundThis]]"].value().value()); 271 assertEquals(Array, property_map["[[BoundThis]]"].value().value());
261 assertTrue("[[TargetFunction]]" in property_map); 272 assertTrue("[[TargetFunction]]" in property_map);
262 assertEquals("function", property_map["[[TargetFunction]]"].value().type()); 273 assertEquals("function", property_map["[[TargetFunction]]"].value().type());
263 assertEquals(Number, property_map["[[TargetFunction]]"].value().value()); 274 assertEquals(Number, property_map["[[TargetFunction]]"].value().value());
264 assertTrue("[[BoundArgs]]" in property_map); 275 assertTrue("[[BoundArgs]]" in property_map);
265 assertEquals("object", property_map["[[BoundArgs]]"].value().type()); 276 assertEquals("object", property_map["[[BoundArgs]]"].value().type());
266 assertEquals(1, property_map["[[BoundArgs]]"].value().value().length); 277 assertEquals(1, property_map["[[BoundArgs]]"].value().value().length);
OLDNEW
« src/mirror-debugger.js ('K') | « src/mirror-debugger.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698