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

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

Issue 2231313002: Avoid to list internal Arrays in _GetRetainingPath api (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Stop iterating at static fields and remove GrowableObjectList internal storage from the list Created 4 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 // VMOptions=--error_on_bad_type --error_on_bad_override 4 // VMOptions=--error_on_bad_type --error_on_bad_override
5 5
6 import 'package:observatory/service_io.dart'; 6 import 'package:observatory/service_io.dart';
7 import 'package:unittest/unittest.dart'; 7 import 'package:unittest/unittest.dart';
8 8
9 import 'test_helper.dart'; 9 import 'test_helper.dart';
10 10
11 class _TestClass { 11 class _TestClass {
12 _TestClass(this.x, this.y); 12 _TestClass();
13 var x; 13 var x;
14 var y; 14 var y;
15 } 15 }
16 16
17 var target1; 17 var target1 = new _TestClass();
18 var target2; 18 var target2 = new _TestClass();
19 var target3; 19 var target3 = new _TestClass();
20 var globalObject; 20 var globalObject = new _TestClass();
21 var globalList; 21 var globalList = new List(100);
22 22
23 void warmup() { 23 void warmup() {
24 target1 = new _TestClass(null, null); 24 globalObject.x = target1;
25 target2 = new _TestClass(null, null); 25 globalObject.y = target2;
26 globalObject = new _TestClass(target1, target2);
27
28 target3 = new _TestClass(null, null);
29 globalList = new List(100);
30 globalList[12] = target3; 26 globalList[12] = target3;
31 } 27 }
32 28
33 eval(Isolate isolate, String expression) async { 29 eval(Isolate isolate, String expression) async {
34 Map params = { 30 Map params = {
35 'targetId': isolate.rootLibrary.id, 31 'targetId': isolate.rootLibrary.id,
36 'expression': expression, 32 'expression': expression,
37 }; 33 };
38 return await isolate.invokeRpcNoUpgrade('evaluate', params); 34 return await isolate.invokeRpcNoUpgrade('evaluate', params);
39 } 35 }
40 36
41 var tests = [ 37 var tests = [
42 // simple path 38 // simple path
43 (Isolate isolate) async { 39 (Isolate isolate) async {
44 var obj = await eval(isolate, 'globalObject'); 40 var obj = await eval(isolate, 'globalObject');
45 var params = { 41 var params = {
46 'targetId': obj['id'], 42 'targetId': obj['id'],
47 'limit': 4, 43 'limit': 100,
48 }; 44 };
49 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params); 45 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params);
46 expect(result['elements'].length, equals(2));
50 expect(result['elements'][1]['value']['name'], equals('globalObject')); 47 expect(result['elements'][1]['value']['name'], equals('globalObject'));
51 }, 48 },
52 49
53 // missing limit. 50 // missing limit.
54 (Isolate isolate) async { 51 (Isolate isolate) async {
55 var obj = await eval(isolate, 'globalObject'); 52 var obj = await eval(isolate, 'globalObject');
56 var params = { 53 var params = {
57 'targetId': obj['id'], 54 'targetId': obj['id'],
58 }; 55 };
59 bool caughtException; 56 bool caughtException;
60 try { 57 try {
61 await isolate.invokeRpcNoUpgrade('_getRetainingPath', params); 58 await isolate.invokeRpcNoUpgrade('_getRetainingPath', params);
62 expect(false, isTrue, reason:'Unreachable'); 59 expect(false, isTrue, reason:'Unreachable');
63 } on ServerRpcException catch (e) { 60 } on ServerRpcException catch (e) {
64 caughtException = true; 61 caughtException = true;
65 expect(e.code, equals(ServerRpcException.kInvalidParams)); 62 expect(e.code, equals(ServerRpcException.kInvalidParams));
66 expect(e.data['details'], 63 expect(e.data['details'],
67 "_getRetainingPath expects the \'limit\' parameter"); 64 "_getRetainingPath expects the \'limit\' parameter");
68 } 65 }
69 expect(caughtException, isTrue); 66 expect(caughtException, isTrue);
70 }, 67 },
71 68
72 (Isolate isolate) async { 69 (Isolate isolate) async {
73 var target1 = await eval( 70 var target1 = await eval(
74 isolate, '() { var tmp = target1; target1 = null; return tmp;} ()'); 71 isolate, '() { var tmp = target1; target1 = null; return tmp;} ()');
75 var params = { 72 var params = {
76 'targetId': target1['id'], 73 'targetId': target1['id'],
77 'limit': 4, 74 'limit': 100,
78 }; 75 };
79 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params); 76 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params);
80 expect(result['type'], equals('RetainingPath')); 77 expect(result['type'], equals('RetainingPath'));
78 print(result['elements']);
79 expect(result['elements'].length, equals(3));
81 expect(result['elements'][1]['parentField']['name'], equals('x')); 80 expect(result['elements'][1]['parentField']['name'], equals('x'));
82 expect(result['elements'][2]['value']['name'], equals('globalObject')); 81 expect(result['elements'][2]['value']['name'], equals('globalObject'));
83 }, 82 },
84 83
85 (Isolate isolate) async { 84 (Isolate isolate) async {
86 var target2 = await eval( 85 var target2 = await eval(
87 isolate, '() { var tmp = target2; target2 = null; return tmp;} ()'); 86 isolate, '() { var tmp = target2; target2 = null; return tmp;} ()');
88 var params = { 87 var params = {
89 'targetId': target2['id'], 88 'targetId': target2['id'],
90 'limit': 4, 89 'limit': 100,
91 }; 90 };
92 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params); 91 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params);
93 expect(result['type'], equals('RetainingPath')); 92 expect(result['type'], equals('RetainingPath'));
93 print(result['elements']);
94 expect(result['elements'].length, equals(3));
94 expect(result['elements'][1]['parentField']['name'], equals('y')); 95 expect(result['elements'][1]['parentField']['name'], equals('y'));
95 expect(result['elements'][2]['value']['name'], equals('globalObject')); 96 expect(result['elements'][2]['value']['name'], equals('globalObject'));
96 }, 97 },
97 98
98 (Isolate isolate) async { 99 (Isolate isolate) async {
99 var target3 = await eval( 100 var target3 = await eval(
100 isolate, '() { var tmp = target3; target3 = null; return tmp;} ()'); 101 isolate, '() { var tmp = target3; target3 = null; return tmp;} ()');
101 var params = { 102 var params = {
102 'targetId': target3['id'], 103 'targetId': target3['id'],
103 'limit': 4, 104 'limit': 100,
104 }; 105 };
105 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params); 106 var result = await isolate.invokeRpcNoUpgrade('_getRetainingPath', params);
106 expect(result['type'], equals('RetainingPath')); 107 expect(result['type'], equals('RetainingPath'));
108 print(result['elements']);
109 expect(result['elements'].length, equals(3));
107 expect(result['elements'][1]['parentListIndex'], equals(12)); 110 expect(result['elements'][1]['parentListIndex'], equals(12));
108 expect(result['elements'][2]['value']['name'], equals('globalList')); 111 expect(result['elements'][2]['value']['name'], equals('globalList'));
109 }, 112 }
110 ]; 113 ];
111 114
112 main(args) async => runIsolateTests(args, tests, testeeBefore:warmup); 115 main(args) async => runIsolateTests(args, tests, testeeBefore:warmup);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698