blob: 8f5c2e81a5f93d7dd058455bc8738089b7457be0 [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:path/path.dart' as p;
import 'package:pub/src/exit_codes.dart' as exit_codes;
import 'package:test/test.dart';
import '../../descriptor.dart' as d;
import '../../test_pub.dart';
void main() {
setUp(() async {
final server = await servePackages();
server.serve('bar', '1.0.0');
await d.dir('flutter', [
d.dir('packages', [
d.dir('foo', [
d.libDir('foo', 'foo 0.0.1'),
d.libPubspec('foo', '0.0.1', deps: {'bar': 'any'}),
]),
]),
d.dir('bin/cache/pkg', [
d.dir(
'baz',
[d.libDir('baz', 'foo 0.0.1'), d.libPubspec('baz', '0.0.1')],
),
]),
d.flutterVersion('1.2.3'),
]).create();
});
test("adds an SDK dependency's dependencies", () async {
await d.appDir(dependencies: {}).create();
await pubAdd(
args: ['foo', '--sdk', 'flutter'],
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
);
await d.dir(appPath, [
d.pubspec({
'name': 'myapp',
'dependencies': {
'foo': {'sdk': 'flutter'},
},
}),
]).validate();
await d.appPackageConfigFile(
[
d.packageConfigEntry(
name: 'foo',
path: p.join(d.sandbox, 'flutter', 'packages', 'foo'),
),
d.packageConfigEntry(name: 'bar', version: '1.0.0'),
],
flutterRoot: p.join(d.sandbox, 'flutter'),
flutterVersion: '1.2.3',
).validate();
});
test(
"adds an SDK dependency's dependencies with version constraint specified",
() async {
await d.appDir(dependencies: {}).create();
await pubAdd(
args: ['foo:0.0.1', '--sdk', 'flutter'],
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
);
await d.dir(appPath, [
d.pubspec({
'name': 'myapp',
'dependencies': {
'foo': {'sdk': 'flutter', 'version': '0.0.1'},
},
}),
]).validate();
await d.appPackageConfigFile(
[
d.packageConfigEntry(
name: 'foo',
path: p.join(d.sandbox, 'flutter', 'packages', 'foo'),
),
d.packageConfigEntry(name: 'bar', version: '1.0.0'),
],
flutterRoot: p.join(d.sandbox, 'flutter'),
flutterVersion: '1.2.3',
).validate();
});
test('adds an SDK dependency from bin/cache/pkg', () async {
await d.appDir(dependencies: {}).create();
await pubAdd(
args: ['baz', '--sdk', 'flutter'],
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
);
await d.appPackageConfigFile(
[
d.packageConfigEntry(
name: 'baz',
path: p.join(d.sandbox, 'flutter', 'bin', 'cache', 'pkg', 'baz'),
),
],
flutterRoot: p.join(d.sandbox, 'flutter'),
flutterVersion: '1.2.3',
).validate();
});
test("fails if the version constraint doesn't match", () async {
await d.appDir(dependencies: {}).create();
await pubAdd(
args: ['foo:^1.0.0', '--sdk', 'flutter'],
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
error: equalsIgnoringWhitespace("""
Because myapp depends on foo ^1.0.0 from sdk which doesn't match
any versions, version solving failed.
"""),
exitCode: exit_codes.DATA,
);
await d.appDir(dependencies: {}).validate();
await d.dir(appPath, [
d.nothing('.dart_tool/package_config.json'),
d.nothing('pubspec.lock'),
]).validate();
});
}