| # 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/python/python_binary.gni") |
| import("//build/testing/host_test.gni") |
| import("//build/testing/host_test_data.gni") |
| |
| # Declares a host-side python test. |
| # |
| # Example |
| # |
| # ``` |
| # python_host_test("my_host_test") { |
| # main_source = "my_host_test.py" |
| # sources = [ |
| # "test_helpers_foo.py", |
| # "test_helpers_bar.py", |
| # ] |
| # libraries = [ |
| # "//path/to/foo:lib", |
| # "//path/to/bar:lib", |
| # ] |
| # extra_args = [ "--a_very_useful_flag" ] |
| # } |
| # ``` |
| # |
| # Parameters |
| # |
| # main_source (required) |
| # The .py file that will be interpreted. |
| # Type: path |
| # |
| # sources (optional) |
| # Other files that are used in the test. |
| # Type: list(path) |
| # Default: empty list |
| # |
| # libraries (optional) |
| # Paths to python_libraries this test imports. |
| # Type: list(string) |
| # Default: empty list |
| # |
| # test_dir (optional) |
| # Path to where the test executes. |
| # Type: string |
| # Default: "${root_out_dir}/test_data/${target_dir}" |
| # |
| # extra_args (optional) |
| # Additional arguments to pass to the test. |
| # Type: list(string) |
| # |
| # deps |
| # environments |
| # visibility |
| template("python_host_test") { |
| assert(defined(invoker.main_source), "main_source is required") |
| |
| _python_binary_name = "${target_name}.pyz" |
| _python_binary_target = "${target_name}_python_binary" |
| python_binary(_python_binary_target) { |
| forward_variables_from(invoker, |
| [ |
| "main_source", |
| "sources", |
| ]) |
| |
| testonly = true |
| visibility = [ ":*" ] |
| |
| output_name = _python_binary_name |
| main_callable = "unittest.main" |
| |
| if (defined(invoker.libraries)) { |
| deps = invoker.libraries |
| } |
| } |
| |
| _target_dir = get_label_info(target_name, "dir") |
| _test_dir = "${root_out_dir}/test_data/${_target_dir}" |
| if (defined(invoker.test_dir)) { |
| _test_dir = invoker.test_dir |
| } |
| |
| _host_test_data_target = "${target_name}_test_data" |
| host_test_data(_host_test_data_target) { |
| testonly = true |
| visibility = [ ":*" ] |
| |
| sources = [ get_label_info(":${_python_binary_target}", "target_out_dir") + |
| "/${_python_binary_name}" ] |
| outputs = [ "${_test_dir}/${_python_binary_name}" ] |
| deps = [ ":${_python_binary_target}" ] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| } |
| |
| host_test(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "environments", |
| "visibility", |
| ]) |
| |
| binary_path = python_exe_src |
| args = |
| [ rebase_path("${_test_dir}/${_python_binary_name}", root_build_dir) ] |
| if (defined(invoker.extra_args)) { |
| args += invoker.extra_args |
| } |
| deps = [ |
| ":${_host_test_data_target}", |
| "//build/python:interpreter", |
| ] |
| } |
| } |