blob: 0e1cc1d12977ab7bf78b704b1723bbc0446d0287 [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Tests that expressions evaluated in a frame see the same scope as the
// frame's method.
import 'dart:async';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
import 'evaluate_activation_in_method_class_other.dart';
var topLevel = "TestLibrary";
class Subclass extends Superclass1 {
var _instVar = 'Subclass';
var instVar = 'Subclass';
method() => 'Subclass';
static staticMethod() => 'Subclass';
suppress_warning() => _instVar;
}
testeeDo() {
var obj = Subclass();
obj.test();
}
Future testerDo(VmService service, IsolateRef isolateRef) async {
await hasStoppedAtBreakpoint(service, isolateRef);
final isolateId = isolateRef.id!;
// Make sure we are in the right place.
var stack = await service.getStack(isolateId);
var topFrame = 0;
expect(
stack.frames![topFrame].function!.name,
equals('test'),
);
expect(
stack.frames![topFrame].function!.owner.name,
equals('Superclass1'),
);
InstanceRef result;
result = await service.evaluateInFrame(isolateId, topFrame, '_local')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass1'));
result = await service.evaluateInFrame(isolateId, topFrame, '_instVar')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass1'));
result = await service.evaluateInFrame(isolateId, topFrame, 'instVar')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Subclass'));
result = await service.evaluateInFrame(isolateId, topFrame, 'method()')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Subclass'));
result = await service.evaluateInFrame(isolateId, topFrame, 'super._instVar')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass2'));
result = await service.evaluateInFrame(isolateId, topFrame, 'super.instVar')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass2'));
result = await service.evaluateInFrame(isolateId, topFrame, 'super.method()')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass2'));
result = await service.evaluateInFrame(isolateId, topFrame, 'staticMethod()')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('Superclass1'));
// function.Owner verus function.Origin
// The mixin of Superclass is in _other.dart and the mixin
// application is in _test.dart.
result = await service.evaluateInFrame(isolateId, topFrame, 'topLevel')
as InstanceRef;
print(result);
expect(result.valueAsString, equals('OtherLibrary'));
}
main([args = const <String>[]]) => runIsolateTests(
args,
[testerDo],
'evaluate_activation_in_method_class_test.dart',
testeeConcurrent: testeeDo,
);