Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: pkg/kernel/test/lub_test.dart

Issue 2912173002: Start adding unit tests for ClassHierarchy. (Closed)
Patch Set: Rollback inlining JUnit and a tweak for TODO. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/kernel/test/class_hierarchy_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/test/lub_test.dart
diff --git a/pkg/kernel/test/lub_test.dart b/pkg/kernel/test/lub_test.dart
deleted file mode 100644
index 25a310aae95bb4b18f95dd3a2e06945cb3367456..0000000000000000000000000000000000000000
--- a/pkg/kernel/test/lub_test.dart
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright (c) 2017, 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:kernel/ast.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:kernel/testing/mock_sdk_program.dart';
-import 'package:test/test.dart';
-
-main() {
- Library makeTestLibrary(Program program) {
- var library = new Library(Uri.parse('org-dartlang:///test.dart'))
- ..parent = program;
- program.libraries.add(library);
- return library;
- }
-
- test('depth', () {
- var program = createMockSdkProgram();
- var coreTypes = new CoreTypes(program);
- var defaultSuper = coreTypes.objectClass.asThisSupertype;
- var library = makeTestLibrary(program);
-
- Class addClass(Class c) {
- library.addClass(c);
- return c;
- }
-
- var base = addClass(new Class(name: 'base', supertype: defaultSuper));
- var extends_ =
- addClass(new Class(name: 'extends_', supertype: base.asThisSupertype));
- var with_ = addClass(new Class(
- name: 'with_',
- supertype: defaultSuper,
- mixedInType: base.asThisSupertype));
- var implements_ = addClass(new Class(
- name: 'implements_',
- supertype: defaultSuper,
- implementedTypes: [base.asThisSupertype]));
- var hierarchy = new ClassHierarchy(program);
-
- expect(hierarchy.getClassDepth(coreTypes.objectClass), 0);
- expect(hierarchy.getClassDepth(base), 1);
- expect(hierarchy.getClassDepth(extends_), 2);
- expect(hierarchy.getClassDepth(with_), 2);
- expect(hierarchy.getClassDepth(implements_), 2);
- });
-
- test('ranked_superclasses', () {
- var program = createMockSdkProgram();
- var coreTypes = new CoreTypes(program);
- var defaultSuper = coreTypes.objectClass.asThisSupertype;
- var library = makeTestLibrary(program);
-
- Class addClass(String name, List<Class> implements_) {
- var c = new Class(
- name: name,
- supertype: defaultSuper,
- implementedTypes: implements_.map((c) => c.asThisSupertype).toList());
- library.addClass(c);
- return c;
- }
-
- // Create the class hierarchy:
- //
- // Object
- // |
- // A
- // / \
- // B C
- // | |
- // | D
- // \ /
- // E
- var a = addClass('A', []);
- var b = addClass('B', [a]);
- var c = addClass('C', [a]);
- var d = addClass('D', [c]);
- var e = addClass('E', [b, d]);
- var hierarchy = new ClassHierarchy(program);
-
- expect(hierarchy.getRankedSuperclasses(a), [a, coreTypes.objectClass]);
- expect(hierarchy.getRankedSuperclasses(b), [b, a, coreTypes.objectClass]);
- expect(hierarchy.getRankedSuperclasses(c), [c, a, coreTypes.objectClass]);
- expect(
- hierarchy.getRankedSuperclasses(d), [d, c, a, coreTypes.objectClass]);
- if (hierarchy.getClassIndex(b) < hierarchy.getClassIndex(c)) {
- expect(hierarchy.getRankedSuperclasses(e),
- [e, d, b, c, a, coreTypes.objectClass]);
- } else {
- expect(hierarchy.getRankedSuperclasses(e),
- [e, d, c, b, a, coreTypes.objectClass]);
- }
- });
-
- test('least_upper_bound_non_generic', () {
- var program = createMockSdkProgram();
- var coreTypes = new CoreTypes(program);
- var defaultSuper = coreTypes.objectClass.asThisSupertype;
- var library = makeTestLibrary(program);
-
- Class addClass(String name, List<Class> implements_) {
- var c = new Class(
- name: name,
- supertype: defaultSuper,
- implementedTypes: implements_.map((c) => c.asThisSupertype).toList());
- library.addClass(c);
- return c;
- }
-
- // Create the class hierarchy:
- //
- // Object
- // / \
- // A B
- // /|\
- // C D E
- // |X|/
- // FG HI
- //
- // (F and G both implement (C, D); H and I both implement (C, D, E).
- var a = addClass('A', []);
- var b = addClass('B', []);
- var c = addClass('C', [a]);
- var d = addClass('D', [a]);
- var e = addClass('E', [a]);
- var f = addClass('F', [c, d]);
- var g = addClass('G', [c, d]);
- var h = addClass('H', [c, d, e]);
- var i = addClass('I', [c, d, e]);
- var hierarchy = new ClassHierarchy(program);
-
- expect(hierarchy.getClassicLeastUpperBound(a.rawType, b.rawType),
- coreTypes.objectClass.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(
- a.rawType, coreTypes.objectClass.rawType),
- coreTypes.objectClass.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(
- coreTypes.objectClass.rawType, b.rawType),
- coreTypes.objectClass.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(c.rawType, d.rawType), a.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(c.rawType, a.rawType), a.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(a.rawType, d.rawType), a.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(f.rawType, g.rawType), a.rawType);
- expect(
- hierarchy.getClassicLeastUpperBound(h.rawType, i.rawType), a.rawType);
- });
-
- test('least_upper_bound_non_generic', () {
- var program = createMockSdkProgram();
- var coreTypes = new CoreTypes(program);
- var defaultSuper = coreTypes.objectClass.asThisSupertype;
- var library = makeTestLibrary(program);
- var int = coreTypes.intClass.rawType;
- var double = coreTypes.doubleClass.rawType;
- var bool = coreTypes.boolClass.rawType;
-
- Class addClass(String name, List<String> typeParameterNames,
- List<Supertype> implements_(List<DartType> typeParameterTypes)) {
- var typeParameters = typeParameterNames
- .map((name) => new TypeParameter(name, coreTypes.objectClass.rawType))
- .toList();
- var typeParameterTypes = typeParameters
- .map((parameter) => new TypeParameterType(parameter))
- .toList();
- var c = new Class(
- name: name,
- typeParameters: typeParameters,
- supertype: defaultSuper,
- implementedTypes: implements_(typeParameterTypes));
- library.addClass(c);
- return c;
- }
-
- // Create the class hierarchy:
- //
- // Object
- // |
- // A
- // / \
- // B<T> C<U>
- // \ /
- // D<T,U>
- // / \
- // E F
- //
- // Where E implements D<int, double> and F implements D<int, bool>.
- var a = addClass('A', [], (_) => []);
- var b = addClass('B', ['T'], (_) => [a.asThisSupertype]);
- var c = addClass('C', ['U'], (_) => [a.asThisSupertype]);
- var d = addClass('D', ['T', 'U'], (typeParameterTypes) {
- var t = typeParameterTypes[0];
- var u = typeParameterTypes[1];
- return [
- new Supertype(b, [t]),
- new Supertype(c, [u])
- ];
- });
- var e = addClass(
- 'E',
- [],
- (_) => [
- new Supertype(d, [int, double])
- ]);
- var f = addClass(
- 'F',
- [],
- (_) => [
- new Supertype(d, [int, bool])
- ]);
- var hierarchy = new ClassHierarchy(program);
-
- expect(
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]),
- new InterfaceType(d, [int, double])),
- new InterfaceType(d, [int, double]));
- expect(
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]),
- new InterfaceType(d, [int, bool])),
- new InterfaceType(b, [int]));
- expect(
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]),
- new InterfaceType(d, [bool, double])),
- new InterfaceType(c, [double]));
- expect(
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]),
- new InterfaceType(d, [bool, int])),
- a.rawType);
- expect(hierarchy.getClassicLeastUpperBound(e.rawType, f.rawType),
- new InterfaceType(b, [int]));
- });
-}
« no previous file with comments | « pkg/kernel/test/class_hierarchy_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698