081e2acf29
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>
78 lines
2.5 KiB
Dart
78 lines
2.5 KiB
Dart
// 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.
|
|
|
|
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);
|
|
}
|