dart-sdk/tests/lib/mirrors/generic_f_bounded_mixin_application_test.dart
Ryan Macnak 081e2acf29 [test] Update copied mirrors tests for Dart 3.
Bug: https://github.com/dart-lang/sdk/issues/40045
Change-Id: Ic0f62843d61b613e61f434b72b9553dd1e6897af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132441
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-01-23 18:09:37 +00:00

123 lines
5.3 KiB
Dart

// Copyright (c) 2013, 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.
library test.generic_f_bounded;
import 'dart:mirrors';
import 'package:expect/expect.dart';
import 'generics_helper.dart';
class Collection<C> {}
class Serializable<S> {}
class OrderedCollection<V> extends Collection<V>
with Serializable<OrderedCollection<V>> {}
class AbstractOrderedCollection<W> = Collection<W>
with Serializable<AbstractOrderedCollection<W>>;
class CustomOrderedCollection<Z> extends AbstractOrderedCollection<Z> {}
class OrderedIntegerCollection extends OrderedCollection<int> {}
class CustomOrderedIntegerCollection extends CustomOrderedCollection<int> {}
class Serializer<R extends Serializable<R>> {}
class CollectionSerializer extends Serializer<Collection> {}
class OrderedCollectionSerializer extends Serializer<OrderedCollection> {}
main() {
ClassMirror collectionDecl = reflectClass(Collection);
ClassMirror serializableDecl = reflectClass(Serializable);
ClassMirror orderedCollectionDecl = reflectClass(OrderedCollection);
ClassMirror abstractOrderedCollectionDecl =
reflectClass(AbstractOrderedCollection);
ClassMirror customOrderedCollectionDecl =
reflectClass(CustomOrderedCollection);
ClassMirror orderedIntegerCollection = reflectClass(OrderedIntegerCollection);
ClassMirror customOrderedIntegerCollection =
reflectClass(CustomOrderedIntegerCollection);
ClassMirror serializerDecl = reflectClass(Serializer);
ClassMirror collectionSerializerDecl = reflectClass(CollectionSerializer);
ClassMirror orderedCollectionSerializerDecl =
reflectClass(OrderedCollectionSerializer);
ClassMirror orderedCollectionOfInt = orderedIntegerCollection.superclass!;
ClassMirror customOrderedCollectionOfInt =
customOrderedIntegerCollection.superclass!;
ClassMirror serializerOfCollection = collectionSerializerDecl.superclass!;
ClassMirror serializerOfOrderedCollection =
orderedCollectionSerializerDecl.superclass!;
ClassMirror collectionOfDynamic = reflect(new Collection()).type;
ClassMirror orderedCollectionOfDynamic =
reflect(new OrderedCollection()).type;
ClassMirror collectionWithSerializableOfOrderedCollection =
orderedCollectionDecl.superclass!;
Expect.isTrue(collectionDecl.isOriginalDeclaration);
Expect.isTrue(serializableDecl.isOriginalDeclaration);
Expect.isTrue(orderedCollectionDecl.isOriginalDeclaration);
Expect.isTrue(abstractOrderedCollectionDecl.isOriginalDeclaration);
Expect.isTrue(customOrderedCollectionDecl.isOriginalDeclaration);
Expect.isTrue(orderedIntegerCollection.isOriginalDeclaration);
Expect.isTrue(customOrderedIntegerCollection.isOriginalDeclaration);
Expect.isTrue(serializerDecl.isOriginalDeclaration);
Expect.isTrue(collectionSerializerDecl.isOriginalDeclaration);
Expect.isTrue(orderedCollectionSerializerDecl.isOriginalDeclaration);
Expect.isFalse(orderedCollectionOfInt.isOriginalDeclaration);
Expect.isFalse(customOrderedCollectionOfInt.isOriginalDeclaration);
Expect.isFalse(serializerOfCollection.isOriginalDeclaration);
Expect.isFalse(serializerOfOrderedCollection.isOriginalDeclaration);
Expect.isFalse(collectionOfDynamic.isOriginalDeclaration);
Expect.isFalse(
collectionWithSerializableOfOrderedCollection.isOriginalDeclaration);
TypeVariableMirror rFromSerializer = serializerDecl.typeVariables.single;
ClassMirror serializableOfR = rFromSerializer.upperBound as ClassMirror;
Expect.isFalse(serializableOfR.isOriginalDeclaration);
Expect.equals(serializableDecl, serializableOfR.originalDeclaration);
Expect.equals(rFromSerializer, serializableOfR.typeArguments.single);
typeParameters(collectionDecl, [#C]);
typeParameters(serializableDecl, [#S]);
typeParameters(orderedCollectionDecl, [#V]);
typeParameters(abstractOrderedCollectionDecl, [#W]);
typeParameters(customOrderedCollectionDecl, [#Z]);
typeParameters(orderedIntegerCollection, []);
typeParameters(customOrderedIntegerCollection, []);
typeParameters(serializerDecl, [#R]);
typeParameters(collectionSerializerDecl, []);
typeParameters(orderedCollectionSerializerDecl, []);
typeParameters(orderedCollectionOfInt, [#V]);
typeParameters(customOrderedCollectionOfInt, [#Z]);
typeParameters(serializerOfCollection, [#R]);
typeParameters(serializerOfOrderedCollection, [#R]);
typeParameters(collectionOfDynamic, [#C]);
typeParameters(collectionWithSerializableOfOrderedCollection, []);
typeArguments(collectionDecl, []);
typeArguments(serializableDecl, []);
typeArguments(orderedCollectionDecl, []);
typeArguments(abstractOrderedCollectionDecl, []);
typeArguments(customOrderedCollectionDecl, []);
typeArguments(orderedIntegerCollection, []);
typeArguments(customOrderedIntegerCollection, []);
typeArguments(serializerDecl, []);
typeArguments(collectionSerializerDecl, []);
typeArguments(orderedCollectionSerializerDecl, []);
typeArguments(orderedCollectionOfInt, [reflectClass(int)]);
typeArguments(customOrderedCollectionOfInt, [reflectClass(int)]);
typeArguments(serializerOfCollection, [collectionOfDynamic]);
typeArguments(serializerOfOrderedCollection, [orderedCollectionOfDynamic]);
typeArguments(collectionWithSerializableOfOrderedCollection, []);
}