# 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") {
  if (defined(invoker.build_cfg)) {
    _build_cfg = invoker.build_cfg
  } else {
    _build_cfg = dart_default_build_cfg
  }

  flutter_dart_test_component(target_name) {
    forward_variables_from(invoker, "*", [ "build_cfg" ])

    build_cfg = _build_cfg

    # Add test shard that exposes the suite protocol from test component.
    if (get_path_info(invoker.manifest, "extension") == "cml") {
      test_runtime_shard = "//build/dart/meta/test_runtime.shard.cml"
    }
  }
}
