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

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

Issue 2941363002: Add the 'crossGettersSetters' flag to ClassHierarchy.forEachOverridePair(). (Closed)
Patch Set: Created 3 years, 6 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/lib/src/incremental_class_hierarchy.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/class_hierarchy_test.dart
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index a05464f29ffa61529b30cb5894526927b29202b5..b4040a6536c702f2081ecaec2a707afd1ade9a8d 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -129,6 +129,13 @@ abstract class _ClassHierarchyTest {
ClassHierarchy createClassHierarchy(Program program);
+ Procedure newEmptyGetter(String name,
+ {DartType returnType: const DynamicType()}) {
+ var body = new Block([new ReturnStatement(new NullLiteral())]);
+ return new Procedure(new Name(name), ProcedureKind.Getter,
+ new FunctionNode(body, returnType: returnType));
+ }
+
Procedure newEmptyMethod(String name, {bool isAbstract: false}) {
var body = isAbstract ? null : new Block([]);
return new Procedure(new Name(name), ProcedureKind.Method,
@@ -136,14 +143,15 @@ abstract class _ClassHierarchyTest {
isAbstract: isAbstract);
}
- Procedure newEmptySetter(String name, {bool abstract: false}) {
+ Procedure newEmptySetter(String name,
+ {bool abstract: false, DartType type: const DynamicType()}) {
var body = abstract ? null : new Block([]);
return new Procedure(
new Name(name),
ProcedureKind.Setter,
new FunctionNode(body,
returnType: const VoidType(),
- positionalParameters: [new VariableDeclaration('_')]));
+ positionalParameters: [new VariableDeclaration('_', type: type)]));
}
void setUp() {
@@ -157,6 +165,38 @@ abstract class _ClassHierarchyTest {
program.libraries.add(library);
}
+ void test_forEachOverridePair_crossGetterSetter_super() {
+ var int = coreTypes.intClass.rawType;
+ var a = addClass(new Class(name: 'A', supertype: objectSuper, procedures: [
+ newEmptySetter('foo', type: int),
+ newEmptyGetter('bar', returnType: int)
+ ]));
+ var b = addClass(new Class(
+ name: 'B',
+ supertype: a.asThisSupertype,
+ procedures: [newEmptyGetter('foo'), newEmptySetter('bar')]));
+
+ _assertTestLibraryText('''
+class A {
+ set foo(core::int _) → void {}
+ get bar() → core::int {
+ return null;
+ }
+}
+class B extends self::A {
+ get foo() → dynamic {
+ return null;
+ }
+ set bar(dynamic _) → void {}
+}
+''');
+
+ _assertOverridePairs(b, [
+ 'test::B::foo overrides test::A::foo=',
+ 'test::B::bar= overrides test::A::bar'
+ ]);
Paul Berry 2017/06/16 22:05:11 We should also test that if `crossGettersSetters:
+ }
+
/// 2. A non-abstract member is inherited from a superclass, and in the
/// context of this class, it overrides an abstract member inheritable through
/// one of its superinterfaces.
@@ -905,12 +945,14 @@ class B<T> extends self::A<self::B::T, core::bool> {}
void _assertOverridePairs(Class class_, List<String> expected) {
List<String> overrideDescriptions = [];
hierarchy.forEachOverridePair(class_,
- (Member declaredMember, Member interfaceMember, bool isSetter) {
- String declaredName = '$declaredMember${isSetter ? '=': ''}';
- String interfaceName = '$interfaceMember${isSetter ? '=': ''}';
+ (Member declaredMember, Member interfaceMember, bool isSetter_) {
Paul Berry 2017/06/16 22:05:11 We are no longer checking that forEachOverridePair
scheglov 2017/06/16 23:49:41 Done.
+ String declaredSuffix = _isSetter(declaredMember) ? '=' : '';
+ String interfaceSuffix = _isSetter(interfaceMember) ? '=' : '';
+ String declaredName = '$declaredMember$declaredSuffix';
+ String interfaceName = '$interfaceMember$interfaceSuffix';
var desc = '$declaredName overrides $interfaceName';
overrideDescriptions.add(desc);
- });
+ }, crossGettersSetters: true);
expect(overrideDescriptions, unorderedEquals(expected));
}
@@ -943,4 +985,8 @@ import "dart:core" as core;
expect(actualText, expectedText);
}
+
+ static bool _isSetter(Member member) {
+ return member is Procedure && member.kind == ProcedureKind.Setter;
+ }
}
« no previous file with comments | « pkg/kernel/lib/src/incremental_class_hierarchy.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698