blob: a2184507052d156ee79e38b24370c0cf6101c5dd [file] [log] [blame]
// Copyright (c) 2014, 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
import "dart:mirrors";
import 'package:expect/expect.dart';
class ParameterAnnotation {
final String value;
const ParameterAnnotation(this.value);
}
class Foo {
Foo(@ParameterAnnotation("vogel") p) {}
Foo.named(@ParameterAnnotation("hamster") p) {}
Foo.named2(
@ParameterAnnotation("hamster") p, @ParameterAnnotation("wurm") p2) {}
f1(@ParameterAnnotation("hest") p) {}
f2(@ParameterAnnotation("hest") @ParameterAnnotation("fisk") p) {}
f3(a, @ParameterAnnotation("fugl") p) {}
f4(@ParameterAnnotation("fisk") a, {@ParameterAnnotation("hval") p}) {}
f5(@ParameterAnnotation("fisk") a, [@ParameterAnnotation("hval") p]) {}
f6({@ParameterAnnotation("fisk") z, @ParameterAnnotation("hval") p}) {}
set s1(@ParameterAnnotation("cheval") p) {}
}
expectAnnotations(
Type type, Symbol method, int parameterIndex, List<String> expectedValues) {
MethodMirror mirror = reflectClass(type).declarations[method] as MethodMirror;
ParameterMirror parameter = mirror.parameters[parameterIndex];
List<InstanceMirror> annotations = parameter.metadata;
Expect.equals(annotations.length, expectedValues.length,
"wrong number of parameter annotations");
for (int i = 0; i < annotations.length; i++) {
Expect.equals(
expectedValues[i],
annotations[i].reflectee.value,
"annotation #$i of parameter #$parameterIndex "
"of $type.$method.");
}
}
main() {
expectAnnotations(Foo, #Foo, 0, ["vogel"]);
expectAnnotations(Foo, #Foo.named, 0, ["hamster"]);
expectAnnotations(Foo, #Foo.named2, 0, ["hamster"]);
expectAnnotations(Foo, #Foo.named2, 1, ["wurm"]);
expectAnnotations(Foo, #f1, 0, ["hest"]);
expectAnnotations(Foo, #f2, 0, ["hest", "fisk"]);
expectAnnotations(Foo, #f3, 0, []);
expectAnnotations(Foo, #f3, 1, ["fugl"]);
expectAnnotations(Foo, #f4, 0, ["fisk"]);
expectAnnotations(Foo, #f4, 1, ["hval"]);
expectAnnotations(Foo, #f5, 0, ["fisk"]);
expectAnnotations(Foo, #f5, 1, ["hval"]);
expectAnnotations(Foo, #f6, 0, ["fisk"]);
expectAnnotations(Foo, #f6, 1, ["hval"]);
expectAnnotations(Foo, const Symbol('s1='), 0, ["cheval"]);
}