Skip to content

Commit df65708

Browse files
author
Anna Gringauze
authored
Add more tests for native JS types in variable windows (#1373)
* Add more tests for native JS types in variable windows * Update variable_scope_test.dart
1 parent edef3bd commit df65708

File tree

2 files changed

+69
-12
lines changed

2 files changed

+69
-12
lines changed

dwds/test/variable_scope_test.dart

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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();

example/web/scopes_main.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ void main() async {
5959
localList.add('abc');
6060
var f = testClass.methodWithVariables();
6161
print(f('parameter'));
62+
var num = '1234'.someExtensionMethod();
63+
print('$num');
6264
});
6365

6466
print(_libraryPrivateFinal);
@@ -154,3 +156,10 @@ class NotReallyAList extends ListBase<Object?> {
154156
@override
155157
set length(x) => _internal.length = x;
156158
}
159+
160+
extension NumberParsing on String {
161+
int someExtensionMethod() {
162+
var ret = int.parse(this);
163+
return ret; // Breakpoint: extension
164+
}
165+
}

0 commit comments

Comments
 (0)