blob: ebf83ce7cca33f8bb535042919097f3f363f4ebe [file] [log] [blame]
// Copyright (c) 2024, 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 'dart:io';
import 'package:path/path.dart' as p;
import 'package:pub/src/exit_codes.dart';
import 'package:test/test.dart';
import 'descriptor.dart' as d;
import 'test_pub.dart';
final s = Platform.pathSeparator;
void main() {
test('handles errors', () async {
await d.dir(appPath).create();
final server = await servePackages();
server.serve('foo', '1.2.3');
await runPub(
args: ['unpack', 'foo:1:2:3'],
error: contains(
'Error on line 1, column 1 of descriptor: Invalid version constraint: Could not parse version "1:2:3". Unknown text at "1:2:3".',
),
exitCode: DATA,
);
await runPub(
args: ['unpack', 'foo:1.0'],
error:
'Error on line 1, column 1 of descriptor: A dependency specification must be a string or a mapping.',
exitCode: DATA,
);
await runPub(
args: ['unpack', 'foo'],
);
await runPub(
args: ['unpack', 'foo'],
error:
'Target directory `.${s}foo-1.2.3` already exists. Use --force to overwrite',
exitCode: 1,
);
await runPub(args: ['unpack', 'foo', '--force']);
});
test('Chooses right version to unpack', () async {
await d.dir(appPath).create();
final server = await servePackages();
server.serve('foo', '0.1.1');
server.serve('foo', '0.1.0');
server.serve(
'foo',
'1.2.3',
contents: [
d.dir('example', [
d.pubspec({
'name': 'example',
'dependencies': {
'foo': {'path': '..'},
},
}),
]),
],
);
server.serve('foo', '1.2.3-pre');
await d.appDir().create();
await runPub(
args: ['unpack', 'foo'],
output: allOf(
contains('''
Downloading foo 1.2.3 to `.${s}foo-1.2.3`...
Resolving dependencies in `.${s}foo-1.2.3`...
'''),
contains('To explore type: cd .${s}foo-1.2.3'),
contains(
'To explore the example type: cd .${s}foo-1.2.3${s}example',
),
),
);
expect(
File(p.join(d.sandbox, appPath, 'foo-1.2.3', 'pubspec.yaml'))
.existsSync(),
isTrue,
);
expect(
File(p.join(d.sandbox, appPath, 'foo-1.2.3', 'example', 'pubspec.yaml'))
.existsSync(),
isTrue,
);
await runPub(
args: ['unpack', 'foo:1.2.3-pre', '--output=../'],
output: allOf(
contains('''
Downloading foo 1.2.3-pre to `../foo-1.2.3-pre`...
Resolving dependencies in `../foo-1.2.3-pre`...
'''),
contains('To explore type: cd ../foo-1.2.3-pre'),
),
);
expect(
File(p.join(d.sandbox, 'foo-1.2.3-pre', 'pubspec.yaml')).existsSync(),
isTrue,
);
await runPub(
args: ['unpack', 'foo:^0.1.0'],
output: contains('Downloading foo 0.1.1 to `.${s}foo-0.1.1`...'),
);
});
test('unpack from third party package repository', () async {
await d.dir(appPath).create();
final server = await startPackageServer();
server.serve('foo', '1.0.0');
server.serve('foo', '1.2.3');
await runPub(
args: ['unpack', 'foo:{"hosted":"${server.url}", "version":"1.0.0"}'],
output: contains('Downloading foo 1.0.0 to `.${s}foo-1.0.0`...'),
);
});
}