8a2deccc9a
Reformat these packages after the language version was bumped in https://dart-review.googlesource.com/c/sdk/+/487942 TEST=ci Change-Id: I6475e4b3d096b3c1f9aded34a5736989222e1689 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/489400 Auto-Submit: Alexander Markov <alexmarkov@google.com> Commit-Queue: Chloe Stefantsova <cstefantsova@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
121 lines
3.9 KiB
Dart
121 lines
3.9 KiB
Dart
// 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 'package:dart2bytecode/object_table.dart';
|
|
import 'package:kernel/ast.dart';
|
|
import 'package:kernel/core_types.dart' show CoreTypes;
|
|
import 'package:kernel/testing/mock_sdk_component.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:expect/expect.dart';
|
|
|
|
main() {
|
|
late Library lib1;
|
|
late Library lib2;
|
|
late CoreTypes coreTypes;
|
|
late Supertype objectSupertype;
|
|
late ObjectTable objectTable;
|
|
|
|
Class addClass(
|
|
Library lib,
|
|
String name, [
|
|
List<TypeParameter> typeParameters = const [],
|
|
]) {
|
|
final cls = Class(
|
|
name: name,
|
|
supertype: objectSupertype,
|
|
typeParameters: typeParameters,
|
|
fileUri: lib.fileUri,
|
|
);
|
|
cls.parent = lib;
|
|
lib.addClass(cls);
|
|
return cls;
|
|
}
|
|
|
|
setUp(() {
|
|
// Start with mock SDK libraries.
|
|
final component = createMockSdkComponent();
|
|
coreTypes = CoreTypes(component);
|
|
objectSupertype = coreTypes.objectClass.asThisSupertype;
|
|
|
|
// Add test libraries.
|
|
lib1 = Library(
|
|
Uri.parse('org-dartlang:///test1.dart'),
|
|
name: 'lib1',
|
|
fileUri: Uri.parse('file:///test1.dart'),
|
|
);
|
|
lib1.parent = component;
|
|
component.libraries.add(lib1);
|
|
|
|
lib2 = Library(
|
|
Uri.parse('org-dartlang:///test2.dart'),
|
|
name: 'lib2',
|
|
fileUri: Uri.parse('file:///test2.dart'),
|
|
);
|
|
lib2.parent = component;
|
|
component.libraries.add(lib2);
|
|
|
|
objectTable = ObjectTable(coreTypes);
|
|
});
|
|
|
|
tearDown(() {});
|
|
|
|
test('libraries', () {
|
|
final h1 = objectTable.getHandle(lib1)!;
|
|
final h2 = objectTable.getHandle(lib2)!;
|
|
Expect.notEquals(h1, h2);
|
|
Expect.identical(h1, objectTable.getHandle(lib1));
|
|
Expect.identical(h2, objectTable.getHandle(lib2));
|
|
Expect.equals(true, h1.isCacheable);
|
|
Expect.equals(true, h2.isCacheable);
|
|
Expect.equals(false, h1.shouldBeIncludedIntoIndexTable); // 2 uses
|
|
Expect.identical(h1, objectTable.getHandle(lib1));
|
|
Expect.equals(true, h1.shouldBeIncludedIntoIndexTable); // 3 uses
|
|
});
|
|
|
|
test('classes', () {
|
|
final Class c1 = addClass(lib1, 'A');
|
|
final Class c2 = addClass(lib1, 'B');
|
|
final Class c3 = addClass(lib2, 'A');
|
|
final h1 = objectTable.getHandle(c1)!;
|
|
final h2 = objectTable.getHandle(c2)!;
|
|
final h3 = objectTable.getHandle(c3)!;
|
|
Expect.notEquals(h1, h2);
|
|
Expect.notEquals(h1, h3);
|
|
Expect.notEquals(h2, h3);
|
|
Expect.identical(h1, objectTable.getHandle(c1));
|
|
Expect.identical(h2, objectTable.getHandle(c2));
|
|
Expect.identical(h3, objectTable.getHandle(c3));
|
|
Expect.equals(true, h1.isCacheable);
|
|
Expect.equals(true, h2.isCacheable);
|
|
Expect.equals(true, h3.isCacheable);
|
|
final lib1h = objectTable.getHandle(lib1)!;
|
|
final lib2h = objectTable.getHandle(lib2)!;
|
|
Expect.equals(true, lib1h.shouldBeIncludedIntoIndexTable); // 3 uses
|
|
Expect.equals(false, lib2h.shouldBeIncludedIntoIndexTable); // 2 uses
|
|
});
|
|
|
|
test('simple-types', () {
|
|
final h1a = objectTable.getHandle(
|
|
InterfaceType(coreTypes.intClass, Nullability.nonNullable),
|
|
)!;
|
|
final h1b = objectTable.getHandle(
|
|
InterfaceType(coreTypes.intClass, Nullability.nonNullable),
|
|
)!;
|
|
final h2a = objectTable.getHandle(const DynamicType())!;
|
|
final h2b = objectTable.getHandle(DynamicType())!;
|
|
Expect.identical(h1a, h1b);
|
|
Expect.identical(h2a, h2b);
|
|
Expect.notEquals(h1a, h2a);
|
|
Expect.equals(true, h1a.isCacheable);
|
|
Expect.equals(true, h2a.isCacheable);
|
|
Expect.equals(false, h1a.shouldBeIncludedIntoIndexTable); // 2 uses
|
|
objectTable.getHandle(
|
|
InterfaceType(coreTypes.listClass, Nullability.nonNullable, [
|
|
InterfaceType(coreTypes.intClass, Nullability.nonNullable),
|
|
]),
|
|
);
|
|
Expect.equals(true, h1a.shouldBeIncludedIntoIndexTable); // 3 uses
|
|
});
|
|
}
|