blob: e10495ace27e038e229962eb0135e14ae16b84c6 [file] [log] [blame]
// Copyright (c) 2024, 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:convert' show json;
import 'dart:io';
import 'package:kernel/ast.dart';
import 'package:kernel/core_types.dart';
import 'package:kernel/kernel.dart';
import 'package:kernel/target/targets.dart';
import 'package:test/test.dart';
import 'package:vm/modular/target/vm.dart' show VmTarget;
import 'package:vm/transformations/dynamic_interface_annotator.dart'
show annotateComponent;
import '../common_test_utils.dart';
final Uri pkgVmDir = Platform.script.resolve('../..');
runTestCase(Uri testCaseDir) async {
final mainDart = testCaseDir.resolve('main.dart');
final dynamicInterface = testCaseDir.resolve('dynamic_interface.yaml');
final dynamicInterfaceYaml =
File.fromUri(dynamicInterface).readAsStringSync();
final expectedDetailedDynamicInterface = testCaseDir.resolve(
'detailed_dynamic_interface.json',
);
final target = VmTarget(TargetFlags());
Component component = await compileTestCaseToKernelProgram(
mainDart,
target: target,
);
final coreTypes = CoreTypes(component);
final detailedDynamicInterfaceJson = <String, List<Map<String, String>>>{};
annotateComponent(
dynamicInterfaceYaml,
dynamicInterface,
component,
coreTypes,
detailedDynamicInterfaceJson: detailedDynamicInterfaceJson,
);
for (final lib in component.libraries) {
if (!lib.importUri.isScheme('dart')) {
print(lib.fileUri);
final actual = kernelLibraryToString(
lib,
).replaceAll(pkgVmDir.toString(), 'file:pkg/vm/');
compareResultWithExpectationsFile(lib.fileUri, actual);
}
}
// Filter out core libraries.
for (final section in detailedDynamicInterfaceJson.entries) {
section.value.removeWhere((entry) => entry['library']!.startsWith('dart:'));
}
final actualDetailedDynamicInterface =
json
.encode(detailedDynamicInterfaceJson)
.replaceAll(pkgVmDir.toString(), 'file:pkg/vm/') +
"\n";
compareResultWithExpectationsFile(
expectedDetailedDynamicInterface,
actualDetailedDynamicInterface,
);
}
main() {
test('dynamic-interface-annotator', () async {
final testCaseDir = pkgVmDir.resolve(
'testcases/transformations/dynamic_interface_annotator/',
);
await runTestCase(testCaseDir);
});
}