Index: pkg/analysis_services/test/index/abstract_single_unit.dart |
diff --git a/pkg/analysis_services/test/index/abstract_single_unit.dart b/pkg/analysis_services/test/index/abstract_single_unit.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7dc112d36787ebf16bdaae1cc74cfab8d46fb9b0 |
--- /dev/null |
+++ b/pkg/analysis_services/test/index/abstract_single_unit.dart |
@@ -0,0 +1,93 @@ |
+// 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.services.src.index.abstract_single_file; |
+ |
+import 'package:analysis_testing/abstract_context.dart'; |
+import 'package:analyzer/src/generated/ast.dart'; |
+import 'package:analyzer/src/generated/element.dart'; |
+import 'package:analyzer/src/generated/error.dart'; |
+import 'package:analyzer/src/generated/java_engine.dart'; |
+import 'package:analyzer/src/generated/source.dart'; |
+import 'package:unittest/unittest.dart'; |
+ |
+ |
+class AbstractSingleUnitTest extends AbstractContextTest { |
+ bool verifyNoTestUnitErrors = true; |
+ |
+ String testCode; |
+ Source testSource; |
+ CompilationUnit testUnit; |
+ CompilationUnitElement testUnitElement; |
+ LibraryElement testLibraryElement; |
+ |
+ void assertNoErrorsInSource(Source source) { |
+ List<AnalysisError> errors = context.getErrors(source).errors; |
+ expect(errors, isEmpty); |
+ } |
+ |
+ Element findElement(String name, [ElementKind kind]) { |
+ return findChildElement(testUnitElement, name, kind); |
+ } |
+ |
+ AstNode findNodeAtOffset(int offset, [Predicate<AstNode> predicate]) { |
+ AstNode result = new NodeLocator.con1(offset).searchWithin(testUnit); |
+ if (result != null && predicate != null) { |
+ result = result.getAncestor(predicate); |
+ } |
+ return result; |
+ } |
+ |
+ AstNode findNodeAtString(String search, [Predicate<AstNode> predicate]) { |
+ int offset = findOffset(search); |
+ return findNodeAtOffset(offset, predicate); |
+ } |
+ |
+ Element findNodeElementAtString(String search, |
+ [Predicate<AstNode> predicate]) { |
+ AstNode node = findNodeAtString(search, predicate); |
+ if (node == null) { |
+ return null; |
+ } |
+ return ElementLocator.locate(node); |
+ } |
+ |
+ int findOffset(String search) { |
+ int offset = testCode.indexOf(search); |
+ expect(offset, isNonNegative, reason: "Not found '$search' in\n$testCode"); |
+ return offset; |
+ } |
+ |
+ int getLeadingIdentifierLength(String search) { |
+ int length = 0; |
+ while (length < search.length) { |
+ int c = search.codeUnitAt(length); |
+ if (c >= 'a'.codeUnitAt(0) && c <= 'z'.codeUnitAt(0)) { |
+ length++; |
+ continue; |
+ } |
+ if (c >= 'A'.codeUnitAt(0) && c <= 'Z'.codeUnitAt(0)) { |
+ length++; |
+ continue; |
+ } |
+ if (c >= '0'.codeUnitAt(0) && c <= '9'.codeUnitAt(0)) { |
+ length++; |
+ continue; |
+ } |
+ break; |
+ } |
+ return length; |
+ } |
+ |
+ void resolveTestUnit(String code) { |
+ testCode = code; |
+ testSource = addSource('/test.dart', code); |
+ testUnit = resolveLibraryUnit(testSource); |
+ if (verifyNoTestUnitErrors) { |
+ assertNoErrorsInSource(testSource); |
+ } |
+ testUnitElement = testUnit.element; |
+ testLibraryElement = testUnitElement.library; |
+ } |
+} |