blob: f1f44267856ff5b2b859666d54bb3d00b1fc8bb6 [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.
import 'dart:async';
import 'package:file/memory.dart';
import 'package:flutter_tools/src/application_package.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/build_info.dart';
import 'package:flutter_tools/src/build_system/build_system.dart';
import 'package:flutter_tools/src/bundle.dart';
import 'package:flutter_tools/src/bundle_builder.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/device.dart';
import 'package:flutter_tools/src/preview_device.dart';
import 'package:flutter_tools/src/project.dart';
import 'package:meta/meta.dart';
import 'package:test/fake.dart';
import '../src/common.dart';
import '../src/context.dart';
void main() {
testWithoutContext('PreviewDevice defaults', () async {
final PreviewDevice device = PreviewDevice(
fileSystem: MemoryFileSystem.test(),
processManager: FakeProcessManager.any(),
logger: BufferLogger.test(),
platform: FakePlatform(),
);
expect(await device.isLocalEmulator, false);
expect(device.name, 'preview');
expect(await device.sdkNameAndVersion, 'preview');
expect(await device.targetPlatform, TargetPlatform.tester);
expect(device.category, Category.desktop);
expect(device.ephemeral, false);
expect(device.id, 'preview');
expect(device.isSupported(), true);
expect(device.isSupportedForProject(FakeFlutterProject()), true);
expect(await device.isLatestBuildInstalled(FakeApplicationPackage()), false);
expect(await device.isAppInstalled(FakeApplicationPackage()), false);
expect(await device.uninstallApp(FakeApplicationPackage()), true);
});
testUsingContext('Can build a simulator app', () async {
Cache.flutterRoot = '';
final Completer<void> completer = Completer<void>();
final FileSystem fileSystem = MemoryFileSystem.test();
final BufferLogger logger = BufferLogger.test();
final PreviewDevice device = PreviewDevice(
fileSystem: fileSystem,
processManager: FakeProcessManager.list(<FakeCommand>[
FakeCommand(
command: const <String>[
'/.tmp_rand0/flutter_preview.rand0/splash',
],
stdout: 'The Dart VM service is listening on http://127.0.0.1:64494/fZ_B2N6JRwY=/\n',
completer: completer,
),
]),
logger: logger,
platform: FakePlatform(),
builderFactory: () => FakeBundleBuilder(fileSystem),
);
fileSystem
.directory('artifacts_temp')
.childDirectory('Debug')
.createSync(recursive: true);
final LaunchResult result = await device.startApp(
FakeApplicationPackage(),
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
);
expect(result.started, true);
expect(result.observatoryUri, Uri.parse('http://127.0.0.1:64494/fZ_B2N6JRwY=/'));
});
}
class FakeFlutterProject extends Fake implements FlutterProject { }
class FakeApplicationPackage extends Fake implements ApplicationPackage { }
class FakeBundleBuilder extends Fake implements BundleBuilder {
FakeBundleBuilder(this.fileSystem);
final FileSystem fileSystem;
@override
Future<void> build({
required TargetPlatform platform,
required BuildInfo buildInfo,
FlutterProject? project,
String? mainPath,
String manifestPath = defaultManifestPath,
String? applicationKernelFilePath,
String? depfilePath,
String? assetDirPath,
@visibleForTesting BuildSystem? buildSystem
}) async {
final Directory assetDirectory = fileSystem
.directory(assetDirPath)
.childDirectory('flutter_assets')
..createSync(recursive: true);
assetDirectory.childFile('kernel_blob.bin').createSync();
}
}