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

Side by Side Diff: runtime/observatory/tests/service/get_object_rpc_test.dart

Issue 1090293003: Kill service_test.cc tests in favor of dart tests for the service protocol. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 // VMOptions=--compile-all --error_on_bad_type --error_on_bad_override --checked
5
6 library get_object_rpc_test;
7
8 import 'dart:async';
9
10 import 'package:observatory/service_io.dart';
11 import 'package:unittest/unittest.dart';
12
13 import 'test_helper.dart';
14
15 class _DummyClass {
16 static var dummyVar = 11;
17 void dummyFunction() {
18 }
19 }
20
21 class _DummySubClass extends _DummyClass {
22 }
23
24 void warmup() {
25 new _DummyClass().dummyFunction();
26 }
27
28 eval(Isolate isolate, String expression) async {
29 Map params = {
30 'targetId': isolate.rootLib.id,
31 'expression': expression,
32 };
33 return await isolate.invokeRpcNoUpgrade('eval', params);
34 }
35
36 var tests = [
37 // null object.
38 (Isolate isolate) async {
39 var params = {
40 'objectId': 'objects/null',
41 };
42 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
43 expect(result['type'], equals('null'));
44 expect(result['id'], equals('objects/null'));
45 expect(result['valueAsString'], equals('null'));
46 expect(result['class']['type'], equals('@Class'));
47 expect(result['class']['name'], equals('Null'));
48 expect(result['size'], isPositive);
49 },
50
51 // bool object.
52 (Isolate isolate) async {
53 var params = {
54 'objectId': 'objects/bool-true',
55 };
56 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
57 expect(result['type'], equals('bool'));
58 expect(result['id'], equals('objects/bool-true'));
59 expect(result['valueAsString'], equals('true'));
60 expect(result['class']['type'], equals('@Class'));
61 expect(result['class']['name'], equals('bool'));
62 expect(result['size'], isPositive);
63 expect(result['fields'], isEmpty);
64 },
65
66 // int object.
67 (Isolate isolate) async {
68 var params = {
69 'objectId': 'objects/int-123',
70 };
71 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
72 expect(result['type'], equals('int'));
73 expect(result['_vmType'], equals('Smi'));
74 expect(result['id'], equals('objects/int-123'));
75 expect(result['valueAsString'], equals('123'));
76 expect(result['class']['type'], equals('@Class'));
77 expect(result['class']['name'], equals('_Smi'));
78 // TODO(turnidge): Should we return zero here instead?
79 expect(result['size'], isNull);
80 expect(result['fields'], isEmpty);
81 },
82
83 // A general Dart object.
84 (Isolate isolate) async {
85 // Call eval to get a Dart list.
86 var evalResult = await eval(isolate, '[3, 2, 1]');
87 var params = {
88 'objectId': evalResult['id'],
89 };
90 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
91 expect(result['type'], equals('List'));
92 expect(result['_vmType'], equals('GrowableObjectArray'));
93 expect(result['id'], startsWith('objects/'));
94 expect(result['valueAsString'], isNull);
95 expect(result['class']['type'], equals('@Class'));
96 expect(result['class']['name'], equals('_GrowableList'));
97 expect(result['size'], isPositive);
98 expect(result['fields'], isEmpty);
99 expect(result['elements'].length, equals(3));
100 expect(result['elements'][0]['index'], equals(0));
101 expect(result['elements'][0]['value']['type'], equals('@int'));
102 expect(result['elements'][0]['value']['valueAsString'], equals('3'));
103 },
104
105 // An expired object.
106 (Isolate isolate) async {
107 var params = {
108 'objectId': 'objects/99999999',
109 };
110 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
111 expect(result['type'], equals('Sentinel'));
112 expect(result['id'], startsWith('objects/expired'));
113 expect(result['valueAsString'], equals('<expired>'));
114 expect(result['class'], isNull);
115 expect(result['size'], isNull);
116 },
117
118 // library.
119 (Isolate isolate) async {
120 var params = {
121 'objectId': isolate.rootLib.id,
122 };
123 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
124 expect(result['type'], equals('Library'));
125 expect(result['id'], startsWith('libraries/'));
126 expect(result['name'], equals('get_object_rpc_test'));
127 expect(result['url'], startsWith('file:'));
128 expect(result['url'], endsWith('get_object_rpc_test.dart'));
129 expect(result['imports'].length, isPositive);
130 expect(result['imports'][0]['type'], equals('@Library'));
131 expect(result['scripts'].length, isPositive);
132 expect(result['scripts'][0]['type'], equals('@Script'));
133 expect(result['variables'].length, isPositive);
134 expect(result['variables'][0]['type'], equals('@Field'));
135 expect(result['functions'].length, isPositive);
136 expect(result['functions'][0]['type'], equals('@Function'));
137 expect(result['classes'].length, isPositive);
138 expect(result['classes'][0]['type'], equals('@Class'));
139 },
140
141 // invalid library.
142 (Isolate isolate) async {
143 var params = {
144 'objectId': 'libraries/9999999',
145 };
146 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
147 expect(result['type'], equals('Error'));
148 expect(result['message'], startsWith('Unrecognized object id'));
149 },
150
151 // script.
152 (Isolate isolate) async {
153 // Get the library first.
154 var params = {
155 'objectId': isolate.rootLib.id,
156 };
157 var libResult = await isolate.invokeRpcNoUpgrade('getObject', params);
158 // Get the first script.
159 params = {
160 'objectId': libResult['scripts'][0]['id'],
161 };
162 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
163 expect(result['type'], equals('Script'));
164 expect(result['id'], startsWith('libraries/'));
165 expect(result['name'], startsWith('file:'));
166 expect(result['name'], endsWith('get_object_rpc_test.dart'));
167 expect(result['kind'], equals('script'));
168 expect(result['library']['type'], equals('@Library'));
169 expect(result['source'], startsWith('// Copyright (c)'));
170 expect(result['tokenPosTable'].length, isPositive);
171 expect(result['tokenPosTable'][0], new isInstanceOf<List>());
172 expect(result['tokenPosTable'][0].length, isPositive);
173 expect(result['tokenPosTable'][0][0], new isInstanceOf<int>());
174 },
175
176 // invalid script.
177 (Isolate isolate) async {
178 var params = {
179 'objectId': 'scripts/9999999',
180 };
181 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
182 expect(result['type'], equals('Error'));
183 expect(result['message'], startsWith('Unrecognized object id'));
184 },
185
186 // class
187 (Isolate isolate) async {
188 // Call eval to get a class id.
189 var evalResult = await eval(isolate, 'new _DummyClass()');
190 var params = {
191 'objectId': evalResult['class']['id'],
192 };
193 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
194 expect(result['type'], equals('Class'));
195 expect(result['id'], startsWith('classes/'));
196 expect(result['name'], equals('_DummyClass'));
197 expect(result['_vmName'], startsWith('_DummyClass@'));
198 expect(result['abstract'], equals(false));
199 expect(result['const'], equals(false));
200 expect(result['finalized'], equals(true));
201 expect(result['implemented'], equals(false));
202 expect(result['patch'], equals(false));
203 expect(result['library']['type'], equals('@Library'));
204 expect(result['script']['type'], equals('@Script'));
205 expect(result['super']['type'], equals('@Class'));
206 expect(result['interfaces'].length, isZero);
207 expect(result['fields'].length, isPositive);
208 expect(result['fields'][0]['type'], equals('@Field'));
209 expect(result['functions'].length, isPositive);
210 expect(result['functions'][0]['type'], equals('@Function'));
211 expect(result['subclasses'].length, isPositive);
212 expect(result['subclasses'][0]['type'], equals('@Class'));
213 },
214
215 // invalid class.
216 (Isolate isolate) async {
217 var params = {
218 'objectId': 'classes/9999999',
219 };
220 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
221 expect(result['type'], equals('Error'));
222 expect(result['message'], startsWith('Unrecognized object id'));
223 },
224
225 // type.
226 (Isolate isolate) async {
227 // Call eval to get a class id.
228 var evalResult = await eval(isolate, 'new _DummyClass()');
229 var id = "${evalResult['class']['id']}/types/0";
230 var params = {
231 'objectId': id,
232 };
233 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
234 expect(result['type'], equals('Type'));
235 expect(result['id'], equals(id));
236 expect(result['class']['type'], equals('@Class'));
237 expect(result['class']['name'], equals('_Type'));
238 expect(result['size'], isPositive);
239 expect(result['fields'], isEmpty);
240 expect(result['typeClass']['type'], equals('@Class'));
241 expect(result['typeClass']['name'], equals('_DummyClass'));
242 },
243
244 // invalid type.
245 (Isolate isolate) async {
246 var evalResult = await eval(isolate, 'new _DummyClass()');
247 var id = "${evalResult['class']['id']}/types/9999999";
248 var params = {
249 'objectId': id,
250 };
251 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
252 expect(result['type'], equals('Error'));
253 expect(result['message'], startsWith('Unrecognized object id'));
254 },
255
256 // function.
257 (Isolate isolate) async {
258 // Call eval to get a class id.
259 var evalResult = await eval(isolate, 'new _DummyClass()');
260 var id = "${evalResult['class']['id']}/functions/dummyFunction";
261 var params = {
262 'objectId': id,
263 };
264 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
265 expect(result['type'], equals('Function'));
266 expect(result['id'], equals(id));
267 expect(result['name'], equals('dummyFunction'));
268 expect(result['kind'], equals('RegularFunction'));
269 expect(result['static'], equals(false));
270 expect(result['const'], equals(false));
271 expect(result['script']['type'], equals('@Script'));
272 expect(result['tokenPos'], isPositive);
273 expect(result['code']['type'], equals('@Code'));
274 expect(result['_optimizable'], equals(true));
275 expect(result['_inlinable'], equals(true));
276 expect(result['_usageCounter'], isPositive);
277 expect(result['_optimizedCallSiteCount'], isZero);
278 expect(result['_deoptimizations'], isZero);
279 },
280
281 // invalid function.
282 (Isolate isolate) async {
283 // Call eval to get a class id.
284 var evalResult = await eval(isolate, 'new _DummyClass()');
285 var id = "${evalResult['class']['id']}/functions/invalid";
286 var params = {
287 'objectId': id,
288 };
289 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
290 expect(result['type'], equals('Error'));
291 expect(result['message'], startsWith('Unrecognized object id'));
292 },
293
294 // field
295 (Isolate isolate) async {
296 // Call eval to get a class id.
297 var evalResult = await eval(isolate, 'new _DummyClass()');
298 var id = "${evalResult['class']['id']}/fields/0";
299 var params = {
300 'objectId': id,
301 };
302 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
303 expect(result['type'], equals('Field'));
304 expect(result['id'], equals(id));
305 expect(result['name'], equals('dummyVar'));
306 expect(result['value']['valueAsString'], equals('11'));
307 expect(result['const'], equals(false));
308 expect(result['static'], equals(true));
309 expect(result['final'], equals(false));
310 expect(result['script']['type'], equals('@Script'));
311 expect(result['tokenPos'], isPositive);
312 expect(result['_guardNullable'], isNotNull);
313 expect(result['_guardClass'], isNotNull);
314 expect(result['_guardLength'], isNotNull);
315 },
316
317 // invalid field.
318 (Isolate isolate) async {
319 // Call eval to get a class id.
320 var evalResult = await eval(isolate, 'new _DummyClass()');
321 var id = "${evalResult['class']['id']}/fields/9999";
322 var params = {
323 'objectId': id,
324 };
325 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
326 expect(result['type'], equals('Error'));
327 expect(result['message'], startsWith('Unrecognized object id'));
328 },
329
330 // code.
331 (Isolate isolate) async {
332 // Call eval to get a class id.
333 var evalResult = await eval(isolate, 'new _DummyClass()');
334 var funcId = "${evalResult['class']['id']}/functions/dummyFunction";
335 var params = {
336 'objectId': funcId,
337 };
338 var funcResult = await isolate.invokeRpcNoUpgrade('getObject', params);
339 params = {
340 'objectId': funcResult['code']['id'],
341 };
342 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
343 expect(result['type'], equals('Code'));
344 expect(result['name'], equals('_DummyClass.dummyFunction'));
345 expect(result['_vmName'], equals('dummyFunction'));
346 expect(result['kind'], equals('Dart'));
347 expect(result['_optimized'], new isInstanceOf<bool>());
348 expect(result['function']['type'], equals('@Function'));
349 expect(result['_startAddress'], new isInstanceOf<String>());
350 expect(result['_endAddress'], new isInstanceOf<String>());
351 expect(result['_objectPool'], isNotNull);
352 expect(result['_disassembly'], isNotNull);
353 expect(result['_descriptors'], isNotNull);
354 expect(result['_inlinedFunctions'], isNotNull);
355 expect(result['_inlinedIntervals'], isNotNull);
356 },
357
358 // invalid code.
359 (Isolate isolate) async {
360 // Call eval to get a class id.
361 var params = {
362 'objectId': 'code/0',
363 };
364 var result = await isolate.invokeRpcNoUpgrade('getObject', params);
365 expect(result['type'], equals('Error'));
366 expect(result['message'], startsWith('Unrecognized object id'));
367 },
368 ];
369
370 main(args) async => runIsolateTests(args, tests, testeeBefore:warmup);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698