blob: 39d7e0a6aa28a11be4643e656bcb56f4de6d9eb8 [file] [log] [blame]
// Copyright (c) 2019, 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.
// @dart = 2.9
@TestOn('vm')
import 'dart:io';
import 'package:dwds/src/utilities/sdk_configuration.dart';
import 'package:file/memory.dart';
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
var _throwsDoesNotExistException = throwsA(
isA<InvalidSdkConfigurationException>()
.having((e) => '$e', 'message', contains('does not exist')));
void main() {
group('Basic configuration', () {
test('Can validate default configuration layout', () async {
final defaultConfiguration =
await DefaultSdkConfigurationProvider().configuration;
defaultConfiguration.validateSdkDir();
defaultConfiguration.validate();
});
test('Cannot validate an empty configuration layout', () async {
final emptyConfiguration = SdkConfiguration();
expect(() => emptyConfiguration.validateSdkDir(),
_throwsDoesNotExistException);
expect(() => emptyConfiguration.validate(), _throwsDoesNotExistException);
});
});
group('Non-standard configuration', () {
Directory outputDir;
setUp(() async {
final systemTempDir = Directory.systemTemp;
outputDir = systemTempDir.createTempSync('foo bar');
});
tearDown(() async {
await outputDir?.delete(recursive: true);
});
test('Can validate existing configuration layout', () async {
final defaultSdkConfiguration =
await DefaultSdkConfigurationProvider().configuration;
final sdkDirectory = outputDir.path;
final librariesDir = p.join(sdkDirectory, 'specs');
final librariesPath = p.join(librariesDir, 'libraries.json');
Directory(librariesDir).createSync(recursive: true);
File(defaultSdkConfiguration.librariesPath).copySync(librariesPath);
final summariesDir = p.join(sdkDirectory, 'summaries');
final unsoundSdkSummaryPath = p.join(summariesDir, 'ddc_sdk.dill');
final soundSdkSummaryPath =
p.join(summariesDir, 'ddc_outline_sound.dill');
Directory(summariesDir).createSync(recursive: true);
File(defaultSdkConfiguration.unsoundSdkSummaryPath)
.copySync(unsoundSdkSummaryPath);
File(defaultSdkConfiguration.soundSdkSummaryPath)
.copySync(soundSdkSummaryPath);
final workerDir = p.join(sdkDirectory, 'snapshots');
final compilerWorkerPath = p.join(workerDir, 'dartdevc.dart.snapshot');
Directory(workerDir).createSync(recursive: true);
File(defaultSdkConfiguration.compilerWorkerPath)
.copySync(compilerWorkerPath);
final sdkConfiguration = SdkConfiguration(
sdkDirectory: sdkDirectory,
soundSdkSummaryPath: soundSdkSummaryPath,
unsoundSdkSummaryPath: unsoundSdkSummaryPath,
librariesPath: librariesPath,
compilerWorkerPath: compilerWorkerPath,
);
expect(sdkConfiguration.sdkDirectory, equals(sdkDirectory));
expect(sdkConfiguration.unsoundSdkSummaryPath,
equals(unsoundSdkSummaryPath));
expect(sdkConfiguration.soundSdkSummaryPath, equals(soundSdkSummaryPath));
expect(sdkConfiguration.librariesPath, equals(librariesPath));
expect(sdkConfiguration.compilerWorkerPath, equals(compilerWorkerPath));
sdkConfiguration.validateSdkDir();
sdkConfiguration.validate();
});
test('Cannot validate non-existing configuration layout', () async {
final sdkDir = outputDir.path;
final librariesDir = p.join(sdkDir, 'fakespecs');
final librariesPath = p.join(librariesDir, 'libraries.json');
final summariesDir = p.join(sdkDir, 'fakesummaries');
final unsoundSdkSummaryPath = p.join(summariesDir, 'ddc_sdk.dill');
final soundSdkSummaryPath =
p.join(summariesDir, 'ddc_outline_sound.dill');
final workerDir = p.join(sdkDir, 'fakesnapshots');
final compilerWorkerPath = p.join(workerDir, 'dartdevc.dart.snapshot');
final sdkConfiguration = SdkConfiguration(
sdkDirectory: sdkDir,
soundSdkSummaryPath: soundSdkSummaryPath,
unsoundSdkSummaryPath: unsoundSdkSummaryPath,
librariesPath: librariesPath,
compilerWorkerPath: compilerWorkerPath,
);
sdkConfiguration.validateSdkDir();
expect(() => sdkConfiguration.validate(), _throwsDoesNotExistException);
});
});
group('SDK configuration', () {
MemoryFileSystem fs;
final root = '/root';
final sdkDirectory = root;
final soundSdkSummaryPath = _dartSoundSdkSummaryPath(sdkDirectory);
final unsoundSdkSummaryPath = _dartUnsoundSdkSummaryPath(sdkDirectory);
final librariesPath = _librariesPath(sdkDirectory);
final compilerWorkerPath = _compilerWorkerPath(root);
setUp(() async {
fs = MemoryFileSystem();
await fs.directory(sdkDirectory).create(recursive: true);
await fs.file(soundSdkSummaryPath).create(recursive: true);
await fs.file(unsoundSdkSummaryPath).create(recursive: true);
await fs.file(librariesPath).create(recursive: true);
await fs.file(compilerWorkerPath).create(recursive: true);
});
test('Can create and validate default SDK configuration', () async {
final configuration = SdkConfiguration(
sdkDirectory: sdkDirectory,
soundSdkSummaryPath: soundSdkSummaryPath,
unsoundSdkSummaryPath: unsoundSdkSummaryPath,
librariesPath: librariesPath,
compilerWorkerPath: compilerWorkerPath,
);
expect(configuration.sdkDirectory, equals(sdkDirectory));
expect(configuration.soundSdkSummaryPath, equals(soundSdkSummaryPath));
expect(
configuration.unsoundSdkSummaryPath, equals(unsoundSdkSummaryPath));
expect(configuration.librariesPath, equals(librariesPath));
expect(configuration.compilerWorkerPath, equals(compilerWorkerPath));
configuration.validateSdkDir(fileSystem: fs);
configuration.validate(fileSystem: fs);
});
});
}
String _dartUnsoundSdkSummaryPath(String sdkDir) =>
p.join(sdkDir, 'lib', '_internal', 'ddc_sdk.dill');
String _dartSoundSdkSummaryPath(String sdkDir) =>
p.join(sdkDir, 'lib', '_internal', 'ddc_outline_sound.dill');
String _librariesPath(String sdkDir) => p.join(sdkDir, 'lib', 'libraries.json');
String _compilerWorkerPath(String binDir) =>
p.join(binDir, 'snapshots', 'dartdevc.dart.snapshot');