# Copyright 2020 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_build_config.gni")
import("//build/flutter/internal/flutter_dart_test_component.gni")

# Defines a component which runs tests in the dart test harness
#
# Bundles a set of `package:test` tests into a single Fuchsia component
# with generated helper code to invoke the tests appropriately. The resulting
# application can take Dart test arguments; pass --help to see full options.
#
# ```
# dart_library("lib") {
#   package_name = "my_library"
#   sources = [
#     "foo.dart",
#     "bar.dart"
#   ]
# }
#
# dart_test_component("my-test-component") {
#   manifest = "meta/my-test-component.cmx"
#   sources = [
#     "foo_test.dart",
#     "bar_test.dart",
#   ]
#
#   deps = [
#     ":lib",
#     "//third_party/dart-pkg/pub/test",
#   ]
# }
#
# fuchsia_test_package("my-integration-test") {
#   test_components = [ ":my-test-component" ]
# }
# ```
#
# Parameters
#
#   manifest (required)
#     The path to the component manifest
#     Type: path
#
#   sources (required)
#     The list of test sources. These sources must be within the test/ directory.
#     Type: List of paths
#
#   language_version (optional)
#     Specify the Dart language version to use for this test.
#     Defaults to "2.8".
#
#   component_name (optional)
#     The name of the compnonent to test.
#     Type: String
#     Default: target_name
#
#   build_cfg (optional)
#     Specifies the parameters for building the component.
#     See //build/dart/dart_build_config.gni for predefined configs.
#
#   package_root (optional)
#     Path to the directory hosting the library.
#     This is useful for generated content, and can be ignored otherwise.
#     Defaults to ".".
#
#  deps
#  visibility
#  non_dart_deps
template("dart_test_component") {
  # TODO(fxbug.dev/64126) use the default build config
  _build_cfg = dart_debug_build_cfg
  if (defined(invoker.build_cfg)) {
    _build_cfg = invoker.build_cfg
  }

  flutter_dart_test_component(target_name) {
    forward_variables_from(invoker, "*")

    build_cfg = _build_cfg
  }
}
