compile_test.dart 2.22 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// 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);
25 26
    final String flutterWebSdkPath = artifacts.getArtifactPath(Artifact.flutterWebSdk);
    final String librariesPath = fs.path.join(flutterWebSdkPath, 'libraries.json');
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

    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',
      '-m',
    ])).called(1);
  }, overrides: <Type, Generator>{
    ProcessManager: () => mockProcessManager,
    Logger: () => mockLogger,
  });
}

class MockProcessManager extends Mock implements ProcessManager {}
53
class MockProcess extends Mock implements Process {}