// 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_system/build_system.dart';
import 'package:flutter_tools/src/build_system/exceptions.dart';

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

void main() {
  test('Exceptions', () {
    final MissingInputException missingInputException = MissingInputException(
        <File>[fs.file('foo'), fs.file('bar')], 'example');
    final CycleException cycleException = CycleException(<Target>{
      TestTarget()..name = 'foo',
      TestTarget()..name = 'bar',
    });
    final InvalidPatternException invalidPatternException = InvalidPatternException(
      'ABC'
    );
    final MissingOutputException missingOutputException = MissingOutputException(
      <File>[ fs.file('foo'), fs.file('bar') ],
      'example',
    );
    final MisplacedOutputException misplacedOutputException = MisplacedOutputException(
      'foo',
      'example',
    );
    final MissingDefineException missingDefineException = MissingDefineException(
      'foobar',
      'example',
    );

    expect(
        missingInputException.toString(),
        'foo, bar were declared as an inputs, '
        'but did not exist. Check the definition of target:example for errors');
    expect(
        cycleException.toString(),
        'Dependency cycle detected in build: foo -> bar',
    );
    expect(
        invalidPatternException.toString(),
        'The pattern "ABC" is not valid',
    );
    expect(
        missingOutputException.toString(),
        'foo, bar were declared as outputs, but were not generated by the '
        'action. Check the definition of target:example for errors',
    );
    expect(
        misplacedOutputException.toString(),
        'Target example produced an output at foo which is outside of the '
        'current build or project directory',
    );
    expect(
        missingDefineException.toString(),
        'Target example required define foobar but it was not provided',
    );
  });
}

class TestTarget extends Target {
  TestTarget([this._build]);

  final Future<void> Function(Environment environment) _build;

  @override
  Future<void> build(Environment environment) => _build(environment);

  @override
  List<Target> dependencies = <Target>[];

  @override
  List<Source> inputs = <Source>[];

  @override
  String name = 'test';

  @override
  List<Source> outputs = <Source>[];
}
