blob: 7688ca80d51740c353c6e2f5ff594634bece2915 [file] [log] [blame]
// Copyright 2014 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.
// @dart = 2.8
import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/commands/drive.dart';
import 'package:flutter_tools/src/dart/pub.dart';
import 'package:flutter_tools/src/device.dart';
import 'package:test/fake.dart';
import '../../src/common.dart';
import '../../src/context.dart';
import '../../src/test_flutter_command_runner.dart';
void main() {
FileSystem fileSystem;
BufferLogger logger;
Platform platform;
setUp(() {
fileSystem = MemoryFileSystem.test();
logger = BufferLogger.test();
platform = FakePlatform();
});
setUpAll(() {
Cache.disableLocking();
});
tearDownAll(() {
Cache.enableLocking();
});
testWithoutContext('drive --screenshot writes to expected output', () async {
final Device screenshotDevice = ScreenshotDevice();
await takeScreenshot(
screenshotDevice,
'drive_screenshots',
fileSystem,
logger,
FileSystemUtils(
fileSystem: fileSystem,
platform: platform,
),
);
expect(logger.statusText, contains('Screenshot written to drive_screenshots/drive_01.png'));
});
testWithoutContext('drive --screenshot errors but does not fail if screenshot fails', () async {
final Device screenshotDevice = ScreenshotDevice();
fileSystem.file('drive_screenshots').createSync();
await takeScreenshot(
screenshotDevice,
'drive_screenshots',
fileSystem,
logger,
FileSystemUtils(
fileSystem: fileSystem,
platform: platform,
),
);
expect(logger.statusText, isEmpty);
expect(logger.errorText, contains('Error taking screenshot: FileSystemException: Not a directory'));
});
testUsingContext('shouldRunPub is true unless user specifies --no-pub', () async {
final DriveCommand command = DriveCommand(fileSystem: fileSystem, logger: logger, platform: platform);
fileSystem.file('lib/main.dart').createSync(recursive: true);
fileSystem.file('test_driver/main_test.dart').createSync(recursive: true);
fileSystem.file('pubspec.yaml').createSync();
try {
await createTestCommandRunner(command).run(const <String>['drive', '--no-pub']);
} on Exception {
// Expected to throw
}
expect(command.shouldRunPub, false);
try {
await createTestCommandRunner(command).run(const <String>['drive']);
} on Exception {
// Expected to throw
}
expect(command.shouldRunPub, true);
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Pub: () => FakePub(),
});
}
// Unfortunately Device, despite not being immutable, has an `operator ==`.
// Until we fix that, we have to also ignore related lints here.
// ignore: avoid_implementing_value_types
class ScreenshotDevice extends Fake implements Device {
@override
Future<void> takeScreenshot(File outputFile) async {}
}
class FakePub extends Fake implements Pub {
@override
Future<void> get({
PubContext context,
String directory,
bool skipIfAbsent = false,
bool upgrade = false,
bool offline = false,
bool generateSyntheticPackage = false,
String flutterRootOverride,
bool checkUpToDate = false,
bool shouldSkipThirdPartyGenerator = true,
bool printProgress = true,
}) async { }
}