Files
sdk/tests/lib/mirrors/generic_f_bounded_test.dart
T
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

62 lines
2.1 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 Magnitude<T> {}
class Real extends Magnitude<Real> {}
class Sorter<R extends Magnitude<R>> {}
class RealSorter extends Sorter<Real> {}
main() {
ClassMirror magnitudeDecl = reflectClass(Magnitude);
ClassMirror realDecl = reflectClass(Real);
ClassMirror sorterDecl = reflectClass(Sorter);
ClassMirror realSorterDecl = reflectClass(RealSorter);
ClassMirror magnitudeOfReal = realDecl.superclass!;
ClassMirror sorterOfReal = realSorterDecl.superclass!;
Expect.isTrue(magnitudeDecl.isOriginalDeclaration);
Expect.isTrue(realDecl.isOriginalDeclaration);
Expect.isTrue(sorterDecl.isOriginalDeclaration);
Expect.isTrue(realSorterDecl.isOriginalDeclaration);
Expect.isFalse(magnitudeOfReal.isOriginalDeclaration);
Expect.isFalse(sorterOfReal.isOriginalDeclaration);
TypeVariableMirror tFromMagnitude = magnitudeDecl.typeVariables.single;
TypeVariableMirror rFromSorter = sorterDecl.typeVariables.single;
Expect.equals(reflectClass(Object), tFromMagnitude.upperBound);
ClassMirror magnitudeOfR = rFromSorter.upperBound as ClassMirror;
Expect.isFalse(magnitudeOfR.isOriginalDeclaration);
Expect.equals(magnitudeDecl, magnitudeOfR.originalDeclaration);
Expect.equals(rFromSorter, magnitudeOfR.typeArguments.single);
typeParameters(magnitudeDecl, [#T]);
typeParameters(realDecl, []);
typeParameters(sorterDecl, [#R]);
typeParameters(realSorterDecl, []);
typeParameters(magnitudeOfReal, [#T]);
typeParameters(sorterOfReal, [#R]);
typeParameters(magnitudeOfR, [#T]);
typeArguments(magnitudeDecl, []);
typeArguments(realDecl, []);
typeArguments(sorterDecl, []);
typeArguments(realSorterDecl, []);
typeArguments(magnitudeOfReal, [realDecl]); //# 01: ok
typeArguments(sorterOfReal, [realDecl]); //# 01: ok
typeArguments(magnitudeOfR, [rFromSorter]);
}