OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.integration.analysis.highlights; | 5 library test.integration.analysis.highlights; |
6 | 6 |
7 import 'package:analysis_server/src/protocol.dart'; | 7 import 'package:analysis_server/src/protocol.dart'; |
8 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 8 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
9 import 'package:unittest/unittest.dart'; | 9 import 'package:unittest/unittest.dart'; |
10 | 10 |
| 11 import '../../utils.dart'; |
11 import '../integration_tests.dart'; | 12 import '../integration_tests.dart'; |
12 | 13 |
13 main() { | 14 main() { |
| 15 initializeTestEnvironment(); |
14 defineReflectiveTests(AnalysisHighlightsTest); | 16 defineReflectiveTests(AnalysisHighlightsTest); |
15 } | 17 } |
16 | 18 |
17 @reflectiveTest | 19 @reflectiveTest |
18 class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest { | 20 class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest { |
19 test_highlights() { | 21 test_highlights() { |
20 String pathname = sourcePath('test.dart'); | 22 String pathname = sourcePath('test.dart'); |
21 String text = r''' | 23 String text = r''' |
22 import 'dart:async' as async; | 24 import 'dart:async' as async; |
23 | 25 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 function(dynamicType) { | 65 function(dynamicType) { |
64 print('string'); | 66 print('string'); |
65 unresolvedIdentifier = 42; | 67 unresolvedIdentifier = 42; |
66 return async.Future.wait([]); | 68 return async.Future.wait([]); |
67 } | 69 } |
68 | 70 |
69 int topLevelVariable; | 71 int topLevelVariable; |
70 '''; | 72 '''; |
71 writeFile(pathname, text); | 73 writeFile(pathname, text); |
72 standardAnalysisSetup(); | 74 standardAnalysisSetup(); |
73 sendAnalysisSetSubscriptions({AnalysisService.HIGHLIGHTS: [pathname]}); | 75 sendAnalysisSetSubscriptions({ |
| 76 AnalysisService.HIGHLIGHTS: [pathname] |
| 77 }); |
74 // Map from highlight type to highlighted text | 78 // Map from highlight type to highlighted text |
75 Map<HighlightRegionType, Set<String>> highlights; | 79 Map<HighlightRegionType, Set<String>> highlights; |
76 onAnalysisHighlights.listen((AnalysisHighlightsParams params) { | 80 onAnalysisHighlights.listen((AnalysisHighlightsParams params) { |
77 expect(params.file, equals(pathname)); | 81 expect(params.file, equals(pathname)); |
78 highlights = <HighlightRegionType, Set<String>>{}; | 82 highlights = <HighlightRegionType, Set<String>>{}; |
79 for (HighlightRegion region in params.regions) { | 83 for (HighlightRegion region in params.regions) { |
80 int startIndex = region.offset; | 84 int startIndex = region.offset; |
81 int endIndex = startIndex + region.length; | 85 int endIndex = startIndex + region.length; |
82 String highlightedText = text.substring(startIndex, endIndex); | 86 String highlightedText = text.substring(startIndex, endIndex); |
83 HighlightRegionType type = region.type; | 87 HighlightRegionType type = region.type; |
84 if (!highlights.containsKey(type)) { | 88 if (!highlights.containsKey(type)) { |
85 highlights[type] = new Set<String>(); | 89 highlights[type] = new Set<String>(); |
86 } | 90 } |
87 highlights[type].add(highlightedText); | 91 highlights[type].add(highlightedText); |
88 } | 92 } |
89 }); | 93 }); |
90 return analysisFinished.then((_) { | 94 return analysisFinished.then((_) { |
91 // There should be 1 error due to the fact that unresolvedIdentifier is | 95 // There should be 1 error due to the fact that unresolvedIdentifier is |
92 // unresolved. | 96 // unresolved. |
93 expect(currentAnalysisErrors[pathname], hasLength(1)); | 97 expect(currentAnalysisErrors[pathname], hasLength(1)); |
94 void check(HighlightRegionType type, List<String> expected) { | 98 void check(HighlightRegionType type, List<String> expected) { |
95 expect(highlights[type], equals(expected.toSet())); | 99 expect(highlights[type], equals(expected.toSet())); |
96 highlights.remove(type); | 100 highlights.remove(type); |
97 } | 101 } |
98 check(HighlightRegionType.ANNOTATION, ['@override']); | 102 check(HighlightRegionType.ANNOTATION, ['@override']); |
99 check(HighlightRegionType.BUILT_IN, [ | 103 check(HighlightRegionType.BUILT_IN, |
100 'as', | 104 ['as', 'get', 'import', 'set', 'static', 'typedef']); |
101 'get', | 105 check(HighlightRegionType.CLASS, |
102 'import', | 106 ['Class', 'Class2', 'Future', 'Map', 'int']); |
103 'set', | |
104 'static', | |
105 'typedef' | |
106 ]); | |
107 check(HighlightRegionType.CLASS, [ | |
108 'Class', | |
109 'Class2', | |
110 'Future', | |
111 'Map', | |
112 'int' | |
113 ]); | |
114 check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']); | 107 check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']); |
115 check(HighlightRegionType.COMMENT_DOCUMENTATION, | 108 check(HighlightRegionType.COMMENT_DOCUMENTATION, |
116 ['/**\n * Doc comment\n */']); | 109 ['/**\n * Doc comment\n */']); |
117 check( | 110 check( |
118 HighlightRegionType.COMMENT_END_OF_LINE, ['// End of line comment']); | 111 HighlightRegionType.COMMENT_END_OF_LINE, ['// End of line comment']); |
119 check(HighlightRegionType.CONSTRUCTOR, ['constructor']); | 112 check(HighlightRegionType.CONSTRUCTOR, ['constructor']); |
120 check(HighlightRegionType.DIRECTIVE, ["import 'dart:async' as async;"]); | 113 check(HighlightRegionType.DIRECTIVE, ["import 'dart:async' as async;"]); |
121 check(HighlightRegionType.DYNAMIC_TYPE, ['dynamicType']); | 114 check(HighlightRegionType.DYNAMIC_TYPE, ['dynamicType']); |
122 check(HighlightRegionType.FIELD, ['field']); | 115 check(HighlightRegionType.FIELD, ['field']); |
123 check(HighlightRegionType.FIELD_STATIC, ['staticField']); | 116 check(HighlightRegionType.FIELD_STATIC, ['staticField']); |
124 check(HighlightRegionType.FUNCTION, ['print']); | 117 check(HighlightRegionType.FUNCTION, ['print']); |
125 check(HighlightRegionType.FUNCTION_DECLARATION, ['function']); | 118 check(HighlightRegionType.FUNCTION_DECLARATION, ['function']); |
126 check(HighlightRegionType.FUNCTION_TYPE_ALIAS, ['functionType']); | 119 check(HighlightRegionType.FUNCTION_TYPE_ALIAS, ['functionType']); |
127 check(HighlightRegionType.GETTER_DECLARATION, ['getter']); | 120 check(HighlightRegionType.GETTER_DECLARATION, ['getter']); |
128 check(HighlightRegionType.IDENTIFIER_DEFAULT, ['unresolvedIdentifier']); | 121 check(HighlightRegionType.IDENTIFIER_DEFAULT, ['unresolvedIdentifier']); |
129 check(HighlightRegionType.IMPORT_PREFIX, ['async']); | 122 check(HighlightRegionType.IMPORT_PREFIX, ['async']); |
130 check(HighlightRegionType.KEYWORD, ['class', 'true', 'return']); | 123 check(HighlightRegionType.KEYWORD, ['class', 'true', 'return']); |
131 check(HighlightRegionType.LITERAL_BOOLEAN, ['true']); | 124 check(HighlightRegionType.LITERAL_BOOLEAN, ['true']); |
132 check(HighlightRegionType.LITERAL_DOUBLE, ['1.0']); | 125 check(HighlightRegionType.LITERAL_DOUBLE, ['1.0']); |
133 check(HighlightRegionType.LITERAL_INTEGER, ['2', '42']); | 126 check(HighlightRegionType.LITERAL_INTEGER, ['2', '42']); |
134 check(HighlightRegionType.LITERAL_LIST, ['[]']); | 127 check(HighlightRegionType.LITERAL_LIST, ['[]']); |
135 check(HighlightRegionType.LITERAL_MAP, [ | 128 check(HighlightRegionType.LITERAL_MAP, |
136 '{1.0: [].toList()}', | 129 ['{1.0: [].toList()}', '{2: local}']); |
137 '{2: local}' | |
138 ]); | |
139 check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]); | 130 check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]); |
140 check(HighlightRegionType.LOCAL_VARIABLE, ['local']); | 131 check(HighlightRegionType.LOCAL_VARIABLE, ['local']); |
141 check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']); | 132 check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']); |
142 check(HighlightRegionType.METHOD, ['toList']); | 133 check(HighlightRegionType.METHOD, ['toList']); |
143 check(HighlightRegionType.METHOD_DECLARATION, ['method']); | 134 check(HighlightRegionType.METHOD_DECLARATION, ['method']); |
144 check(HighlightRegionType.METHOD_DECLARATION_STATIC, ['staticMethod']); | 135 check(HighlightRegionType.METHOD_DECLARATION_STATIC, ['staticMethod']); |
145 check(HighlightRegionType.METHOD_STATIC, ['wait']); | 136 check(HighlightRegionType.METHOD_STATIC, ['wait']); |
146 check(HighlightRegionType.PARAMETER, ['parameter']); | 137 check(HighlightRegionType.PARAMETER, ['parameter']); |
147 check(HighlightRegionType.SETTER_DECLARATION, ['setter']); | 138 check(HighlightRegionType.SETTER_DECLARATION, ['setter']); |
148 check(HighlightRegionType.TOP_LEVEL_VARIABLE, [ | 139 check(HighlightRegionType.TOP_LEVEL_VARIABLE, |
149 'override', | 140 ['override', 'topLevelVariable']); |
150 'topLevelVariable' | |
151 ]); | |
152 check(HighlightRegionType.TYPE_NAME_DYNAMIC, ['dynamic']); | 141 check(HighlightRegionType.TYPE_NAME_DYNAMIC, ['dynamic']); |
153 check(HighlightRegionType.TYPE_PARAMETER, ['TypeParameter']); | 142 check(HighlightRegionType.TYPE_PARAMETER, ['TypeParameter']); |
154 expect(highlights, isEmpty); | 143 expect(highlights, isEmpty); |
155 }); | 144 }); |
156 } | 145 } |
157 } | 146 } |
OLD | NEW |