# 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"

  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_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/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") {
  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",
    "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",
  ]
}
