| // Copyright (c) 2018, 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:test/test.dart'; |
| |
| import 'descriptor.dart' as d; |
| import 'test_pub.dart'; |
| |
| void main() { |
| group('creates a snapshot', () { |
| test('for an immediate dependency', () async { |
| await servePackages((builder) { |
| builder.serve('foo', '1.2.3', contents: [ |
| d.dir('bin', [ |
| d.file('hello.dart', "void main() => print('hello!');"), |
| d.file('goodbye.dart', "void main() => print('goodbye!');"), |
| d.file('shell.sh', 'echo shell'), |
| d.dir( |
| 'subdir', [d.file('sub.dart', "void main() => print('sub!');")]) |
| ]) |
| ]); |
| }); |
| |
| await d.appDir({'foo': '1.2.3'}).create(); |
| |
| await pubGet( |
| args: ['--precompile'], |
| output: allOf([ |
| contains('Precompiled foo:hello.'), |
| contains('Precompiled foo:goodbye.') |
| ])); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin'), [ |
| d.dir('foo', [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello!')), |
| d.file('goodbye.dart-$versionSuffix.snapshot', contains('goodbye!')), |
| d.nothing('shell.sh-$versionSuffix.snapshot'), |
| d.nothing('subdir') |
| ]) |
| ]).validate(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| expect(process.stdout, emits('hello!')); |
| await process.shouldExit(); |
| |
| process = await pubRun(args: ['foo:goodbye']); |
| expect(process.stdout, emits('goodbye!')); |
| await process.shouldExit(); |
| }); |
| |
| test("for an immediate dependency that's also transitive", () async { |
| await servePackages((builder) { |
| builder.serve('foo', '1.2.3', contents: [ |
| d.dir('bin', [ |
| d.file('hello.dart', "void main() => print('hello!');"), |
| d.file('goodbye.dart', "void main() => print('goodbye!');"), |
| d.file('shell.sh', 'echo shell'), |
| d.dir( |
| 'subdir', [d.file('sub.dart', "void main() => print('sub!');")]) |
| ]) |
| ]); |
| builder.serve('bar', '1.2.3', deps: {'foo': '1.2.3'}); |
| }); |
| |
| await d.appDir({'foo': '1.2.3'}).create(); |
| |
| await pubGet( |
| args: ['--precompile'], |
| output: allOf([ |
| contains('Precompiled foo:hello.'), |
| contains('Precompiled foo:goodbye.') |
| ])); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin'), [ |
| d.dir('foo', [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello!')), |
| d.file('goodbye.dart-$versionSuffix.snapshot', contains('goodbye!')), |
| d.nothing('shell.sh-$versionSuffix.snapshot'), |
| d.nothing('subdir') |
| ]) |
| ]).validate(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| expect(process.stdout, emits('hello!')); |
| await process.shouldExit(); |
| |
| process = await pubRun(args: ['foo:goodbye']); |
| expect(process.stdout, emits('goodbye!')); |
| await process.shouldExit(); |
| }); |
| |
| group('again if', () { |
| test('its package is updated', () async { |
| await servePackages((builder) { |
| builder.serve('foo', '1.2.3', contents: [ |
| d.dir('bin', |
| [d.file('hello.dart', "void main() => print('hello!');")]) |
| ]); |
| }); |
| |
| await d.appDir({'foo': 'any'}).create(); |
| |
| await pubGet( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello!')) |
| ]).validate(); |
| |
| globalPackageServer.add((builder) { |
| builder.serve('foo', '1.2.4', contents: [ |
| d.dir('bin', |
| [d.file('hello.dart', "void main() => print('hello 2!');")]) |
| ]); |
| }); |
| |
| await pubUpgrade( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello 2!')) |
| ]).validate(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| expect(process.stdout, emits('hello 2!')); |
| await process.shouldExit(); |
| }); |
| |
| test('a dependency of its package is updated', () async { |
| await servePackages((builder) { |
| builder.serve('foo', '1.2.3', pubspec: { |
| 'dependencies': {'bar': 'any'} |
| }, contents: [ |
| d.dir('bin', [ |
| d.file('hello.dart', """ |
| import 'package:bar/bar.dart'; |
| |
| void main() => print(message); |
| """) |
| ]) |
| ]); |
| builder.serve('bar', '1.2.3', contents: [ |
| d.dir('lib', [d.file('bar.dart', "final message = 'hello!';")]) |
| ]); |
| }); |
| |
| await d.appDir({'foo': 'any'}).create(); |
| |
| await pubGet( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello!')) |
| ]).validate(); |
| |
| globalPackageServer.add((builder) { |
| builder.serve('bar', '1.2.4', contents: [ |
| d.dir('lib', [d.file('bar.dart', "final message = 'hello 2!';")]), |
| ]); |
| }); |
| |
| await pubUpgrade( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello 2!')) |
| ]).validate(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| expect(process.stdout, emits('hello 2!')); |
| await process.shouldExit(); |
| }); |
| |
| test('a git dependency of its package is updated', () async { |
| ensureGit(); |
| |
| await d.git('foo.git', [ |
| d.pubspec({'name': 'foo', 'version': '0.0.1'}), |
| d.dir( |
| 'bin', [d.file('hello.dart', "void main() => print('Hello!');")]) |
| ]).create(); |
| |
| await d.appDir({ |
| 'foo': {'git': '../foo.git'} |
| }).create(); |
| |
| await pubGet( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('Hello!')) |
| ]).validate(); |
| |
| await d.git('foo.git', [ |
| d.dir('bin', |
| [d.file('hello.dart', "void main() => print('Goodbye!');")]) |
| ]).commit(); |
| |
| await pubUpgrade( |
| args: ['--precompile'], output: contains('Precompiled foo:hello.')); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin', 'foo'), [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('Goodbye!')) |
| ]).validate(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| expect(process.stdout, emits('Goodbye!')); |
| await process.shouldExit(); |
| }); |
| |
| test('the SDK is out of date', () async { |
| await servePackages((builder) { |
| builder.serve('foo', '5.6.7', contents: [ |
| d.dir('bin', |
| [d.file('hello.dart', "void main() => print('hello!');")]) |
| ]); |
| }); |
| |
| await d.appDir({'foo': '5.6.7'}).create(); |
| |
| await pubGet(args: ['--no-precompile']); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin'), [ |
| d.dir('foo', |
| [d.outOfDateSnapshot('hello.dart-$versionSuffix.snapshot')]) |
| ]).create(); |
| |
| var process = await pubRun(args: ['foo:hello']); |
| |
| // In the real world this would just print "hello!", but since we collect |
| // all output we see the precompilation messages as well. |
| expect(process.stdout, emits('Precompiling executable...')); |
| expect(process.stdout, emitsThrough('hello!')); |
| await process.shouldExit(); |
| |
| await d.dir(p.join(appPath, '.dart_tool', 'pub', 'bin'), [ |
| d.dir('foo', [ |
| d.file('hello.dart-$versionSuffix.snapshot', contains('hello!')) |
| ]) |
| ]).validate(); |
| }); |
| }); |
| }); |
| } |