@@ -72,6 +72,38 @@ void main() {
72
72
return stack;
73
73
}
74
74
75
+ Future <Instance > getInstance (InstanceRef ref) async {
76
+ var result = await service.getObject (isolateId, ref.id);
77
+ expect (result, isA <Instance >());
78
+ return result as Instance ;
79
+ }
80
+
81
+ void expectDartObject (String variableName, Instance instance) {
82
+ expect (
83
+ instance,
84
+ isA <Instance >().having (
85
+ (instance) => instance.classRef.name,
86
+ '$variableName : classRef.name' ,
87
+ isNot (isIn ([
88
+ 'NativeJavaScriptObject' ,
89
+ 'JavaScriptObject' ,
90
+ ]))));
91
+ }
92
+
93
+ Future <void > expectDartVariables (Map <String , InstanceRef > variables) async {
94
+ for (var name in variables.keys) {
95
+ var instance = await getInstance (variables[name]);
96
+ expectDartObject (name, instance);
97
+ }
98
+ }
99
+
100
+ Map <String , InstanceRef > getFrameVariables (Frame frame) {
101
+ return < String , InstanceRef > {
102
+ for (var variable in frame.vars)
103
+ variable.name: variable.value as InstanceRef ,
104
+ };
105
+ }
106
+
75
107
setUp (() async {
76
108
vm = await service.getVM ();
77
109
isolateId = vm.isolates.first.id;
@@ -88,17 +120,19 @@ void main() {
88
120
89
121
test ('variables in static function' , () async {
90
122
stack = await breakAt ('staticFunction' , mainScript);
91
- var frame = stack.frames.first;
92
- var variableNames = frame.vars.map ((variable) => variable.name).toList ()
93
- ..sort ();
123
+ var variables = getFrameVariables (stack.frames.first);
124
+ await expectDartVariables (variables);
125
+
126
+ var variableNames = variables.keys.toList ()..sort ();
94
127
expect (variableNames, containsAll (['formal' ]));
95
128
});
96
129
97
130
test ('variables in function' , () async {
98
131
stack = await breakAt ('nestedFunction' , mainScript);
99
- var frame = stack.frames.first;
100
- var variableNames = frame.vars.map ((variable) => variable.name).toList ()
101
- ..sort ();
132
+ var variables = getFrameVariables (stack.frames.first);
133
+ await expectDartVariables (variables);
134
+
135
+ var variableNames = variables.keys.toList ()..sort ();
102
136
expect (
103
137
variableNames,
104
138
containsAll ([
@@ -115,21 +149,35 @@ void main() {
115
149
116
150
test ('variables in closure nested in method' , () async {
117
151
stack = await breakAt ('nestedClosure' , mainScript);
118
- var frame = stack.frames.first;
119
- var variableNames = frame.vars.map ((variable) => variable.name).toList ()
120
- ..sort ();
152
+ var variables = getFrameVariables (stack.frames.first);
153
+ await expectDartVariables (variables);
154
+
155
+ var variableNames = variables.keys.toList ()..sort ();
121
156
expect (variableNames,
122
157
['closureLocalInsideMethod' , 'local' , 'parameter' , 'this' ]);
123
158
});
124
159
125
160
test ('variables in method' , () async {
126
161
stack = await breakAt ('printMethod' , mainScript);
127
- var frame = stack.frames.first;
128
- var variableNames = frame.vars.map ((variable) => variable.name).toList ()
129
- ..sort ();
162
+ var variables = getFrameVariables (stack.frames.first);
163
+ await expectDartVariables (variables);
164
+
165
+ var variableNames = variables.keys.toList ()..sort ();
130
166
expect (variableNames, ['this' ]);
131
167
});
132
168
169
+ test ('variables in extension method' , () async {
170
+ stack = await breakAt ('extension' , mainScript);
171
+ var variables = getFrameVariables (stack.frames.first);
172
+ await expectDartVariables (variables);
173
+
174
+ var variableNames = variables.keys.toList ()..sort ();
175
+ // Note: '$this' should change to 'this', and 'return' should
176
+ // disappear after debug symbols are available.
177
+ // https://github.com/dart-lang/webdev/issues/1371
178
+ expect (variableNames, ['\$ this' , 'ret' , 'return' ]);
179
+ });
180
+
133
181
test ('evaluateJsOnCallFrame' , () async {
134
182
stack = await breakAt ('nestedFunction' , mainScript);
135
183
var inspector = service.appInspectorProvider ();
0 commit comments