Files
packages/script/tool/test/common/pub_utils_test.dart
stuartmorgan 12ec9fe3f0 [tool] Use 'flutter pub get' for Flutter packages (#4397)
Extracts common logic for running `pub get`, and switches commands to use it. The common logic always uses `flutter pub get` for Flutter packages, rather than `dart pub get`, since the latter will fail if someone has a non-Flutter `dart` in their path before `flutter` (e.g., Dart team members contributing PRs).
2023-07-07 20:22:19 +00:00

105 lines
3.2 KiB
Dart

// Copyright 2013 The Flutter Authors. 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:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/pub_utils.dart';
import 'package:test/test.dart';
import '../mocks.dart';
import '../util.dart';
void main() {
late FileSystem fileSystem;
late Directory packagesDir;
late RecordingProcessRunner processRunner;
setUp(() {
fileSystem = MemoryFileSystem();
packagesDir = createPackagesDirectory(fileSystem: fileSystem);
processRunner = RecordingProcessRunner();
});
test('runs with Dart for a non-Flutter package by default', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir);
final MockPlatform platform = MockPlatform();
await runPubGet(package, processRunner, platform);
expect(
processRunner.recordedCalls,
orderedEquals(<ProcessCall>[
ProcessCall('dart', const <String>['pub', 'get'], package.path),
]));
});
test('runs with Flutter for a Flutter package by default', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir, isFlutter: true);
final MockPlatform platform = MockPlatform();
await runPubGet(package, processRunner, platform);
expect(
processRunner.recordedCalls,
orderedEquals(<ProcessCall>[
ProcessCall('flutter', const <String>['pub', 'get'], package.path),
]));
});
test('runs with Flutter for a Dart package when requested', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir);
final MockPlatform platform = MockPlatform();
await runPubGet(package, processRunner, platform, alwaysUseFlutter: true);
expect(
processRunner.recordedCalls,
orderedEquals(<ProcessCall>[
ProcessCall('flutter', const <String>['pub', 'get'], package.path),
]));
});
test('uses the correct Flutter command on Windows', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir, isFlutter: true);
final MockPlatform platform = MockPlatform(isWindows: true);
await runPubGet(package, processRunner, platform);
expect(
processRunner.recordedCalls,
orderedEquals(<ProcessCall>[
ProcessCall(
'flutter.bat', const <String>['pub', 'get'], package.path),
]));
});
test('reports success', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir);
final MockPlatform platform = MockPlatform();
final bool result = await runPubGet(package, processRunner, platform);
expect(result, true);
});
test('reports failure', () async {
final RepositoryPackage package =
createFakePackage('a_package', packagesDir);
final MockPlatform platform = MockPlatform();
processRunner.mockProcessesForExecutable['dart'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(exitCode: 1), <String>['pub', 'get'])
];
final bool result = await runPubGet(package, processRunner, platform);
expect(result, false);
});
}