blob: d393bcab1386949610b8305404d9846ddb7eac76 [file]
// Copyright (c) 2022, 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.
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'common/service_test_common.dart';
import 'super_constructor_invocation_lib.dart' as testee_lib;
late final String isolateId;
late final String rootLibId;
Future<Response> createInstance(VmService service, String expr) async {
return await service.evaluate(
isolateId,
rootLibId,
expr,
disableBreakpoints: true,
);
}
Future<Obj> evaluateGetter(
VmService service,
String instanceId,
String getter,
) async {
final dynamic result = await service.evaluate(isolateId, instanceId, getter);
return await service.getObject(isolateId, result.id);
}
void main([args = const <String>[]]) =>
IsolateTestHarness('super_constructor_invocation_lib.dart', args)
.hasStoppedAtBreakpoint()
.addCustomTest((VmService service, IsolateRef isolateRef) async {
// Initialization
isolateId = isolateRef.id!;
final isolate = await service.getIsolate(isolateId);
rootLibId = isolate.libraries!
.firstWhere(
(l) => l.uri!.contains('super_constructor_invocation_lib'))
.id!;
})
.addCustomTest((VmService service, _) async {
dynamic instance =
await createInstance(service, 'C.constr1("abc", t: 42)');
dynamic result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, 'null');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, '42');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'int');
instance = await createInstance(service, 'C.constr1("abc", t: "42")');
result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, 'null');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, '42');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'String');
})
.addCustomTest((VmService service, _) async {
dynamic instance =
await createInstance(service, 'C.constr2(1, "abc", n: 3.14)');
dynamic result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, '3.14');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, 'null');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'dynamic');
instance = await createInstance(service, 'C.constr2(1, "abc", n: 2)');
result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, '2');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, 'null');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'dynamic');
})
.addCustomTest((VmService service, _) async {
dynamic instance = await createInstance(
service,
'C.constr3(1, "abc", n: 42, t: 3.14)',
);
dynamic result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, '42');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, '3.14');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S.named');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'double');
instance = await createInstance(
service,
'C.constr3(1, "abc", n: 3.14, t: 42)',
);
result = await evaluateGetter(service, instance.id, 'n');
expect(result.valueAsString, '3.14');
result = await evaluateGetter(service, instance.id, 't');
expect(result.valueAsString, '42');
result = await evaluateGetter(service, instance.id, 'constrName');
expect(result.valueAsString, 'S.named');
result = await service.evaluate(isolateId, instance.id, 'T');
expect(result.json['name'], 'int');
})
.addCustomTest((VmService service, _) async {
final dynamic instance =
await createInstance(service, 'B(1, 2, 3, 4)');
dynamic result = await evaluateGetter(service, instance.id, 'f1');
expect(result.valueAsString, '1');
result = await evaluateGetter(service, instance.id, 'v1');
expect(result.valueAsString, '2');
result = await evaluateGetter(service, instance.id, 'i1');
expect(result.valueAsString, '3');
result = await evaluateGetter(service, instance.id, 't1');
expect(result.valueAsString, '4');
})
.resumeIsolate()
.hasStoppedAtBreakpoint()
.addCustomTest((VmService service, _) async {
dynamic result = await service.evaluateInFrame(isolateId, 0, 'n');
expect(result.valueAsString, '3.14');
result = await service.evaluateInFrame(isolateId, 0, 't');
expect(result.valueAsString, '42');
result = await service.evaluateInFrame(isolateId, 0, 'constrName');
expect(result.valueAsString, 'S.named');
})
.resumeIsolate()
.hasStoppedAtBreakpoint()
.addCustomTest((VmService service, _) async {
dynamic result = await service.evaluateInFrame(isolateId, 0, 'f1');
expect(result.valueAsString, 'a');
result = await service.evaluateInFrame(isolateId, 0, 'v1');
expect(result.valueAsString, '3.14');
result = await service.evaluateInFrame(isolateId, 0, 'i1');
expect(result.valueAsString, '2.718');
result = await service.evaluateInFrame(isolateId, 0, 't1');
expect(result.valueAsString, '42');
})
.resumeIsolate()
.run(testeeMain: testee_lib.main);