Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: test/version_solver_test.dart

Issue 2165423002: Add support for Flutter SDK constraints. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/pubspec_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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!'),
« no previous file with comments | « test/pubspec_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698