# 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/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") {
  _build_cfg = dart_default_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
  }
}
