@@ -72,6 +72,38 @@ void main() {
7272 return stack;
7373 }
7474
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+
75107 setUp (() async {
76108 vm = await service.getVM ();
77109 isolateId = vm.isolates.first.id;
@@ -88,17 +120,19 @@ void main() {
88120
89121 test ('variables in static function' , () async {
90122 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 ();
94127 expect (variableNames, containsAll (['formal' ]));
95128 });
96129
97130 test ('variables in function' , () async {
98131 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 ();
102136 expect (
103137 variableNames,
104138 containsAll ([
@@ -115,21 +149,35 @@ void main() {
115149
116150 test ('variables in closure nested in method' , () async {
117151 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 ();
121156 expect (variableNames,
122157 ['closureLocalInsideMethod' , 'local' , 'parameter' , 'this' ]);
123158 });
124159
125160 test ('variables in method' , () async {
126161 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 ();
130166 expect (variableNames, ['this' ]);
131167 });
132168
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+
133181 test ('evaluateJsOnCallFrame' , () async {
134182 stack = await breakAt ('nestedFunction' , mainScript);
135183 var inspector = service.appInspectorProvider ();
0 commit comments