Index: pkg/analysis_server/test/src/plugin/protocol_test_utilities.dart |
diff --git a/pkg/analysis_server/test/src/plugin/protocol_test_utilities.dart b/pkg/analysis_server/test/src/plugin/protocol_test_utilities.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..37a3f014fc6f33ad6a95f3859aeb0b99cee139e2 |
--- /dev/null |
+++ b/pkg/analysis_server/test/src/plugin/protocol_test_utilities.dart |
@@ -0,0 +1,304 @@ |
+// Copyright (c) 2017, 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 'package:analysis_server/plugin/protocol/protocol.dart' as server; |
+import 'package:analyzer_plugin/protocol/protocol.dart' as plugin; |
+import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin; |
+import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin; |
+ |
+class ProtocolTestUtilities { |
+ static const List<String> strings = const <String>[ |
+ 'aa', |
+ 'ab', |
+ 'ac', |
+ 'ad', |
+ 'ae', |
+ 'af', |
+ 'ag', |
+ 'ah', |
+ 'ai', |
+ 'aj', |
+ 'ak', |
+ 'al', |
+ 'am', |
+ 'an', |
+ 'ao', |
+ 'ap', |
+ 'aq', |
+ 'ar', |
+ 'as', |
+ 'at', |
+ 'au', |
+ 'av', |
+ 'aw', |
+ 'ax', |
+ 'ay', |
+ 'az', |
+ 'ba', |
+ 'bb', |
+ 'bc', |
+ 'bd', |
+ 'be', |
+ 'bf', |
+ 'bg', |
+ 'bh', |
+ 'bi', |
+ 'bj', |
+ 'bk', |
+ 'bl', |
+ 'bm', |
+ 'bn', |
+ 'bo', |
+ 'bp', |
+ 'bq', |
+ 'br', |
+ 'bs', |
+ 'bt', |
+ 'bu', |
+ 'bv', |
+ 'bw', |
+ 'bx', |
+ 'by', |
+ 'bz', |
+ ]; |
+ |
+ String fileName(int stringIndex) => '${strings[stringIndex]}.dart'; |
+ |
+ /** |
+ * On return, increment [stringIndex] by 3 (or 4 if no [file] name is |
+ * provided) and [intIndex] by 4. |
+ */ |
+ plugin.AnalysisError pluginAnalysisError(int stringIndex, int intIndex, |
+ {String file}) { |
+ return new plugin.AnalysisError( |
+ plugin.AnalysisErrorSeverity.ERROR, |
+ plugin.AnalysisErrorType.COMPILE_TIME_ERROR, |
+ pluginLocation(stringIndex, intIndex, file: file), |
+ strings[stringIndex++], |
+ strings[stringIndex++], |
+ correction: strings[stringIndex++], |
+ hasFix: true); |
+ } |
+ |
+ /** |
+ * On return, increment [stringIndex] by 5 and [intIndex] by 5. |
+ */ |
+ plugin.Element pluginElement(int stringIndex, int intIndex, |
+ {plugin.ElementKind kind}) => |
+ new plugin.Element( |
+ kind ?? plugin.ElementKind.CLASS, strings[stringIndex++], intIndex++, |
+ location: new plugin.Location(fileName(stringIndex++), intIndex++, |
+ intIndex++, intIndex++, intIndex++), |
+ parameters: strings[stringIndex++], |
+ returnType: strings[stringIndex++], |
+ typeParameters: strings[stringIndex++]); |
+ |
+ plugin.FoldingRegion pluginFoldingRegion(int offset, int length) => |
+ new plugin.FoldingRegion(plugin.FoldingKind.COMMENT, offset, length); |
+ |
+ plugin.HighlightRegion pluginHighlightRegion(int offset, int length) => |
+ new plugin.HighlightRegion( |
+ plugin.HighlightRegionType.FIELD, offset, length); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 1 and [intIndex] by 4. |
+ */ |
+ plugin.Location pluginLocation(int stringIndex, int intIndex, |
+ {String file}) => |
+ new plugin.Location(file ?? fileName(stringIndex), intIndex++, intIndex++, |
+ intIndex++, intIndex++); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 2 (or 3 if no [file] name is |
+ * provided) and [intIndex] by 6. |
+ */ |
+ plugin.AnalysisNavigationParams pluginNavigationParams( |
+ int stringIndex, int intIndex, {String file}) => |
+ new plugin.AnalysisNavigationParams( |
+ file ?? fileName(stringIndex++), <plugin.NavigationRegion>[ |
+ new plugin.NavigationRegion(intIndex++, intIndex++, <int>[0]) |
+ ], <plugin.NavigationTarget>[ |
+ new plugin.NavigationTarget(plugin.ElementKind.FIELD, 0, intIndex++, |
+ intIndex++, intIndex++, intIndex++) |
+ ], <String>[ |
+ strings[stringIndex++], |
+ strings[stringIndex++] |
+ ]); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 5 and [intIndex] by 7. |
+ */ |
+ plugin.Occurrences pluginOccurrences(int stringIndex, int intIndex) { |
+ plugin.Element element = pluginElement(stringIndex, intIndex); |
+ return new plugin.Occurrences( |
+ element, <int>[intIndex + 5, intIndex + 6], element.name.length); |
+ } |
+ |
+ /** |
+ * On return, increment [stringIndex] by 10 and [intIndex] by 14. |
+ */ |
+ plugin.Outline pluginOutline(int stringIndex, int intIndex) => |
+ new plugin.Outline( |
+ pluginElement(stringIndex, intIndex), intIndex + 5, intIndex + 6, |
+ children: <plugin.Outline>[ |
+ new plugin.Outline( |
+ pluginElement(stringIndex + 5, intIndex + 7, |
+ kind: plugin.ElementKind.METHOD), |
+ intIndex + 12, |
+ intIndex + 13) |
+ ]); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 2 and [intIndex] by 4. |
+ */ |
+ plugin.RefactoringProblem pluginRefactoringProblem( |
+ int stringIndex, int intIndex) { |
+ return new plugin.RefactoringProblem( |
+ plugin.RefactoringProblemSeverity.FATAL, strings[stringIndex++], |
+ location: pluginLocation(stringIndex, intIndex)); |
+ } |
+ |
+ /** |
+ * On return, increment [stringIndex] by 6 and [intIndex] by 6. |
+ */ |
+ plugin.SourceChange pluginSourceChange(int stringIndex, int intIndex) => |
+ new plugin.SourceChange(strings[stringIndex++], |
+ edits: <plugin.SourceFileEdit>[ |
+ new plugin.SourceFileEdit(fileName(stringIndex), intIndex++, |
+ edits: <plugin.SourceEdit>[ |
+ new plugin.SourceEdit( |
+ intIndex++, intIndex++, strings[stringIndex++]) |
+ ]) |
+ ], |
+ linkedEditGroups: <plugin.LinkedEditGroup>[ |
+ new plugin.LinkedEditGroup( |
+ <plugin.Position>[ |
+ new plugin.Position(fileName(stringIndex), intIndex++) |
+ ], |
+ intIndex++, |
+ <plugin.LinkedEditSuggestion>[ |
+ new plugin.LinkedEditSuggestion(strings[stringIndex++], |
+ plugin.LinkedEditSuggestionKind.METHOD) |
+ ]) |
+ ], |
+ selection: new plugin.Position(fileName(stringIndex), intIndex++)); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 3 (or 4 if no [file] name is |
+ * provided) and [intIndex] by 4. |
+ */ |
+ server.AnalysisError serverAnalysisError(int stringIndex, int intIndex, |
+ {String file}) { |
+ return new server.AnalysisError( |
+ server.AnalysisErrorSeverity.ERROR, |
+ server.AnalysisErrorType.COMPILE_TIME_ERROR, |
+ serverLocation(stringIndex, intIndex, file: file), |
+ strings[stringIndex++], |
+ strings[stringIndex++], |
+ correction: strings[stringIndex++], |
+ hasFix: true); |
+ } |
+ |
+ /** |
+ * On return, increment [stringIndex] by 5 and [intIndex] by 5. |
+ */ |
+ server.Element serverElement(int stringIndex, int intIndex, |
+ {server.ElementKind kind}) => |
+ new server.Element( |
+ kind ?? server.ElementKind.CLASS, strings[stringIndex++], intIndex++, |
+ location: new server.Location(fileName(stringIndex++), intIndex++, |
+ intIndex++, intIndex++, intIndex++), |
+ parameters: strings[stringIndex++], |
+ returnType: strings[stringIndex++], |
+ typeParameters: strings[stringIndex++]); |
+ |
+ server.FoldingRegion serverFoldingRegion(int offset, int length) => |
+ new server.FoldingRegion(server.FoldingKind.COMMENT, offset, length); |
+ |
+ server.HighlightRegion serverHighlightRegion(int offset, int length) => |
+ new server.HighlightRegion( |
+ server.HighlightRegionType.FIELD, offset, length); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 1 and [intIndex] by 4. |
+ */ |
+ server.Location serverLocation(int stringIndex, int intIndex, |
+ {String file}) => |
+ new server.Location(file ?? fileName(stringIndex), intIndex++, intIndex++, |
+ intIndex++, intIndex++); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 2 (or 3 if no [file] name is |
+ * provided) and [intIndex] by 6. |
+ */ |
+ server.AnalysisNavigationParams serverNavigationParams( |
+ int stringIndex, int intIndex, {String file}) => |
+ new server.AnalysisNavigationParams( |
+ file ?? fileName(stringIndex++), <server.NavigationRegion>[ |
+ new server.NavigationRegion(intIndex++, intIndex++, <int>[0]) |
+ ], <server.NavigationTarget>[ |
+ new server.NavigationTarget(server.ElementKind.FIELD, 0, intIndex++, |
+ intIndex++, intIndex++, intIndex++) |
+ ], <String>[ |
+ strings[stringIndex++], |
+ strings[stringIndex++] |
+ ]); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 5 and [intIndex] by 7. |
+ */ |
+ server.Occurrences serverOccurrences(int stringIndex, int intIndex) { |
+ server.Element element = serverElement(stringIndex, intIndex); |
+ return new server.Occurrences( |
+ element, <int>[intIndex + 5, intIndex + 6], element.name.length); |
+ } |
+ |
+ /** |
+ * On return, increment [stringIndex] by 10 and [intIndex] by 14. |
+ */ |
+ server.Outline serverOutline(int stringIndex, int intIndex) => |
+ new server.Outline( |
+ serverElement(stringIndex, intIndex), intIndex + 5, intIndex + 6, |
+ children: <server.Outline>[ |
+ new server.Outline( |
+ serverElement(stringIndex + 5, intIndex + 7, |
+ kind: server.ElementKind.METHOD), |
+ intIndex + 12, |
+ intIndex + 13) |
+ ]); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 2 and [intIndex] by 4. |
+ */ |
+ server.RefactoringProblem serverRefactoringProblem( |
+ int stringIndex, int intIndex) => |
+ new server.RefactoringProblem( |
+ server.RefactoringProblemSeverity.FATAL, strings[stringIndex++], |
+ location: serverLocation(stringIndex, intIndex)); |
+ |
+ /** |
+ * On return, increment [stringIndex] by 6 and [intIndex] by 6. |
+ */ |
+ server.SourceChange serverSourceChange(int stringIndex, int intIndex) => |
+ new server.SourceChange(strings[stringIndex++], |
+ edits: <server.SourceFileEdit>[ |
+ new server.SourceFileEdit(fileName(stringIndex), intIndex++, |
+ edits: <server.SourceEdit>[ |
+ new server.SourceEdit( |
+ intIndex++, intIndex++, strings[stringIndex++]) |
+ ]) |
+ ], |
+ linkedEditGroups: <server.LinkedEditGroup>[ |
+ new server.LinkedEditGroup( |
+ <server.Position>[ |
+ new server.Position(fileName(stringIndex), intIndex++) |
+ ], |
+ intIndex++, |
+ <server.LinkedEditSuggestion>[ |
+ new server.LinkedEditSuggestion(strings[stringIndex++], |
+ server.LinkedEditSuggestionKind.METHOD) |
+ ]) |
+ ], |
+ selection: new server.Position(fileName(stringIndex), intIndex++)); |
+} |