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

Side by Side Diff: pkg/analyzer/test/src/dart/analysis/driver_test.dart

Issue 2544883003: Implement 'topLevelLibraryDeclarations' getter to return all libraries with exported top-level decl… (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698