# Copyright 2019 The Fuchsia 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("//build/dart/dart_tool.gni")
import("//build/dart/test.gni")
import("//build/testing/host_test_data.gni")

group("tests") {
  testonly = true

  deps = [
    ":fxtest_tests($host_toolchain)",
    ":test_runner_test($host_toolchain)",
  ]
}

## Production code

# Main executable target.
dart_tool("fxtest") {
  package_name = "fxtest"
  main_dart = "bin/main.dart"

  sources = [
    "analytics_reporter.dart",
    "arg_parser.dart",
    "checklist.dart",
    "cmd.dart",
    "cmd_cli.dart",
    "command_tokens.dart",
    "constants.dart",
    "exceptions.dart",
    "execution_handle.dart",
    "exit_code.dart",
    "fxtest.dart",
    "matching/comparer.dart",
    "matching/comparison_result.dart",
    "matching/matching.dart",
    "matching/single_test_matcher.dart",
    "matching/test_attribute_matching.dart",
    "output/output.dart",
    "output/output_buffer.dart",
    "output/output_formatter.dart",
    "package_repository.dart",
    "package_url.dart",
    "rebuilder.dart",
    "test_arguments.dart",
    "test_bundle.dart",
    "test_definition.dart",
    "test_event.dart",
    "test_names_collector.dart",
    "test_runner.dart",
    "tests_config.dart",
    "tests_manifest_reader.dart",
    "utils.dart",
  ]
  deps = [
    "//scripts/fxutils",
    "//third_party/dart-pkg/pub/args",
    "//third_party/dart-pkg/pub/edit_distance",
    "//third_party/dart-pkg/pub/io",
    "//third_party/dart-pkg/pub/meta",
    "//third_party/dart-pkg/pub/path",
    "//third_party/dart-pkg/pub/pedantic",
  ]
}

## Tests

dart_test("test_runner_test") {
  sources = [ "test_runner_test.dart" ]

  deps = [
    ":fxtest_dart_library",
    "//scripts/fxutils",
    "//third_party/dart-pkg/pub/pedantic",
    "//third_party/dart-pkg/pub/test",
  ]
}

dart_test("fxtest_tests") {
  sources = [
    "args_test.dart",
    "fake_fx_env.dart",
    "helper_test.dart",
    "helpers.dart",
    "output_formatter_test.dart",
    "output_test.dart",
    "package_repository_test.dart",
    "parsing_test.dart",
    "process_output_test.dart",
    "setup_test.dart",
    "test_bundle_test.dart",
    "utils_test.dart",
  ]

  deps = [
    ":fxtest_dart_library",
    "//scripts/fxutils",
    "//third_party/dart-pkg/pub/args",
    "//third_party/dart-pkg/pub/async",
    "//third_party/dart-pkg/pub/io",
    "//third_party/dart-pkg/pub/meta",
    "//third_party/dart-pkg/pub/mockito",
    "//third_party/dart-pkg/pub/path",
    "//third_party/dart-pkg/pub/test",
  ]
}
