blob: 6c8c8280fc3cf3c22eec7fa585a28638b45334cc [file] [log] [blame]
// Copyright (c) 2023, 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 'dart:async';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'common/test_helper.dart';
class A {
double field = 0.0;
}
void script() {
for (int i = 0; i < 10; i++) {
A();
}
}
Future<void> testGetter(VmService service, IsolateRef isolateRef) async {
final isolateId = isolateRef.id!;
final isolate = await service.getIsolate(isolateId);
final rootLib = await service.getObject(
isolateId,
isolate.rootLib!.id!,
) as Library;
expect(rootLib.classes!.length, 1);
final classA = await service.getObject(
isolateId,
rootLib.classes![0].id!,
) as Class;
expect(classA.name, 'A');
// Find getter.
FuncRef? getterFuncRef;
for (final function in classA.functions!) {
if (function.name == 'field') {
getterFuncRef = function;
break;
}
}
expect(getterFuncRef, isNotNull);
final getterFunc = await service.getObject(
isolateId,
getterFuncRef!.id!,
) as Func;
final fieldRef = FieldRef.parse(getterFunc.json!['_field']);
expect(fieldRef, isNotNull);
final field = await service.getObject(
isolateId,
fieldRef!.id!,
) as Field;
expect(field, isNotNull);
expect(field.name, 'field');
final classDoubleRef = Class.parse(field.json!['_guardClass']);
expect(classDoubleRef, isNotNull);
final classDouble = await service.getObject(
isolateId,
classDoubleRef!.id!,
) as Class;
expect(classDouble.name, '_Double');
}
Future<void> testSetter(VmService service, IsolateRef isolateRef) async {
final isolateId = isolateRef.id!;
final isolate = await service.getIsolate(isolateId);
final rootLib = await service.getObject(
isolateId,
isolate.rootLib!.id!,
) as Library;
expect(rootLib.classes!.length, 1);
final classA = await service.getObject(
isolateId,
rootLib.classes![0].id!,
) as Class;
expect(classA.name, 'A');
// Find setter.
FuncRef? setterFuncRef;
for (final function in classA.functions!) {
if (function.name == 'field=') {
setterFuncRef = function;
break;
}
}
expect(setterFuncRef, isNotNull);
final setterFunc = await service.getObject(
isolateId,
setterFuncRef!.id!,
) as Func;
final fieldRef = FieldRef.parse(setterFunc.json!['_field']);
final field = await service.getObject(
isolateId,
fieldRef!.id!,
) as Field;
expect(field, isNotNull);
expect(field.name, 'field');
final classDoubleRef = Class.parse(field.json!['_guardClass']);
expect(classDoubleRef, isNotNull);
final classDouble = await service.getObject(
isolateId,
classDoubleRef!.id!,
) as Class;
expect(classDouble.name, '_Double');
}
final tests = <IsolateTest>[
testGetter,
testSetter,
];
void main([args = const <String>[]]) => runIsolateTests(
args,
tests,
'implicit_getter_setter_test.dart',
testeeBefore: script,
);