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

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

Issue 2549793002: Add 'self_check' runtime for running self-checking unit tests (Closed)
Patch Set: Address comments Created 4 years 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
Index: pkg/kernel/test/class_hierarchy_tester.dart
diff --git a/pkg/kernel/test/class_hierarchy_tester.dart b/pkg/kernel/test/class_hierarchy_tester.dart
deleted file mode 100644
index d4e04ad95f84a0d460d1a347e6ba0ee8b5e3b2ab..0000000000000000000000000000000000000000
--- a/pkg/kernel/test/class_hierarchy_tester.dart
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2016, 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/kernel.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:test/test.dart';
-import 'class_hierarchy_basic.dart';
-import 'dart:io';
-import 'dart:math';
-
-void testClassHierarchyOnProgram(Program program, {bool verbose: false}) {
- BasicClassHierarchy basic = new BasicClassHierarchy(program);
- ClassHierarchy classHierarchy = new ClassHierarchy(program);
- int total = classHierarchy.classes.length;
- int progress = 0;
- for (var class1 in classHierarchy.classes) {
- for (var class2 in classHierarchy.classes) {
- bool isSubclass = classHierarchy.isSubclassOf(class1, class2);
- bool isSubmixture = classHierarchy.isSubmixtureOf(class1, class2);
- bool isSubtype = classHierarchy.isSubtypeOf(class1, class2);
- var asInstance = classHierarchy.getClassAsInstanceOf(class1, class2);
- if (isSubclass != basic.isSubclassOf(class1, class2)) {
- fail('isSubclassOf(${class1.name}, ${class2.name}) returned '
- '$isSubclass but should be ${!isSubclass}');
- }
- if (isSubmixture != basic.isSubmixtureOf(class1, class2)) {
- fail('isSubmixtureOf(${class1.name}, ${class2.name}) returned '
- '$isSubclass but should be ${!isSubclass}');
- }
- if (isSubtype != basic.isSubtypeOf(class1, class2)) {
- fail('isSubtypeOf(${class1.name}, ${class2.name}) returned '
- '$isSubtype but should be ${!isSubtype}');
- }
- if (asInstance != basic.getClassAsInstanceOf(class1, class2)) {
- fail('asInstanceOf(${class1.name}, ${class2.name}) returned '
- '$asInstance but should be '
- '${basic.getClassAsInstanceOf(class1, class2)}');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rSubclass queries ${100 * progress ~/ total}%');
- }
- }
- Set<Name> names = new Set<Name>();
- for (var classNode in classHierarchy.classes) {
- for (var member in classNode.members) {
- names.add(member.name);
- }
- }
- List<Name> nameList = names.toList();
- progress = 0;
- for (var classNode in classHierarchy.classes) {
- Iterable<Name> candidateNames = <Iterable<Name>>[
- basic.gettersAndCalls[classNode].keys,
- basic.setters[classNode].keys,
- pickRandom(nameList, 100)
- ].expand((x) => x);
- for (Name name in candidateNames) {
- Member expectedGetter =
- basic.getDispatchTarget(classNode, name, setter: false);
- Member expectedSetter =
- basic.getDispatchTarget(classNode, name, setter: true);
- Member actualGetter =
- classHierarchy.getDispatchTarget(classNode, name, setter: false);
- Member actualSetter =
- classHierarchy.getDispatchTarget(classNode, name, setter: true);
- if (actualGetter != expectedGetter) {
- fail('lookupGetter($classNode, $name) returned '
- '$actualGetter but should be $expectedGetter');
- }
- if (actualSetter != expectedSetter) {
- fail('lookupSetter($classNode, $name) returned '
- '$actualSetter but should be $expectedSetter');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rDispatch queries ${100 * progress ~/ total}%');
- }
- }
- progress = 0;
- for (var classNode in classHierarchy.classes) {
- Iterable<Name> candidateNames = [
- basic.interfaceGettersAndCalls[classNode].keys,
- basic.interfaceSetters[classNode].keys,
- pickRandom(nameList, 100)
- ].expand((x) => x);
- for (Name name in candidateNames) {
- Member expectedGetter =
- basic.getInterfaceMember(classNode, name, setter: false);
- Member expectedSetter =
- basic.getInterfaceMember(classNode, name, setter: true);
- Member actualGetter =
- classHierarchy.getInterfaceMember(classNode, name, setter: false);
- Member actualSetter =
- classHierarchy.getInterfaceMember(classNode, name, setter: true);
- if (actualGetter != expectedGetter) {
- fail('getInterfaceMember($classNode, $name) returned '
- '$actualGetter but should be $expectedGetter');
- }
- if (actualSetter != expectedSetter) {
- fail('getInterfaceMember($classNode, $name, setter: true) '
- 'returned $actualSetter but should be $expectedSetter');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rInterface queries ${100 * progress ~/ total}%');
- }
- }
- for (var classNode in classHierarchy.classes) {
- String getHash(member, superMember, setter) {
- String eq = setter ? '=' : '';
- return '$member$eq overrides $superMember$eq';
- }
- Set<String> expectedOverrides = new Set<String>();
- basic.forEachOverridePair(classNode, (member, superMember, setter) {
- expectedOverrides.add(getHash(member, superMember, setter));
- });
- Set<String> actualOverrides = new Set<String>();
- classHierarchy.forEachOverridePair(classNode, (member, superMember, setter) {
- actualOverrides.add(getHash(member, superMember, setter));
- });
- for (var actual in actualOverrides) {
- if (!expectedOverrides.contains(actual)) {
- fail("forEachOverridePair($classNode) should not report that $actual");
- }
- }
- for (var expected in expectedOverrides) {
- if (!actualOverrides.contains(expected)) {
- fail("forEachOverridePair($classNode) did not report that $expected");
- }
- }
- }
- if (verbose) {
- print('\rProgress 100%. Done.');
- }
-}
-
-var random = new Random(12345);
-
-List/*<T>*/ pickRandom/*<T>*/(List/*<T>*/ items, int n) {
- var result = /*<T>*/[];
- for (int i = 0; i < n; ++i) {
- result.add(items[random.nextInt(items.length)]);
- }
- return result;
-}
« no previous file with comments | « pkg/kernel/test/class_hierarchy_test_disabled.dart ('k') | pkg/kernel/test/parent_pointer_test_disabled.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698