flutter/packages/flutter_tools/test/commands.shard/permeable/build_preview_test.dart
Christopher Fujino 8a31a3a284
Flutter preview device (#135639)
Fixes https://github.com/flutter/flutter/issues/130277

This PR does two things:

1. introduce a hidden `flutter build _preview` command, that will build a debug windows desktop app and copy it into the SDK's binary cache. This command is only intended to be run during packaging.
2. introduce a new device type, called `PreviewDevice`, which relies on the prebuilt desktop debug app from step 1, copies it into the target app's assets build folder, and then hot reloads their dart code into it.
2023-10-18 00:27:54 +00:00

65 lines
2.1 KiB
Dart

// 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 'package:args/command_runner.dart';
import 'package:file_testing/file_testing.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/build_preview.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import '../../src/common.dart';
import '../../src/context.dart';
import '../../src/test_flutter_command_runner.dart';
void main() {
Cache.disableLocking();
late Directory tempDir;
late BufferLogger logger;
final FileSystem fs = LocalFileSystemBlockingSetCurrentDirectory();
setUp(() {
tempDir = fs.systemTempDirectory.createTempSync('flutter_tools_packages_test.');
logger = BufferLogger.test();
});
tearDown(() {
tryToDelete(tempDir);
});
testUsingContext('flutter build _preview creates preview device', () async {
final String projectPath = await createProject(
tempDir,
arguments: <String>['--no-pub', '--template=app'],
);
final BuildPreviewCommand command = BuildPreviewCommand(
logger: logger,
verboseHelp: true,
fs: fs,
processUtils: globals.processUtils,
flutterRoot: Cache.flutterRoot!,
artifacts: globals.artifacts!,
);
final CommandRunner<void> runner = createTestCommandRunner(command);
await runner.run(<String>[
'_preview',
'--no-pub',
fs.path.join(projectPath, 'lib', 'main.dart'),
]);
expect(
fs
.directory(Cache.flutterRoot)
.childDirectory('bin')
.childDirectory('cache')
.childDirectory('artifacts')
.childDirectory('flutter_preview')
.childFile('flutter_preview.exe'),
exists,
);
}, skip: !const LocalPlatform().isWindows); // [intended] Flutter Preview only supported on Windows currently
}