Create summary files in MockSdk classes

Review URL: https://codereview.chromium.org/2542853003 .
This commit is contained in:
Brian Wilkerson 2016-12-02 07:32:39 -08:00
parent 47bfb02f36
commit e17e359faa
6 changed files with 83 additions and 37 deletions

View file

@ -121,20 +121,19 @@ import "../foo/foo.dart";
}); });
} }
void processRequiredPlugins() { void processRequiredPlugins(ServerPlugin serverPlugin) {
List<Plugin> plugins = <Plugin>[]; List<Plugin> plugins = <Plugin>[];
plugins.addAll(AnalysisEngine.instance.requiredPlugins); plugins.addAll(AnalysisEngine.instance.requiredPlugins);
plugins.add(AnalysisEngine.instance.optionsPlugin); plugins.add(AnalysisEngine.instance.optionsPlugin);
plugins.add(server.serverPlugin); plugins.add(serverPlugin);
ExtensionManager manager = new ExtensionManager(); ExtensionManager manager = new ExtensionManager();
manager.processPlugins(plugins); manager.processPlugins(plugins);
} }
void setUp() { void setUp() {
ExtensionManager manager = new ExtensionManager(); ServerPlugin serverPlugin = new ServerPlugin();
ServerPlugin plugin = new ServerPlugin(); processRequiredPlugins(serverPlugin);
manager.processPlugins([plugin]);
channel = new MockServerChannel(); channel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider(); resourceProvider = new MemoryResourceProvider();
// Create an SDK in the mock file system. // Create an SDK in the mock file system.
@ -145,12 +144,11 @@ import "../foo/foo.dart";
resourceProvider, resourceProvider,
packageMapProvider, packageMapProvider,
null, null,
plugin, serverPlugin,
new AnalysisServerOptions(), new AnalysisServerOptions(),
new DartSdkManager('/', false), new DartSdkManager('/', false),
InstrumentationService.NULL_SERVICE, InstrumentationService.NULL_SERVICE,
rethrowExceptions: true); rethrowExceptions: true);
processRequiredPlugins();
} }
Future test_contextDisposed() { Future test_contextDisposed() {

View file

@ -13,8 +13,10 @@ import 'package:analysis_server/src/domain_analysis.dart';
import 'package:analysis_server/src/plugin/server_plugin.dart'; import 'package:analysis_server/src/plugin/server_plugin.dart';
import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/instrumentation/instrumentation.dart'; import 'package:analyzer/instrumentation/instrumentation.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/sdk.dart'; import 'package:analyzer/src/generated/sdk.dart';
import 'package:plugin/manager.dart'; import 'package:plugin/manager.dart';
import 'package:plugin/plugin.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart';
@ -33,12 +35,21 @@ main() {
AnalysisServer server; AnalysisServer server;
AnalysisDomainHandler handler; AnalysisDomainHandler handler;
void processRequiredPlugins(ServerPlugin serverPlugin) {
List<Plugin> plugins = <Plugin>[];
plugins.addAll(AnalysisEngine.instance.requiredPlugins);
plugins.add(AnalysisEngine.instance.optionsPlugin);
plugins.add(serverPlugin);
ExtensionManager manager = new ExtensionManager();
manager.processPlugins(plugins);
}
setUp(() { setUp(() {
serverChannel = new MockServerChannel(); serverChannel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider(); resourceProvider = new MemoryResourceProvider();
ExtensionManager manager = new ExtensionManager();
ServerPlugin serverPlugin = new ServerPlugin(); ServerPlugin serverPlugin = new ServerPlugin();
manager.processPlugins([serverPlugin]); processRequiredPlugins(serverPlugin);
// Create an SDK in the mock file system. // Create an SDK in the mock file system.
new MockSdk(resourceProvider: resourceProvider); new MockSdk(resourceProvider: resourceProvider);
server = new AnalysisServer( server = new AnalysisServer(
@ -429,11 +440,10 @@ class AnalysisTestHelper {
String testCode; String testCode;
AnalysisTestHelper() { AnalysisTestHelper() {
ServerPlugin serverPlugin = new ServerPlugin();
processRequiredPlugins(serverPlugin);
serverChannel = new MockServerChannel(); serverChannel = new MockServerChannel();
resourceProvider = new MemoryResourceProvider(); resourceProvider = new MemoryResourceProvider();
ExtensionManager manager = new ExtensionManager();
ServerPlugin serverPlugin = new ServerPlugin();
manager.processPlugins([serverPlugin]);
// Create an SDK in the mock file system. // Create an SDK in the mock file system.
new MockSdk(resourceProvider: resourceProvider); new MockSdk(resourceProvider: resourceProvider);
server = new AnalysisServer( server = new AnalysisServer(
@ -597,6 +607,16 @@ class AnalysisTestHelper {
expect(response, isResponseSuccess('0')); expect(response, isResponseSuccess('0'));
} }
void processRequiredPlugins(ServerPlugin serverPlugin) {
List<Plugin> plugins = <Plugin>[];
plugins.addAll(AnalysisEngine.instance.requiredPlugins);
plugins.add(AnalysisEngine.instance.optionsPlugin);
plugins.add(serverPlugin);
ExtensionManager manager = new ExtensionManager();
manager.processPlugins(plugins);
}
/** /**
* Send an `updateContent` request for [testFile]. * Send an `updateContent` request for [testFile].
*/ */

View file

@ -24,21 +24,20 @@ main() {
DiagnosticDomainHandler handler; DiagnosticDomainHandler handler;
MemoryResourceProvider resourceProvider; MemoryResourceProvider resourceProvider;
setUp(() { void processRequiredPlugins(ServerPlugin serverPlugin) {
//
// Collect plugins
//
ServerPlugin serverPlugin = new ServerPlugin();
List<Plugin> plugins = <Plugin>[]; List<Plugin> plugins = <Plugin>[];
plugins.addAll(AnalysisEngine.instance.requiredPlugins); plugins.addAll(AnalysisEngine.instance.requiredPlugins);
plugins.add(AnalysisEngine.instance.commandLinePlugin); plugins.add(AnalysisEngine.instance.commandLinePlugin);
plugins.add(AnalysisEngine.instance.optionsPlugin); plugins.add(AnalysisEngine.instance.optionsPlugin);
plugins.add(serverPlugin); plugins.add(serverPlugin);
//
// Process plugins
//
ExtensionManager manager = new ExtensionManager(); ExtensionManager manager = new ExtensionManager();
manager.processPlugins(plugins); manager.processPlugins(plugins);
}
setUp(() {
ServerPlugin serverPlugin = new ServerPlugin();
processRequiredPlugins(serverPlugin);
// //
// Create the server // Create the server
// //

View file

@ -274,8 +274,15 @@ const Map<String, LibraryInfo> libraries = const {
LIBRARIES.forEach((SdkLibrary library) { LIBRARIES.forEach((SdkLibrary library) {
provider.newFile(library.path, (library as MockSdkLibrary).content); provider.newFile(library.path, (library as MockSdkLibrary).content);
}); });
provider.newFile('/lib/_internal/sdk_library_metadata/lib/libraries.dart', provider.newFile(
provider.convertPath(
'/lib/_internal/sdk_library_metadata/lib/libraries.dart'),
librariesContent); librariesContent);
List<int> bytes = _computeLinkedBundleBytes();
provider.newFileWithBytes(
provider.convertPath('/lib/_internal/spec.sum'), bytes);
provider.newFileWithBytes(
provider.convertPath('/lib/_internal/strong.sum'), bytes);
} }
@override @override
@ -341,13 +348,7 @@ const Map<String, LibraryInfo> libraries = const {
@override @override
PackageBundle getLinkedBundle() { PackageBundle getLinkedBundle() {
if (_bundle == null) { if (_bundle == null) {
List<Source> librarySources = sdkLibraries _bundle = new PackageBundle.fromBuffer(_computeLinkedBundleBytes());
.map((SdkLibrary library) => mapDartUri(library.shortName))
.toList();
List<int> bytes = new SummaryBuilder(
librarySources, context, context.analysisOptions.strongMode)
.build();
_bundle = new PackageBundle.fromBuffer(bytes);
} }
return _bundle; return _bundle;
} }
@ -383,6 +384,18 @@ const Map<String, LibraryInfo> libraries = const {
// table above. // table above.
return null; return null;
} }
/**
* Compute the bytes of the linked bundle associated with this SDK.
*/
List<int> _computeLinkedBundleBytes() {
List<Source> librarySources = sdkLibraries
.map((SdkLibrary library) => mapDartUri(library.shortName))
.toList();
return new SummaryBuilder(
librarySources, context, context.analysisOptions.strongMode)
.build();
}
} }
class MockSdkLibrary implements SdkLibrary { class MockSdkLibrary implements SdkLibrary {

View file

@ -351,7 +351,9 @@ class MockSdk implements DartSdk {
PackageBundle _bundle; PackageBundle _bundle;
MockSdk( MockSdk(
{bool dartAsync: true, resource.MemoryResourceProvider resourceProvider}) {bool buildSummaries: true,
bool dartAsync: true,
resource.MemoryResourceProvider resourceProvider})
: provider = resourceProvider ?? new resource.MemoryResourceProvider(), : provider = resourceProvider ?? new resource.MemoryResourceProvider(),
sdkLibraries = dartAsync ? _LIBRARIES : [_LIB_CORE], sdkLibraries = dartAsync ? _LIBRARIES : [_LIB_CORE],
uriMap = dartAsync ? FULL_URI_MAP : NO_ASYNC_URI_MAP { uriMap = dartAsync ? FULL_URI_MAP : NO_ASYNC_URI_MAP {
@ -365,6 +367,13 @@ class MockSdk implements DartSdk {
provider.convertPath( provider.convertPath(
'$sdkRoot/lib/_internal/sdk_library_metadata/lib/libraries.dart'), '$sdkRoot/lib/_internal/sdk_library_metadata/lib/libraries.dart'),
librariesContent); librariesContent);
if (buildSummaries) {
List<int> bytes = _computeLinkedBundleBytes();
provider.newFileWithBytes(
provider.convertPath('/lib/_internal/spec.sum'), bytes);
provider.newFileWithBytes(
provider.convertPath('/lib/_internal/strong.sum'), bytes);
}
} }
@override @override
@ -422,13 +431,7 @@ class MockSdk implements DartSdk {
@override @override
PackageBundle getLinkedBundle() { PackageBundle getLinkedBundle() {
if (_bundle == null) { if (_bundle == null) {
List<Source> librarySources = sdkLibraries _bundle = new PackageBundle.fromBuffer(_computeLinkedBundleBytes());
.map((SdkLibrary library) => mapDartUri(library.shortName))
.toList();
List<int> bytes = new SummaryBuilder(
librarySources, context, context.analysisOptions.strongMode)
.build();
_bundle = new PackageBundle.fromBuffer(bytes);
} }
return _bundle; return _bundle;
} }
@ -467,6 +470,18 @@ class MockSdk implements DartSdk {
String newContent = updateContent(content); String newContent = updateContent(content);
provider.updateFile(path, newContent); provider.updateFile(path, newContent);
} }
/**
* Compute the bytes of the linked bundle associated with this SDK.
*/
List<int> _computeLinkedBundleBytes() {
List<Source> librarySources = sdkLibraries
.map((SdkLibrary library) => mapDartUri(library.shortName))
.toList();
return new SummaryBuilder(
librarySources, context, context.analysisOptions.strongMode)
.build();
}
} }
class _MockSdkLibrary implements SdkLibrary { class _MockSdkLibrary implements SdkLibrary {

View file

@ -254,7 +254,8 @@ A b;
// Use DartSdk with a different API signature. // Use DartSdk with a different API signature.
// Different linked bundles should be created. // Different linked bundles should be created.
{ {
MockSdk sdk = new MockSdk(resourceProvider: resourceProvider); MockSdk sdk = new MockSdk(
buildSummaries: false, resourceProvider: resourceProvider);
sdk.updateUriFile('dart:math', (String content) { sdk.updateUriFile('dart:math', (String content) {
return content + ' class NewMathClass {}'; return content + ' class NewMathClass {}';
}); });