|  | #!/usr/bin/env -S dart run -r | 
|  | // Copyright (c) 2012, 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. | 
|  |  | 
|  | /// Test wrapper script. | 
|  | /// Many of the integration tests runs the `pub` command, this is slow if every | 
|  | /// invocation requires the dart compiler to load all the sources. This script | 
|  | /// will create a `pub.XXX.dart.snapshot.dart2` which the tests can utilize. | 
|  | /// After creating the snapshot this script will forward arguments to | 
|  | /// `pub run test`, and ensure that the snapshot is deleted after tests have | 
|  | /// been run. | 
|  | library; | 
|  |  | 
|  | import 'dart:io'; | 
|  | import 'package:path/path.dart' as p; | 
|  |  | 
|  | import 'package:pub/src/dart.dart'; | 
|  | import 'package:pub/src/exceptions.dart'; | 
|  |  | 
|  | Future<void> main(List<String> args) async { | 
|  | if (Platform.environment['FLUTTER_ROOT'] != null) { | 
|  | stderr.writeln( | 
|  | 'WARNING: The tests will not run correctly with dart from a flutter checkout!', | 
|  | ); | 
|  | } | 
|  | Process? testProcess; | 
|  | final sub = ProcessSignal.sigint.watch().listen((signal) { | 
|  | testProcess?.kill(signal); | 
|  | }); | 
|  | final pubSnapshotFilename = | 
|  | p.absolute(p.join('.dart_tool', '_pub', 'pub.dart.snapshot.dart2')); | 
|  | try { | 
|  | final stopwatch = Stopwatch()..start(); | 
|  | stderr.write('Building snapshot...'); | 
|  | await precompile( | 
|  | executablePath: p.join('bin', 'pub.dart'), | 
|  | outputPath: pubSnapshotFilename, | 
|  | name: 'bin/pub.dart', | 
|  | packageConfigPath: p.join('.dart_tool', 'package_config.json'), | 
|  | ); | 
|  | stderr.writeln(' (${stopwatch.elapsed.inMilliseconds}ms)'); | 
|  | testProcess = await Process.start( | 
|  | Platform.resolvedExecutable, | 
|  | ['run', 'test', ...args], | 
|  | environment: {'_PUB_TEST_SNAPSHOT': pubSnapshotFilename}, | 
|  | mode: ProcessStartMode.inheritStdio, | 
|  | ); | 
|  | exitCode = await testProcess.exitCode; | 
|  | } on ApplicationException catch (e) { | 
|  | stderr.writeln('Failed building snapshot: $e'); | 
|  | exitCode = 1; | 
|  | } finally { | 
|  | await sub.cancel(); | 
|  | } | 
|  | } |