blob: d62d051f8d202a7cea9f023ea2494dc881407c75 [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:test/test.dart';
import '../descriptor.dart' as d;
import '../test_pub.dart';
Future<void> expectValidation(error, int exitCode) async {
await runPub(
error: error,
args: ['publish', '--dry-run'],
environment: {'_PUB_TEST_SDK_VERSION': '2.12.0'},
workingDirectory: d.path(appPath),
exitCode: exitCode,
);
}
Future<void> setup({
required String sdkConstraint,
Map dependencies = const {},
Map devDependencies = const {},
List<d.Descriptor> extraFiles = const [],
}) async {
await d.validPackage.create();
await d.dir(appPath, [
d.pubspec({
'name': 'test_pkg',
'description':
'A just long enough decription to fit the requirement of 60 characters',
'homepage': 'https://example.com/',
'version': '1.0.0',
'environment': {'sdk': sdkConstraint},
'dependencies': dependencies,
'dev_dependencies': devDependencies,
}),
...extraFiles,
]).create();
await pubGet(environment: {'_PUB_TEST_SDK_VERSION': '2.12.0'});
}
void main() {
group('should consider a package valid if it', () {
test('is not opting in to null-safety, but depends on package that is',
() async {
final server = await servePackages();
server.serve(
'foo',
'0.0.1',
pubspec: {
'environment': {'sdk': '>=2.12.0<3.0.0'}
},
);
await setup(
sdkConstraint: '>=2.9.0 <3.0.0', dependencies: {'foo': '^0.0.1'});
await expectValidation(contains('Package has 0 warnings.'), 0);
});
test('is opting in to null-safety and depends on package that is',
() async {
final server = await servePackages();
server.serve(
'foo',
'0.0.1',
pubspec: {
'environment': {'sdk': '>=2.12.0<3.0.0'}
},
);
await setup(
sdkConstraint: '>=2.12.0 <3.0.0', dependencies: {'foo': '^0.0.1'});
await expectValidation(contains('Package has 0 warnings.'), 0);
});
test('is opting in to null-safety has dev_dependency that is not',
() async {
final server = await servePackages();
server.serve(
'foo',
'0.0.1',
pubspec: {
'environment': {'sdk': '>=2.9.0<3.0.0'}
},
);
await setup(sdkConstraint: '>=2.12.0 <3.0.0', devDependencies: {
'foo': '^0.0.1',
});
await expectValidation(contains('Package has 0 warnings.'), 0);
});
});
group('should consider a package invalid if it', () {
test('is opting in to null-safety, but depends on package that is not',
() async {
final server = await servePackages();
server.serve(
'foo',
'0.0.1',
pubspec: {
'environment': {'sdk': '>=2.9.0<3.0.0'}
},
);
await setup(
sdkConstraint: '>=2.12.0 <3.0.0', dependencies: {'foo': '^0.0.1'});
await expectValidation(
allOf(
contains(
'package:foo is not opted into null safety in its pubspec.yaml:'),
contains('Package has 1 warning.'),
),
65);
});
test('is opting in to null-safety, but has file opting out', () async {
await setup(sdkConstraint: '>=2.12.0 <3.0.0', extraFiles: [
d.dir('lib', [d.file('a.dart', '// @dart = 2.9\n')])
]);
await expectValidation(
allOf(
contains('package:test_pkg/a.dart is opting out of null safety:'),
contains('Package has 1 warning.'),
),
65);
});
test(
'is opting in to null-safety, but depends on package has file opting out',
() async {
final server = await servePackages();
server.serve('foo', '0.0.1', pubspec: {
'environment': {'sdk': '>=2.12.0<3.0.0'}
}, contents: [
d.dir('lib', [
d.file('foo.dart', '''
// @dart = 2.9
''')
])
]);
await setup(
sdkConstraint: '>=2.12.0 <3.0.0', dependencies: {'foo': '^0.0.1'});
await expectValidation(
allOf(
contains('package:foo/foo.dart is opting out of null safety:'),
contains('Package has 1 warning.'),
),
65);
});
});
}