OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 analyzer.test.driver; | 5 library analyzer.test.driver; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
11 import 'package:analyzer/dart/element/element.dart'; | 11 import 'package:analyzer/dart/element/element.dart'; |
12 import 'package:analyzer/error/error.dart'; | 12 import 'package:analyzer/error/error.dart'; |
13 import 'package:analyzer/file_system/file_system.dart'; | 13 import 'package:analyzer/file_system/file_system.dart'; |
14 import 'package:analyzer/file_system/memory_file_system.dart'; | 14 import 'package:analyzer/file_system/memory_file_system.dart'; |
15 import 'package:analyzer/src/dart/analysis/byte_store.dart'; | 15 import 'package:analyzer/src/dart/analysis/byte_store.dart'; |
16 import 'package:analyzer/src/dart/analysis/driver.dart'; | 16 import 'package:analyzer/src/dart/analysis/driver.dart'; |
17 import 'package:analyzer/src/dart/analysis/file_state.dart'; | 17 import 'package:analyzer/src/dart/analysis/file_state.dart'; |
18 import 'package:analyzer/src/dart/analysis/status.dart'; | 18 import 'package:analyzer/src/dart/analysis/status.dart'; |
| 19 import 'package:analyzer/src/dart/analysis/top_level_declaration.dart'; |
19 import 'package:analyzer/src/error/codes.dart'; | 20 import 'package:analyzer/src/error/codes.dart'; |
20 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; | 21 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; |
21 import 'package:analyzer/src/generated/source.dart'; | 22 import 'package:analyzer/src/generated/source.dart'; |
22 import 'package:analyzer/src/summary/idl.dart'; | 23 import 'package:analyzer/src/summary/idl.dart'; |
23 import 'package:convert/convert.dart'; | 24 import 'package:convert/convert.dart'; |
24 import 'package:crypto/crypto.dart'; | 25 import 'package:crypto/crypto.dart'; |
25 import 'package:test/test.dart'; | 26 import 'package:test/test.dart'; |
26 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 27 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
27 | 28 |
28 import '../../context/mock_sdk.dart'; | 29 import '../../context/mock_sdk.dart'; |
(...skipping 1101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1130 addTestFile('int f() => 42;'); | 1131 addTestFile('int f() => 42;'); |
1131 await _waitForIdle(); | 1132 await _waitForIdle(); |
1132 | 1133 |
1133 expect(allStatuses, hasLength(2)); | 1134 expect(allStatuses, hasLength(2)); |
1134 expect(allStatuses[0].isAnalyzing, isTrue); | 1135 expect(allStatuses[0].isAnalyzing, isTrue); |
1135 expect(allStatuses[0].isIdle, isFalse); | 1136 expect(allStatuses[0].isIdle, isFalse); |
1136 expect(allStatuses[1].isAnalyzing, isFalse); | 1137 expect(allStatuses[1].isAnalyzing, isFalse); |
1137 expect(allStatuses[1].isIdle, isTrue); | 1138 expect(allStatuses[1].isIdle, isTrue); |
1138 } | 1139 } |
1139 | 1140 |
| 1141 test_topLevelLibraryDeclarations() async { |
| 1142 var a = _p('/test/lib/a.dart'); |
| 1143 var b = _p('/test/lib/b.dart'); |
| 1144 var c = _p('/test/lib/c.dart'); |
| 1145 var d = _p('/test/lib/d.dart'); |
| 1146 |
| 1147 provider.newFile(a, 'class A {}'); |
| 1148 provider.newFile(b, 'export "a.dart", class B {}'); |
| 1149 provider.newFile(c, 'import "d.dart"; class C {}'); |
| 1150 provider.newFile(d, 'class D {}'); |
| 1151 |
| 1152 driver.addFile(a); |
| 1153 driver.addFile(b); |
| 1154 driver.addFile(c); |
| 1155 // Don't add d.dart, it is referenced implicitly. |
| 1156 |
| 1157 List<TopLevelLibraryDeclarations> libraries = |
| 1158 await driver.topLevelLibraryDeclarations; |
| 1159 expect(libraries, hasLength(4)); |
| 1160 |
| 1161 void assertDeclarations(String path, List<String> expectedNames) { |
| 1162 TopLevelLibraryDeclarations library = |
| 1163 libraries.singleWhere((l) => l.source.fullName == path); |
| 1164 expect(library.declarations.map((d) => d.name), |
| 1165 unorderedEquals(expectedNames)); |
| 1166 } |
| 1167 |
| 1168 assertDeclarations(a, ['A']); |
| 1169 assertDeclarations(b, ['A', 'B']); |
| 1170 assertDeclarations(c, ['C']); |
| 1171 assertDeclarations(d, ['D']); |
| 1172 } |
| 1173 |
1140 ClassDeclaration _getClass(CompilationUnit unit, String name) { | 1174 ClassDeclaration _getClass(CompilationUnit unit, String name) { |
1141 for (CompilationUnitMember declaration in unit.declarations) { | 1175 for (CompilationUnitMember declaration in unit.declarations) { |
1142 if (declaration is ClassDeclaration) { | 1176 if (declaration is ClassDeclaration) { |
1143 if (declaration.name.name == name) { | 1177 if (declaration.name.name == name) { |
1144 return declaration; | 1178 return declaration; |
1145 } | 1179 } |
1146 } | 1180 } |
1147 } | 1181 } |
1148 fail('Cannot find the class $name in\n$unit'); | 1182 fail('Cannot find the class $name in\n$unit'); |
1149 return null; | 1183 return null; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1226 String _p(String path) => provider.convertPath(path); | 1260 String _p(String path) => provider.convertPath(path); |
1227 | 1261 |
1228 Future<Null> _waitForIdle() async { | 1262 Future<Null> _waitForIdle() async { |
1229 await idleStatusMonitor.signal; | 1263 await idleStatusMonitor.signal; |
1230 } | 1264 } |
1231 | 1265 |
1232 static String _md5(String content) { | 1266 static String _md5(String content) { |
1233 return hex.encode(md5.convert(UTF8.encode(content)).bytes); | 1267 return hex.encode(md5.convert(UTF8.encode(content)).bytes); |
1234 } | 1268 } |
1235 } | 1269 } |
OLD | NEW |