dart-sdk/tests/lib_2/mirrors/metadata_test.dart
Leaf Petersen b101a7d002 Add language versions to _2 test libraries
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Leaf Petersen <leafp@google.com>
2021-04-26 17:58:57 +00:00

80 lines
2.2 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.
// @dart = 2.9
library test.metadata_test;
import 'dart:mirrors';
const string = 'a metadata string';
const symbol = const Symbol('symbol');
const hest = 'hest';
@symbol
@string
class MyClass {
@hest
@hest
@symbol
var x;
var y;
@string
@symbol
@string
myMethod() => 1;
myOtherMethod() => 2;
}
checkMetadata(DeclarationMirror mirror, List expectedMetadata) {
List metadata = mirror.metadata.map((m) => m.reflectee).toList();
if (metadata == null) {
throw 'Null metadata on $mirror';
}
int expectedLength = expectedMetadata.length;
int actualLength = metadata.length;
if (expectedLength != actualLength) {
throw 'Expected length = $expectedLength, but got length = $actualLength.';
}
for (int i = 0; i < expectedLength; i++) {
if (metadata[i] != expectedMetadata[i]) {
throw '${metadata[i]} is not "${expectedMetadata[i]}"'
' in $mirror at index $i';
}
}
print(metadata);
}
@symbol
@string
@symbol
main() {
if (MirrorSystem.getName(symbol) != 'symbol') {
// This happened in dart2js due to how early library metadata is
// computed.
throw 'Bad constant: $symbol';
}
MirrorSystem mirrors = currentMirrorSystem();
ClassMirror myClassMirror = reflectClass(MyClass);
checkMetadata(myClassMirror, [symbol, string]);
LibraryMirror lib = mirrors.findLibrary(#test.metadata_test);
MethodMirror function = lib.declarations[#main] as MethodMirror;
checkMetadata(function, [symbol, string, symbol]);
MethodMirror method = myClassMirror.declarations[#myMethod] as MethodMirror;
checkMetadata(method, [string, symbol, string]);
method = myClassMirror.declarations[#myOtherMethod] as MethodMirror;
checkMetadata(method, []);
VariableMirror xMirror = myClassMirror.declarations[#x] as VariableMirror;
checkMetadata(xMirror, [hest, hest, symbol]);
VariableMirror yMirror = myClassMirror.declarations[#y] as VariableMirror;
checkMetadata(yMirror, []);
// TODO(ahe): Test local functions.
}