blob: c24adf2cafa6b3d2708b65721ef53e7323d8184f [file] [log] [blame]
// Copyright (c) 2014, 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:pub/src/entrypoint.dart';
import 'package:pub/src/validator.dart';
import 'package:pub/src/validator/sdk_constraint.dart';
import 'package:test/test.dart';
import '../descriptor.dart' as d;
import '../test_pub.dart';
import 'utils.dart';
Validator sdkConstraint(Entrypoint entrypoint) =>
SdkConstraintValidator(entrypoint);
void main() {
group('should consider a package valid if it', () {
test('has no SDK constraint', () async {
await d.validPackage.create();
await expectValidation(sdkConstraint);
});
test('has an SDK constraint without ^', () async {
await d.dir(appPath,
[d.libPubspec('test_pkg', '1.0.0', sdk: '>=1.8.0 <2.0.0')]).create();
await expectValidation(sdkConstraint);
});
test('depends on a pre-release Dart SDK from a pre-release', () async {
await d.dir(appPath, [
d.libPubspec('test_pkg', '1.0.0-dev.1', sdk: '>=1.8.0-dev.1 <2.0.0')
]).create();
await expectValidation(sdkConstraint);
});
test(
'has a Flutter SDK constraint with an appropriate Dart SDK '
'constraint', () async {
await d.dir(appPath, [
d.pubspec({
'name': 'test_pkg',
'version': '1.0.0',
'environment': {'sdk': '>=1.19.0 <2.0.0', 'flutter': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint);
});
test(
'has a Fuchsia SDK constraint with an appropriate Dart SDK '
'constraint', () async {
await d.dir(appPath, [
d.pubspec({
'name': 'test_pkg',
'version': '1.0.0-dev.1',
'environment': {'sdk': '>=2.0.0-dev.51.0 <2.0.0', 'fuchsia': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint);
});
});
group('should consider a package invalid if it', () {
test('has an SDK constraint with ^', () async {
await d.dir(
appPath, [d.libPubspec('test_pkg', '1.0.0', sdk: '^1.8.0')]).create();
await expectValidation(sdkConstraint,
errors: anyElement(contains('">=1.8.0 <2.0.0"')));
});
test('has no upper bound SDK constraint', () async {
await d.dir(appPath,
[d.libPubspec('test_pkg', '1.0.0', sdk: '>=1.8.0')]).create();
await expectValidation(sdkConstraint,
errors:
anyElement(contains('should have an upper bound constraint')));
});
test('has no SDK constraint', () async {
await d.dir(appPath, [
d.rawPubspec({
'name': 'test_pkg',
'version': '1.0.0',
}),
]).create();
await expectValidation(sdkConstraint,
errors:
anyElement(contains('should have an upper bound constraint')));
});
test(
'has a Flutter SDK constraint with a too-broad SDK '
'constraint', () async {
await d.dir(appPath, [
d.pubspec({
'name': 'test_pkg',
'version': '1.0.0',
'environment': {'sdk': '>=1.18.0 <1.50.0', 'flutter': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint,
errors: anyElement(contains('">=1.19.0 <1.50.0"')));
});
test('has a Flutter SDK constraint with no SDK constraint', () async {
await d.dir(appPath, [
d.rawPubspec({
'name': 'test_pkg',
'version': '1.0.0',
'environment': {'flutter': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint,
errors: anyElement(contains('">=1.19.0 <2.0.0"')));
});
test(
'has a Fuchsia SDK constraint with a too-broad SDK '
'constraint', () async {
await d.dir(appPath, [
d.rawPubspec({
'name': 'test_pkg',
'version': '1.0.0-dev.1',
'environment': {'sdk': '>=2.0.0-dev.50.0 <2.0.0', 'fuchsia': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint,
errors: anyElement(contains('">=2.0.0 <3.0.0"')));
});
test('has a Fuchsia SDK constraint with no SDK constraint', () async {
await d.dir(appPath, [
d.rawPubspec({
'name': 'test_pkg',
'version': '1.0.0',
'environment': {'fuchsia': '^1.2.3'}
})
]).create();
await expectValidation(sdkConstraint,
errors: anyElement(contains('">=2.0.0 <3.0.0"')));
});
test('depends on a pre-release sdk from a non-pre-release', () async {
await d.dir(appPath, [
d.libPubspec('test_pkg', '1.0.0', sdk: '>=1.8.0-dev.1 <2.0.0')
]).create();
await expectValidation(sdkConstraint,
warnings: anyElement(contains(
'consider publishing the package as a pre-release instead')));
});
});
}