diff --git a/lib/src/validator/dependency_override.dart b/lib/src/validator/dependency_override.dart index ff2fb43498ed677d46cea0b797ac4ce316fa3ca0..36985ba847059323e421285dd4a24fa2efefa886 100644 --- a/lib/src/validator/dependency_override.dart +++ b/lib/src/validator/dependency_override.dart @@ -14,9 +14,12 @@ class DependencyOverrideValidator extends Validator { : super(entrypoint); Future validate() { - if (entrypoint.root.dependencyOverrides.isNotEmpty) { + var overridden = + entrypoint.root.dependencyOverrides.map((dep) => dep.name).toSet(); + var dev = entrypoint.root.devDependencies.map((dep) => dep.name).toSet(); + if (overridden.difference(dev).isNotEmpty) { errors.add( - 'Your pubspec.yaml must not have a "dependency_overrides" field.\n' + 'Your pubspec.yaml must not override non-dev dependencies.\n' 'This ensures you test your package against the same versions of ' 'its dependencies\n' 'that users will have when they use it.'); diff --git a/test/validator/dependency_override_test.dart b/test/validator/dependency_override_test.dart index 3373bc73f39596dadc35c931e823c13a84f0e081..7d0f0aa9ba73ee0517059bfdad49620e0f33ed8e 100644 --- a/test/validator/dependency_override_test.dart +++ b/test/validator/dependency_override_test.dart @@ -5,6 +5,7 @@ import 'package:pub/src/entrypoint.dart'; import 'package:pub/src/validator.dart'; import 'package:pub/src/validator/dependency_override.dart'; +import 'package:scheduled_test/scheduled_test.dart'; import '../descriptor.dart' as d; import '../test_pub.dart'; @@ -14,16 +15,52 @@ Validator dependencyOverride(Entrypoint entrypoint) => new DependencyOverrideValidator(entrypoint); main() { - integration('invalidates a package if it has dependency overrides', () { + integration('should consider a package valid if it has dev dependency ' + 'overrides', () { d.dir(appPath, [ d.pubspec({ "name": "myapp", + "dev_dependencies": { + "foo": "1.0.0" + }, "dependency_overrides": { "foo": "<3.0.0" } }) ]).create(); - expectValidationError(dependencyOverride); + expectNoValidationError(dependencyOverride); + }); + + group('should consider a package invalid if', () { + integration('it has only non-dev dependency overrides', () { + d.dir(appPath, [ + d.pubspec({ + "name": "myapp", + "dependency_overrides": { + "foo": "<3.0.0" + } + }) + ]).create(); + + expectValidationError(dependencyOverride); + }); + + integration('it has any non-dev dependency overrides', () { + d.dir(appPath, [ + d.pubspec({ + "name": "myapp", + "dev_dependencies": { + "foo": "1.0.0" + }, + "dependency_overrides": { + "foo": "<3.0.0", + "bar": ">3.0.0", + } + }) + ]).create(); + + expectValidationError(dependencyOverride); + }); }); }