From 5201856805d61c941a82514283b97b69d5f8c4e2 Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Mon, 5 Dec 2022 18:27:21 -0800 Subject: [PATCH] Use file:/// style uris when passing platform to the compiler. (#116553) * Use file:/// style uris when passing platform to the compiler. * License header. * Use BufferLogger. * Don't unadvertently convert strings to regexes for matching purposes. * Fix formatting. * More formatting. --- .../lib/src/test/web_test_compiler.dart | 2 +- .../test/web_test_compiler_test.dart | 94 +++++++++++++++++++ .../test/src/fake_process_manager.dart | 12 ++- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 packages/flutter_tools/test/general.shard/test/web_test_compiler_test.dart diff --git a/packages/flutter_tools/lib/src/test/web_test_compiler.dart b/packages/flutter_tools/lib/src/test/web_test_compiler.dart index a175add76a14..ed584aa92bc1 100644 --- a/packages/flutter_tools/lib/src/test/web_test_compiler.dart +++ b/packages/flutter_tools/lib/src/test/web_test_compiler.dart @@ -123,7 +123,7 @@ class WebTestCompiler { initializeFromDill: cachedKernelPath, targetModel: TargetModel.dartdevc, extraFrontEndOptions: extraFrontEndOptions, - platformDill: platformDillPath, + platformDill: _fileSystem.file(platformDillPath).absolute.uri.toString(), dartDefines: buildInfo.dartDefines, librariesSpec: _artifacts.getHostArtifact(HostArtifact.flutterWebLibrariesJson).uri.toString(), packagesPath: buildInfo.packagesPath, diff --git a/packages/flutter_tools/test/general.shard/test/web_test_compiler_test.dart b/packages/flutter_tools/test/general.shard/test/web_test_compiler_test.dart new file mode 100644 index 000000000000..54f8be20c931 --- /dev/null +++ b/packages/flutter_tools/test/general.shard/test/web_test_compiler_test.dart @@ -0,0 +1,94 @@ +// 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:file/memory.dart'; +import 'package:flutter_tools/src/artifacts.dart'; +import 'package:flutter_tools/src/base/config.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/test/web_test_compiler.dart'; +import 'package:test/expect.dart'; + +import '../../src/context.dart'; + +void main() { + testUsingContext('web test compiler issues valid compile command', () async { + final BufferLogger logger = BufferLogger.test(); + final MemoryFileSystem fileSystem = MemoryFileSystem.test(); + fileSystem.file('project/test/fake_test.dart').createSync(recursive: true); + fileSystem.file('build/out').createSync(recursive: true); + fileSystem.file('build/build/out.sources').createSync(recursive: true); + fileSystem.file('build/build/out.json') + ..createSync() + ..writeAsStringSync('{}'); + fileSystem.file('build/build/out.map').createSync(); + fileSystem.file('build/build/out.metadata').createSync(); + final FakePlatform platform = FakePlatform( + environment: {}, + ); + final Config config = Config( + Config.kFlutterSettings, + fileSystem: fileSystem, + logger: logger, + platform: platform, + ); + final FakeProcessManager processManager = FakeProcessManager.list([ + FakeCommand(command: [ + 'Artifact.engineDartBinary.TargetPlatform.web_javascript', + '--disable-dart-dev', + 'Artifact.frontendServerSnapshotForEngineDartSdk.TargetPlatform.web_javascript', + '--sdk-root', + 'HostArtifact.flutterWebSdk/', + '--incremental', + '--target=dartdevc', + '--experimental-emit-debug-metadata', + '--output-dill', + 'build/out', + '--packages', + '.dart_tool/package_config.json', + '-Ddart.vm.profile=false', + '-Ddart.vm.product=false', + '--enable-asserts', + '--filesystem-root', + 'project/test', + '--filesystem-root', + 'build', + '--filesystem-scheme', + 'org-dartlang-app', + '--initialize-from-dill', + RegExp(r'^build\/(?:[a-z0-9]{32})\.cache\.dill$'), + '--platform', + 'file:///HostArtifact.webPlatformKernelFolder/ddc_outline_sound.dill', + '--verbosity=error', + '--sound-null-safety' + ], stdout: 'result abc\nline0\nline1\nabc\nabc build/out 0') + ]); + final WebTestCompiler compiler = WebTestCompiler( + logger: logger, + fileSystem: fileSystem, + platform: FakePlatform( + environment: {}, + ), + artifacts: Artifacts.test(), + processManager: processManager, + config: config, + ); + + const BuildInfo buildInfo = BuildInfo( + BuildMode.debug, + '', + treeShakeIcons: false, + ); + + await compiler.initialize( + projectDirectory: fileSystem.directory('project'), + testOutputDir: 'build', + testFiles: ['project/test/fake_test.dart'], + buildInfo: buildInfo, + ); + + expect(processManager.hasRemainingExpectations, isFalse); + }); +} diff --git a/packages/flutter_tools/test/src/fake_process_manager.dart b/packages/flutter_tools/test/src/fake_process_manager.dart index d45baba64378..fb87570c873c 100644 --- a/packages/flutter_tools/test/src/fake_process_manager.dart +++ b/packages/flutter_tools/test/src/fake_process_manager.dart @@ -39,7 +39,7 @@ class FakeCommand { /// The exact commands that must be matched for this [FakeCommand] to be /// considered correct. - final List command; + final List command; /// The exact working directory that must be matched for this [FakeCommand] to /// be considered correct. @@ -110,7 +110,15 @@ class FakeCommand { Map? environment, Encoding? encoding, ) { - expect(command, equals(this.command)); + expect(command.length, this.command.length); + for(int i = 0; i < command.length; i++) { + final Pattern expected = this.command[i]; + if (expected is String) { + expect(command[i], expected); + } else { + expect(command[i], matches(this.command[i])); + } + } if (this.workingDirectory != null) { expect(this.workingDirectory, workingDirectory); }