blob: 5adbd2d0a0d348df5ebe410fd69d32595ad77e03 [file] [log] [blame]
// 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.
// @dart = 2.9
// Test expectations for 'class_mirror_type_variables_data.dart'.
library class_mirror_type_variables_expect;
import "dart:mirrors";
import "package:expect/expect.dart";
/// The interface of [Env] is shared between the runtime and the source mirrors
/// test.
abstract class Env {
ClassMirror getA();
ClassMirror getB();
ClassMirror getC();
ClassMirror getD();
ClassMirror getE();
ClassMirror getF();
ClassMirror getNoTypeParams();
ClassMirror getObject();
ClassMirror getString();
ClassMirror getHelperOfString();
}
void test(Env env) {
testNoTypeParams(env);
testA(env);
testBAndC(env);
testD(env);
testE(env);
testF(env);
}
testNoTypeParams(Env env) {
ClassMirror cm = env.getNoTypeParams();
Expect.equals(cm.typeVariables.length, 0);
}
void testA(Env env) {
ClassMirror a = env.getA();
Expect.equals(2, a.typeVariables.length);
TypeVariableMirror aT = a.typeVariables[0];
TypeVariableMirror aS = a.typeVariables[1];
ClassMirror aTBound = aT.upperBound as ClassMirror;
ClassMirror aSBound = aS.upperBound as ClassMirror;
Expect.isTrue(aTBound.isOriginalDeclaration);
Expect.isTrue(aSBound.isOriginalDeclaration);
Expect.equals(env.getObject(), aTBound);
Expect.equals(env.getString(), aSBound);
}
void testBAndC(Env env) {
ClassMirror b = env.getB();
ClassMirror c = env.getC();
Expect.equals(1, b.typeVariables.length);
Expect.equals(1, c.typeVariables.length);
TypeVariableMirror bZ = b.typeVariables[0];
TypeVariableMirror cZ = c.typeVariables[0];
ClassMirror bZBound = bZ.upperBound as ClassMirror;
ClassMirror cZBound = cZ.upperBound as ClassMirror;
Expect.isFalse(bZBound.isOriginalDeclaration);
Expect.isFalse(cZBound.isOriginalDeclaration);
Expect.equals(b, bZBound.originalDeclaration);
Expect.equals(b, cZBound.originalDeclaration);
TypeMirror bZBoundTypeArgument = bZBound.typeArguments.single;
TypeMirror cZBoundTypeArgument = cZBound.typeArguments.single;
TypeVariableMirror bZBoundTypeVariable = bZBound.typeVariables.single;
TypeVariableMirror cZBoundTypeVariable = cZBound.typeVariables.single;
Expect.equals(b, bZ.owner);
Expect.equals(c, cZ.owner);
Expect.equals(b, bZBoundTypeVariable.owner);
Expect.equals(b, cZBoundTypeVariable.owner);
Expect.equals(bZ, bZBoundTypeArgument);
Expect.equals(cZ, cZBoundTypeArgument);
Expect.equals(bZ, bZBoundTypeVariable);
Expect.equals(bZ, cZBoundTypeVariable);
}
testD(Env env) {
ClassMirror cm = env.getD();
Expect.equals(3, cm.typeVariables.length);
var values = cm.typeVariables;
values.forEach((e) {
Expect.equals(true, e is TypeVariableMirror);
});
// Names of type variables are not preserved after type canonicalization
// and are therefore not compared to expected names.
}
void testE(Env env) {
ClassMirror e = env.getE();
TypeVariableMirror eR = e.typeVariables.single;
ClassMirror mapRAndHelperOfString = eR.upperBound as ClassMirror;
Expect.isFalse(mapRAndHelperOfString.isOriginalDeclaration);
Expect.equals(eR, mapRAndHelperOfString.typeArguments.first);
Expect.equals(
env.getHelperOfString(), mapRAndHelperOfString.typeArguments.last);
}
void testF(Env env) {
ClassMirror f = env.getF();
TypeVariableMirror fZ = f.typeVariables[0];
ClassMirror fZBound = fZ.upperBound as ClassMirror;
ClassMirror fZBoundTypeArgument = fZBound.typeArguments.single as ClassMirror;
Expect.equals(1, f.typeVariables.length);
Expect.isFalse(fZBound.isOriginalDeclaration);
Expect.isFalse(fZBoundTypeArgument.isOriginalDeclaration);
Expect.equals(f, fZBoundTypeArgument.originalDeclaration);
Expect.equals(fZ, fZBoundTypeArgument.typeArguments.single);
}