blob: 56e2f4fafcaac705c06659db93d06b58fd78c760 [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
library test.method_location;
import "dart:mirrors";
import "package:expect/expect.dart";
part 'method_mirror_location_other.dart';
// We only check for a suffix of the uri because the test might be run from
// any number of absolute paths.
expectLocation(Mirror mirror, String uriSuffix, int line, int column) {
MethodMirror methodMirror;
if (mirror is ClosureMirror) {
methodMirror = mirror.function;
} else {
methodMirror = mirror as MethodMirror;
}
Expect.isTrue(methodMirror is MethodMirror);
final location = methodMirror.location;
final uri = location.sourceUri;
Expect.isTrue(uri.toString().endsWith(uriSuffix), "Expected suffix $uriSuffix in $uri");
Expect.equals(line, location.line, "line");
Expect.equals(column, location.column, "column");
}
class ClassInMainFile {
ClassInMainFile();
method() {}
}
void topLevelInMainFile() {}
spaceIdentedInMainFile() {}
tabIdentedInMainFile() {}
class HasImplicitConstructor {}
typedef bool Predicate(num n);
main() {
localFunction(x) {
return x;
}
String mainSuffix = 'method_mirror_location_test.dart';
String otherSuffix = 'method_mirror_location_other.dart';
// This file.
expectLocation(reflectClass(ClassInMainFile).declarations[#ClassInMainFile],
mainSuffix, 31, 3);
expectLocation(
reflectClass(ClassInMainFile).declarations[#method], mainSuffix, 33, 3);
expectLocation(reflect(topLevelInMainFile), mainSuffix, 36, 1);
expectLocation(reflect(spaceIdentedInMainFile), mainSuffix, 37, 3);
expectLocation(reflect(tabIdentedInMainFile), mainSuffix, 38, 2);
expectLocation(reflect(localFunction), mainSuffix, 45, 3);
// Another part.
expectLocation(reflectClass(ClassInOtherFile).declarations[#ClassInOtherFile],
otherSuffix, 8, 3);
expectLocation(
reflectClass(ClassInOtherFile).declarations[#method], otherSuffix, 10, 3);
expectLocation(reflect(topLevelInOtherFile), otherSuffix, 13, 1);
expectLocation(reflect(spaceIdentedInOtherFile), otherSuffix, 15, 3);
expectLocation(reflect(tabIdentedInOtherFile), otherSuffix, 17, 2);
// Synthetic methods.
Expect.isNull(reflectClass(HasImplicitConstructor)
.declarations[#HasImplicitConstructor]
.location);
Expect.isNull(
(reflectType(Predicate) as TypedefMirror).referent.callMethod.location);
}