// Copyright 2019 The Chromium 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:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/globals.dart'; import 'package:flutter_tools/src/web/compile.dart'; import 'package:mockito/mockito.dart'; import 'package:process/process.dart'; import '../src/context.dart'; void main() { final MockProcessManager mockProcessManager = MockProcessManager(); final MockProcess mockProcess = MockProcess(); final BufferLogger mockLogger = BufferLogger(); testUsingContext('invokes dart2js with correct arguments', () async { const WebCompiler webCompiler = WebCompiler(); final String engineDartPath = artifacts.getArtifactPath(Artifact.engineDartBinary); final String dart2jsPath = artifacts.getArtifactPath(Artifact.dart2jsSnapshot); final String flutterPatchedSdkPath = artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath); final String librariesPath = fs.path.join(flutterPatchedSdkPath, 'libraries.json'); when(mockProcess.stdout).thenAnswer((Invocation invocation) => const Stream<List<int>>.empty()); when(mockProcess.stderr).thenAnswer((Invocation invocation) => const Stream<List<int>>.empty()); when(mockProcess.exitCode).thenAnswer((Invocation invocation) async => 0); when(mockProcessManager.start(any)).thenAnswer((Invocation invocation) async => mockProcess); when(mockProcessManager.canRun(engineDartPath)).thenReturn(true); await webCompiler.compile(target: 'lib/main.dart'); final String outputPath = fs.path.join('build', 'web', 'main.dart.js'); verify(mockProcessManager.start(<String>[ engineDartPath, dart2jsPath, 'lib/main.dart', '-o', outputPath, '--libraries-spec=$librariesPath', '--platform-binaries=$flutterPatchedSdkPath', '-m', ])).called(1); }, overrides: <Type, Generator>{ ProcessManager: () => mockProcessManager, Logger: () => mockLogger, }); } class MockProcessManager extends Mock implements ProcessManager {} class MockProcess extends Mock implements Process {}