| Index: test/version_solver_test.dart
|
| diff --git a/test/version_solver_test.dart b/test/version_solver_test.dart
|
| index 4bb66d8a8183f2ace940c8b2b3c2c2fa984b74e5..e0a1eeaddf85dbfe73bff444efab682a3ad77aaf 100644
|
| --- a/test/version_solver_test.dart
|
| +++ b/test/version_solver_test.dart
|
| @@ -32,7 +32,8 @@ main() {
|
| group('unsolvable', unsolvable);
|
| group('bad source', badSource);
|
| group('backtracking', backtracking);
|
| - group('SDK constraint', sdkConstraint);
|
| + group('Dart SDK constraint', dartSdkConstraint);
|
| + group('Flutter SDK constraint', flutterSdkConstraint);
|
| group('pre-release', prerelease);
|
| group('override', override);
|
| group('downgrade', downgrade);
|
| @@ -769,7 +770,7 @@ void backtracking() {
|
| });
|
| }
|
|
|
| -void sdkConstraint() {
|
| +void dartSdkConstraint() {
|
| integration('root matches SDK', () {
|
| d.dir(appPath, [
|
| d.pubspec({
|
| @@ -866,6 +867,164 @@ void sdkConstraint() {
|
| });
|
| }
|
|
|
| +void flutterSdkConstraint() {
|
| + group('without a Flutter SDK', () {
|
| + integration('fails for the root package', () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {'flutter': '1.2.3'}
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + error: 'Package myapp requires the Flutter SDK, which is not '
|
| + 'available.');
|
| + });
|
| +
|
| + integration('fails for a dependency', () {
|
| + servePackages((builder) {
|
| + builder.serve('foo', '1.0.0',
|
| + pubspec: {'environment': {'flutter': '0.0.0'}});
|
| + });
|
| +
|
| + d.appDir({'foo': 'any'}).create();
|
| + expectResolves(
|
| + error: 'Package foo requires the Flutter SDK, which is not '
|
| + 'available.');
|
| + });
|
| +
|
| + integration("chooses a version that doesn't need Flutter", () {
|
| + servePackages((builder) {
|
| + builder.serve('foo', '1.0.0');
|
| + builder.serve('foo', '2.0.0');
|
| + builder.serve('foo', '3.0.0',
|
| + pubspec: {'environment': {'flutter': '0.0.0'}});
|
| + });
|
| +
|
| + d.appDir({'foo': 'any'}).create();
|
| + expectResolves(result: {'foo': '2.0.0'});
|
| + });
|
| +
|
| + integration('fails even with a matching Dart SDK constraint', () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {
|
| + 'dart': '0.1.2+3',
|
| + 'flutter': '1.2.3'
|
| + }
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + error: 'Package myapp requires the Flutter SDK, which is not '
|
| + 'available.');
|
| + });
|
| + });
|
| +
|
| + group('with a Flutter SDK', () {
|
| + setUp(() {
|
| + d.dir('flutter', [
|
| + d.file('version', '1.2.3')
|
| + ]).create();
|
| + });
|
| +
|
| + integration('succeeds with a matching constraint', () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {'flutter': 'any'}
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + result: {});
|
| + });
|
| +
|
| + integration('fails with a non-matching constraint', () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {'flutter': '>1.2.3'}
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + error: 'Package myapp requires Flutter SDK version >1.2.3 but the '
|
| + 'current SDK is 1.2.3.');
|
| + });
|
| +
|
| + integration('succeeds if both Flutter and Dart SDKs match', () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {
|
| + 'sdk': '0.1.2+3',
|
| + 'flutter': '1.2.3'
|
| + }
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + result: {});
|
| + });
|
| +
|
| + integration("fails if Flutter SDK doesn't match but Dart does", () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {
|
| + 'sdk': '0.1.2+3',
|
| + 'flutter': '>1.2.3'
|
| + }
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + error: 'Package myapp requires Flutter SDK version >1.2.3 but the '
|
| + 'current SDK is 1.2.3.');
|
| + });
|
| +
|
| + integration("fails if Dart SDK doesn't match but Flutter does", () {
|
| + d.dir(appPath, [
|
| + d.pubspec({
|
| + 'name': 'myapp',
|
| + 'environment': {
|
| + 'sdk': '>0.1.2+3',
|
| + 'flutter': '1.2.3'
|
| + }
|
| + })
|
| + ]).create();
|
| +
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + error: 'Package myapp requires SDK version >0.1.2+3 but the current '
|
| + 'SDK is 0.1.2+3.');
|
| + });
|
| +
|
| + integration('selects the latest dependency with a matching constraint', () {
|
| + servePackages((builder) {
|
| + builder.serve('foo', '1.0.0',
|
| + pubspec: {'environment': {'flutter': '^0.0.0'}});
|
| + builder.serve('foo', '2.0.0',
|
| + pubspec: {'environment': {'flutter': '^1.0.0'}});
|
| + builder.serve('foo', '3.0.0',
|
| + pubspec: {'environment': {'flutter': '^2.0.0'}});
|
| + });
|
| +
|
| + d.appDir({'foo': 'any'}).create();
|
| + expectResolves(
|
| + environment: {'FLUTTER_ROOT': p.join(sandboxDir, 'flutter')},
|
| + result: {'foo': '2.0.0'});
|
| + });
|
| + });
|
| +}
|
| +
|
| void prerelease() {
|
| integration('prefer stable versions over unstable', () {
|
| servePackages((builder) {
|
| @@ -1116,10 +1275,15 @@ void downgrade() {
|
| /// Asserts that version solving looks at exactly [tries] solutions. It defaults
|
| /// to allowing only a single solution.
|
| ///
|
| +/// If [environment] is passed, it's added to the OS environment when running
|
| +/// pub.
|
| +///
|
| /// If [downgrade] is `true`, this runs "pub downgrade" instead of "pub get".
|
| -void expectResolves({Map result, error, int tries, bool downgrade: false}) {
|
| +void expectResolves({Map result, error, int tries,
|
| + Map<String, String> environment, bool downgrade: false}) {
|
| schedulePub(
|
| args: [downgrade ? 'downgrade' : 'get'],
|
| + environment: environment,
|
| output: error == null
|
| ? anyOf(
|
| contains('Got dependencies!'),
|
|
|