blob: 208c28d52f1dda25d8b48f712c793725e864f5f1 [file] [log] [blame]
# Copyright 2016 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_library.gni")
import("//build/dart/toolchain.gni")
import("//topaz/runtime/dart/dart_kernel.gni")
# Defines a Dart test suite
#
# Parameters
#
# sources (required)
# The list of test files, which must be within source_dir.
#
# source_dir (optional)
# Directory containing the test sources. Defaults to "test".
# Note: this cannot be set to ".".
#
# deps (optional)
# List of labels for Dart libraries this suite depends on.
#
# disable_analysis (optional)
# Prevents analysis from being run on this target.
#
# Example of usage:
#
# dart_test("baz_test") {
# deps = [
# "//foo/baz",
# "//third_party/dart-pkg/pub/test",
# ]
# }
if (current_toolchain == dart_toolchain) {
template("dart_test") {
assert(defined(invoker.sources), "dart_test() requires 'sources' be defined")
if (defined(invoker.source_dir)) {
assert(invoker.source_dir != ".", "Cannot set source_dir to '.' because it breaks code coverage.")
}
_main_target_name = target_name
_library_target_name = "${target_name}_library"
_sources_dir = "test"
if (defined(invoker.source_dir)) {
_sources_dir = invoker.source_dir
}
dart_library(_library_target_name) {
forward_variables_from(invoker,
[
"deps",
"disable_analysis",
])
infer_package_name = true
source_dir = _sources_dir
sources = invoker.sources
}
_dot_packages_file = "$target_gen_dir/$_library_target_name.packages"
_fuchsia_tester_label = "//third_party/dart-pkg/git/flutter/packages/flutter_tools:fuchsia_tester($host_toolchain)"
_fuchsia_tester_out_dir =
get_label_info(_fuchsia_tester_label, "root_out_dir")
_fuchsia_tester_bin = "$_fuchsia_tester_out_dir/dart-tools/fuchsia_tester"
_flutter_shell_label =
"//third_party/flutter/shell/testing/($host_toolchain)"
_flutter_shell_out_dir = get_label_info(_flutter_shell_label, "root_out_dir")
_flutter_shell_bin = "$_flutter_shell_out_dir/flutter_tester"
_precompiled_kernel_target_names = []
_tests_json = []
_tests_filename = "$target_gen_dir/tests.json"
foreach(_source_file, invoker.sources) {
_source_path = "$_sources_dir/$_source_file"
_test_target = exec_script("//topaz/runtime/dart/gen_test_target_name.py",
["--file", _source_file],
"trim string")
if (_test_target != "") {
_test_target_name = "${_main_target_name}_${_test_target}"
_kernel_target_name = "${_test_target_name}_dill"
_bootstrap_target_name = "${_test_target_name}_bootstrap"
_bootstrap_file_name =
"${target_gen_dir}/${_bootstrap_target_name}.dart"
action(_bootstrap_target_name) {
script = "$root_out_dir/dart-tools/build_test_bootstrap"
outputs = [_bootstrap_file_name]
rebased_source = rebase_path(_source_path, target_gen_dir)
args = [
"--output",
rebase_path(_bootstrap_file_name),
"--test-name",
"$rebased_source",
]
deps = [
"//topaz/runtime/dart:build_test_bootstrap",
]
}
dart_kernel(_kernel_target_name) {
platform_name = "flutter_runner"
disable_analysis = true
main_dart = _bootstrap_file_name
args = []
# TODO(tvolkert): Change to flutter platform once libraries.json works
# in Fuchsia
# platform_deps = [
# "//third_party/flutter/lib/snapshot:strong_platform",
# ]
# platform_path = "$root_out_dir/flutter_patched_sdk"
platform_deps = [
"//topaz/runtime/flutter_runner/kernel:kernel_platform_files",
]
platform_path = "$root_out_dir/flutter_runner_patched_sdk"
sources = [ _bootstrap_file_name ]
non_dart_deps = [ ":$_bootstrap_target_name" ]
deps = [
":$_library_target_name",
"//third_party/dart-pkg/git/flutter/packages/flutter_test",
"//third_party/dart-pkg/pub/stream_channel",
"//third_party/dart-pkg/pub/test",
]
}
_precompiled_kernel_target_names += [":${_kernel_target_name}_kernel"]
_tests_json += [
{
source = rebase_path(_bootstrap_file_name)
dill = rebase_path("$target_gen_dir/${_kernel_target_name}_kernel.dil")
},
]
}
write_file(_tests_filename, _tests_json, "json")
}
action(_main_target_name) {
_invocation_file = "$target_gen_dir/$target_name"
script = "//topaz/runtime/dart/gen_test_invocation.py"
testonly = true
outputs = [ _invocation_file ]
inputs = [
_dot_packages_file,
_bootstrap_file_name,
_fuchsia_tester_bin,
_flutter_shell_bin,
_tests_filename,
]
args = [
"--out",
rebase_path(_invocation_file),
"--tests",
rebase_path(_tests_filename),
"--source-dir",
rebase_path(_sources_dir),
"--dot-packages",
rebase_path(_dot_packages_file),
"--test-runner",
rebase_path(_fuchsia_tester_bin),
"--flutter-shell",
rebase_path(_flutter_shell_bin),
"--icudtl",
rebase_path("//third_party/icu/common/icudtl.dat"),
"--sdk-root",
rebase_path("$root_out_dir/flutter_runner_patched_sdk"),
]
deps = [
":$_library_target_name",
":$_bootstrap_target_name",
":${_kernel_target_name}_kernel",
_flutter_shell_label,
_fuchsia_tester_label,
] + _precompiled_kernel_target_names
}
}
} else {
# Not the Dart toolchain.
template("dart_test") {
action(target_name) {
script = "//topaz/runtime/dart/gen_test_bundle_invocation.py"
testonly = true
not_needed(invoker, "*")
if (current_toolchain == host_toolchain) {
_invocation_file = "$root_out_dir/$target_name"
} else {
_invocation_file = "$target_gen_dir/$target_name"
}
outputs = [ _invocation_file ]
_dart_target_gen_dir =
get_label_info(":bogus($dart_toolchain)", "target_gen_dir")
_delegate_file = "$_dart_target_gen_dir/$target_name"
args = [
"--out",
rebase_path(_invocation_file),
"--test",
rebase_path(_delegate_file),
]
deps = [ ":$target_name($dart_toolchain)" ]
}
}
}