Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Unified Diff: pkg/analyzer/test/src/dart/analysis/search_test.dart

Issue 2522503004: Start implementing search support in AnalysisDriver. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/test/src/dart/analysis/search_test.dart
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..03a2a5316bdaa43d6b602c59e6f67cec0817b8a9
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -0,0 +1,168 @@
+// Copyright (c) 2016, 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.
+
+import 'dart:async';
+
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/analysis/search.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'base.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(SearchTest);
+ });
+}
+
+class ExpectedResult {
+ final List<String> enclosingComponents;
+ final SearchResultKind kind;
+ final int offset;
+ final int length;
+ final bool isResolved;
+ final bool isQualified;
+
+ ExpectedResult(this.enclosingComponents, this.kind, this.offset, this.length,
+ {this.isResolved: true, this.isQualified: false});
+
+ bool operator ==(Object result) {
+ return result is SearchResult &&
+ result.kind == this.kind &&
+ result.isResolved == this.isResolved &&
+ result.isQualified == this.isQualified &&
+ result.offset == this.offset &&
+ hasExpectedComponents(result.enclosingElement);
+ }
+
+ bool hasExpectedComponents(Element element) {
+ for (int i = enclosingComponents.length - 1; i >= 0; i--) {
+ if (element == null) {
+ return false;
+ }
+ if (element is CompilationUnitElement) {
+ if (element.source.uri.toString() != enclosingComponents[0]) {
+ return false;
+ }
+ } else if (element.name != enclosingComponents[i]) {
+ return false;
+ }
+ element = element.enclosingElement;
+ }
+ return true;
+ }
+
+ @override
+ String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.write("ExpectedResult(kind=");
+ buffer.write(kind);
+ buffer.write(", enclosingComponents=");
+ buffer.write(enclosingComponents);
+ buffer.write(", offset=");
+ buffer.write(offset);
+ buffer.write(", length=");
+ buffer.write(length);
+ buffer.write(", isResolved=");
+ buffer.write(isResolved);
+ buffer.write(", isQualified=");
+ buffer.write(isQualified);
+ buffer.write(")");
+ return buffer.toString();
+ }
+}
+
+@reflectiveTest
+class SearchTest extends BaseAnalysisDriverTest {
+ static const testUri = 'package:test/test.dart';
+
+ test_searchReferences_Label() async {
+ addTestFile('''
+main() {
+label:
+ while (true) {
+ if (true) {
+ break label; // 1
+ }
+ break label; // 2
+ }
+}
+''');
+ int offset = findOffset('label:');
+ List<String> main = [testUri, 'main'];
+ var expected = [
+ _expectId(main, SearchResultKind.REFERENCE, 'label; // 1'),
+ _expectId(main, SearchResultKind.REFERENCE, 'label; // 2')
+ ];
+ await _verifyReferences(offset, expected);
+ }
+
+ test_searchReferences_localVariable() async {
+ addTestFile(r'''
+main() {
+ var v;
+ v = 1;
+ v += 2;
+ print(v);
+ v();
+}
+''');
+ int offset = findOffset('v;');
+ List<String> main = [testUri, 'main'];
+ var expected = [
+ _expectId(main, SearchResultKind.WRITE, 'v = 1;'),
+ _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'),
+ _expectId(main, SearchResultKind.READ, 'v);'),
+ _expectId(main, SearchResultKind.INVOCATION, 'v();')
+ ];
+ await _verifyReferences(offset, expected);
+ }
+
+ test_searchReferences_localVariable_inForEachLoop() async {
+ addTestFile('''
+main() {
+ for (var v in []) {
+ v = 1;
+ v += 2;
+ print(v);
+ v();
+ }
+}
+''');
+ int offset = findOffset('v in []');
+ List<String> main = [testUri, 'main'];
+ var expected = [
+ _expectId(main, SearchResultKind.WRITE, 'v = 1;'),
+ _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'),
+ _expectId(main, SearchResultKind.READ, 'v);'),
+ _expectId(main, SearchResultKind.INVOCATION, 'v();')
+ ];
+ await _verifyReferences(offset, expected);
+ }
+
+ ExpectedResult _expectId(
+ List<String> enclosingComponents, SearchResultKind kind, String search,
+ {int length, bool isResolved: true, bool isQualified: false}) {
+ int offset = findOffset(search);
+ if (length == null) {
+ length = getLeadingIdentifierLength(search);
+ }
+ return new ExpectedResult(enclosingComponents, kind, offset, length,
+ isResolved: isResolved, isQualified: isQualified);
+ }
+
+ Future _verifyReferences(
+ int offset, List<ExpectedResult> expectedMatches) async {
+ List<SearchResult> results =
+ await driver.search.references(testFile, offset);
+ _assertResults(results, expectedMatches);
+ expect(results, hasLength(expectedMatches.length));
+ }
+
+ static void _assertResults(
+ List<SearchResult> matches, List<ExpectedResult> expectedMatches) {
+ expect(matches, unorderedEquals(expectedMatches));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698