blob: aace8a53426c2b18200fefeada6dd5646c5c0b93 [file] [log] [blame]
// Copyright (c) 2020, 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.
import 'package:analyzer/file_system/file_system.dart';
import 'package:nnbd_migration/src/fantasyland/fantasy_repo.dart';
import 'package:nnbd_migration/src/fantasyland/fantasy_sub_package.dart';
import 'package:nnbd_migration/src/fantasyland/fantasy_workspace.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'src/filesystem_test_base.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FantasySubPackageSettingsTest);
defineReflectiveTests(FantasySubPackageTest);
});
}
@reflectiveTest
class FantasySubPackageSettingsTest {
test_settingsFromTable() {
var subPackageSettings = FantasySubPackageSettings.fromName('vm_service');
expect(subPackageSettings.name, equals('vm_service'));
expect(subPackageSettings.repoSettings.name, equals('sdk'));
expect(subPackageSettings.subDir, equals(path.join('pkg', 'vm_service')));
}
test_settingsFromTableDefault() {
var subPackageSettings =
FantasySubPackageSettings.fromName('completely_unknown_package');
expect(subPackageSettings.name, equals('completely_unknown_package'));
expect(subPackageSettings.repoSettings.name,
equals('completely_unknown_package'));
expect(subPackageSettings.subDir, equals('.'));
}
test_settingsEqual() {
var repo1 = FantasyRepoSettings.fromName('some_repo_somewhere');
var repo2 = FantasyRepoSettings.fromName('another_repo_somewhere_else');
var test1 = FantasySubPackageSettings('foo', repo1, subDir: '.');
var test2 = FantasySubPackageSettings('foo', repo2, subDir: '.');
var test3 = FantasySubPackageSettings('foo', repo1,
subDir: path.join('pkg', 'something'));
var test4 = FantasySubPackageSettings('foobie', repo1);
var test5 = FantasySubPackageSettings('foo', repo1);
expect(test1, equals(test1));
expect(test1, isNot(equals(test2)));
expect(test1, isNot(equals(test3)));
expect(test1, isNot(equals(test4)));
expect(test1, equals(test5));
}
}
class FantasyRepoFake extends FantasyRepo {
final String name;
final FantasyRepoSettings repoSettings;
final Folder repoRoot;
FantasyRepoFake(this.repoSettings, this.repoRoot) : name = repoSettings.name;
}
@reflectiveTest
class FantasySubPackageTest extends FilesystemTestBase {
FantasyRepoFake fantasyRepo;
FantasySubPackage fantasySubPackage;
Folder repoRoot;
File pubspecYaml;
File analysisOptionsYaml;
setUp() {
super.setUp();
String repoRootPath = convertPath('/workspace/repo_root');
repoRoot = resourceProvider.getFolder(repoRootPath);
fantasyRepo = FantasyRepoFake(
FantasyRepoSettings('unreal_repo', '', '', ''), repoRoot);
// subPackage 'unreal_package' at 'workspace_root/repo_root/unreal_package_dir'.
fantasySubPackage = FantasySubPackage(
FantasySubPackageSettings('unreal_package', fantasyRepo.repoSettings,
subDir: 'unreal_package_dir'),
fantasyRepo,
resourceProvider: resourceProvider);
// the pubspecYaml.
pubspecYaml = resourceProvider
.getFile(join(repoRootPath, 'unreal_package_dir', 'pubspec.yaml'));
analysisOptionsYaml = resourceProvider.getFile(
join(repoRootPath, 'unreal_package_dir', 'analysis_options.yaml'));
}
test_removeSdkConstraintHack() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
version: 1.2.3
environment:
sdk: '>=2.2.0 <3.0.0'
''');
expect(fantasySubPackage.languageVersion, equals('2.2'));
await fantasySubPackage.removeSdkConstraintHack();
expect(fantasySubPackage.languageVersion, isNull);
expect(pubspecYaml.readAsStringSync(), equals('''
name: unreal_package
version: 1.2.3
environment:
'''));
}
test_recognizeAllDependencies() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
version: 1.2.3
dependencies:
package2:
path: correctly/enclosed
package3:
version: '0.0.0 >= 1.0.0'
package4:
version: any
dev_dependencies:
package5:
version: any
''');
List<FantasySubPackageSettings> dependencies =
await fantasySubPackage.getPackageAllDependencies();
expect(dependencies.length, equals(4));
}
test_recognizePathSubdir() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
version: 1.2.3
dependencies:
package2:
path: correctly/enclosed
''');
List<FantasySubPackageSettings> dependencies =
await fantasySubPackage.getPackageAllDependencies();
expect(dependencies.first.name, equals('package2'));
expect(dependencies.first.repoSettings.name, equals('unreal_repo'));
expect(dependencies.first.subDir,
equals(join('unreal_package_dir', 'correctly', 'enclosed')));
}
test_recognizeVersion() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
version: 1.2.3
dependencies:
package3:
version: '0.0.0 >= 1.0.0'
''');
List<FantasySubPackageSettings> dependencies =
await fantasySubPackage.getPackageAllDependencies();
expect(dependencies.first.name, equals('package3'));
expect(dependencies.first.repoSettings.name, equals('package3'));
expect(dependencies.first.subDir, equals('.'));
}
@assertFailingTest
test_assertOnPathOutsidePackage() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
version: 1.2.3
dependencies:
package2:
path: ../incorrectly/enclosed
''');
await fantasySubPackage.getPackageAllDependencies();
}
test_analysisOptionsCreate() async {
pubspecYaml.writeAsStringSync('''
name: unreal_package
''');
await fantasySubPackage.enableExperimentHack();
expect(analysisOptionsYaml.exists, isTrue);
expect(
analysisOptionsYaml.readAsStringSync(),
'analyzer:\n'
' enable-experiment:\n'
' - non-nullable\n'
'\n');
}
}