# 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)",
    "rewrite:tests",
    "scripts:tests",
  ]
}

## Production code

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

  null_safe = true

  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_manifest_list.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/collection",
    "//third_party/dart-pkg/pub/io",
    "//third_party/dart-pkg/pub/meta",
    "//third_party/dart-pkg/pub/path",
    "//third_party/dart-pkg/pub/pedantic",
  ]

  non_dart_deps = [ "scripts:install($host_toolchain)" ]
}

## Tests

dart_test("test_runner_test") {
  null_safe = true

  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") {
  null_safe = true

  sources = [
    "args_test.dart",
    "cmd_test.dart",
    "fake_fx_env.dart",
    "helper_test.dart",
    "helpers.dart",
    "output_formatter_test.dart",
    "output_test.dart",
    "package_manifest_list_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",
  ]
}
