// 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/base/file_system.dart';
import 'package:flutter_tools/src/build_runner/build_runner.dart';
import 'package:flutter_tools/src/codegen.dart';
import 'package:flutter_tools/src/compile.dart';
import 'package:mockito/mockito.dart';

import '../src/common.dart';
import '../src/context.dart';

void main() {
  group(CodeGeneratingKernelCompiler, () {
    final MockBuildRunner mockBuildRunner = MockBuildRunner();
    final MockFileSystem mockFileSystem = MockFileSystem();
    final MockFile packagesFile = MockFile();
    final MockFile dillFile = MockFile();
    final MockFile outputFile = MockFile();

    when(mockFileSystem.file('main.app.dill')).thenReturn(dillFile);
    when(mockFileSystem.file('.packages')).thenReturn(packagesFile);
    when(mockFileSystem.file('output.app.dill')).thenReturn(outputFile);
    when(packagesFile.exists()).thenAnswer((Invocation invocation) async => true);
    when(dillFile.exists()).thenAnswer((Invocation invocation) async => true);
    when(outputFile.exists()).thenAnswer((Invocation invocation) async => true);
    when(dillFile.readAsBytes()).thenAnswer((Invocation invocation) async => <int>[0, 1, 2, 3]);

    testUsingContext('delegates to build_runner', () async {
      const CodeGeneratingKernelCompiler kernelCompiler = CodeGeneratingKernelCompiler();
      when(mockBuildRunner.build(
        aot: anyNamed('aot'),
        extraFrontEndOptions: anyNamed('extraFrontEndOptions'),
        linkPlatformKernelIn: anyNamed('linkPlatformKernelIn'),
        mainPath: anyNamed('mainPath'),
        targetProductVm: anyNamed('targetProductVm'),
        trackWidgetCreation: anyNamed('trackWidgetCreation')
      )).thenAnswer((Invocation invocation) async {
        return CodeGenerationResult(fs.file('.packages'), fs.file('main.app.dill'));
      });
      final CompilerOutput buildResult = await kernelCompiler.compile(
        outputFilePath: 'output.app.dill',
      );
      expect(buildResult.outputFilename, 'output.app.dill');
      expect(buildResult.errorCount, 0);
      verify(outputFile.writeAsBytes(<int>[0, 1, 2, 3])).called(1);
    }, overrides: <Type, Generator>{
      CodeGenerator: () => mockBuildRunner,
      FileSystem: () => mockFileSystem,
    });
  });
}

class MockBuildRunner extends Mock implements BuildRunner {}
class MockFileSystem extends Mock implements FileSystem {}
class MockFile extends Mock implements File {}
