| # Copyright 2022 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/components.gni") |
| import("//build/dart/config.gni") |
| |
| # This template provides a way to wrap a Dart test component in a Rust component |
| # parent, using Rust RealmBuilder APIs to route capabilities to the Dart test. |
| # Fuchsia's test manager supports Component Framework v2 ELF binaries (in C++ |
| # and Rust) but does not yet support direct execution of Dart-based test |
| # components. When the upcoming Dart Test Runner is fully supported, this |
| # wrapper will no longer be needed. |
| # |
| # Arguments: |
| # * dart_test_component_name (required) - The target_name from |
| # `dart_test_component("target_name")`. |
| # * component_name (optional) - The target_name to be used by the generated |
| # fuchsia_component("target_name"). If not provided, the template |
| # target_name is used by default. |
| # * manifest (optional) - The path to the wrapper component manifest. If not |
| # provided, it is assumed to be the relative path: |
| # `meta/${wrapper_component_name}.cml` |
| # * wrapper_binary (optional) - The name of the wrapper binary. If not |
| # provided, it is assumed to be the same as the `wrapper_component_name` |
| # |
| # Example: |
| # import("//src/dart/testing/dart_test_wrapper_component.gni") |
| # |
| # dart_test_component("my-dart-test-component") { |
| # manifest = "meta/my-dart-tests.cml" |
| # null_safe = true |
| # # dart_test_component sources are implicitly found in the `test` subdirectory. |
| # sources = [ "my_dart_tests.dart" ] |
| # deps = [ ... ] |
| # } |
| # |
| # dart_test_wrapper_component("my_test_realm") { |
| # dart_test_component_name = "my-dart-test-component" |
| # } |
| # |
| # fuchsia_test_package("my_dart_test_package") { |
| # test_components = [ ":my_test_realm" ] |
| # deps = [ ":my-dart-test-component" ] |
| # } |
| template("dart_test_wrapper_component") { |
| assert( |
| defined(invoker.dart_test_component_name), |
| "The `dart_test_component_name` argument was missing when calling dart_test_wrapper_component($target_name)") |
| dart_test_component_name = invoker.dart_test_component_name |
| |
| wrapper_component_name = target_name |
| if (defined(invoker.component_name)) { |
| wrapper_component_name = invoker.component_name |
| } |
| |
| wrapper_component_manifest = "meta/${wrapper_component_name}.cml" |
| if (defined(invoker.manifest)) { |
| wrapper_component_manifest = invoker.manifest |
| } |
| |
| wrapper_binary = wrapper_component_name |
| if (defined(invoker.wrapper_binary)) { |
| wrapper_binary = invoker.wrapper_binary |
| } |
| |
| wrapper_dir = "//src/dart/testing" |
| |
| config("dart_runner_rust_cfg") { |
| if (dart_default_build_cfg.is_aot) { |
| rustflags = [ "--cfg=use_dart_aot_runner" ] |
| } |
| } |
| |
| config("${wrapper_component_name}_env") { |
| rustenv = [ "DART_TEST_COMPONENT_NAME=${dart_test_component_name}" ] |
| } |
| |
| rustc_test("${wrapper_binary}_bin") { |
| output_name = wrapper_binary |
| source_root = "${wrapper_dir}/dart_test_wrapper_realm.rs" |
| deps = [ |
| "//examples/fidl/fuchsia.examples:fuchsia.examples-rustc", |
| "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt-rustc", |
| "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl-rustc", |
| "//sdk/fidl/fuchsia.feedback:fuchsia.feedback-rustc", |
| "//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol-rustc", |
| "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc", |
| "//sdk/fidl/fuchsia.io:fuchsia.io-rustc", |
| "//sdk/fidl/fuchsia.logger:fuchsia.logger-rustc", |
| "//sdk/fidl/fuchsia.modular:fuchsia.modular-rustc", |
| "//sdk/fidl/fuchsia.modular.internal:fuchsia.modular.internal-rustc", |
| "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket-rustc", |
| "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle-rustc", |
| "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc", |
| "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc", |
| "//sdk/fidl/fuchsia.tracing.provider:fuchsia.tracing.provider-rustc", |
| "//sdk/fidl/fuchsia.ui.policy:fuchsia.ui.policy-rustc", |
| "//src/lib/fidl/rust/fidl", |
| "//src/lib/fuchsia", |
| "//src/lib/fuchsia-async", |
| "//src/lib/fuchsia-component", |
| "//src/lib/fuchsia-component-test", |
| "//src/lib/storage/vfs/rust:vfs", |
| "//src/sys/lib/cm_rust", |
| "//src/sys/lib/component-events", |
| "//third_party/rust_crates:anyhow", |
| "//third_party/rust_crates:futures", |
| "//third_party/rust_crates:tracing", |
| ] |
| sources = [ "${wrapper_dir}/dart_test_wrapper_realm.rs" ] |
| configs += [ |
| ":dart_runner_rust_cfg", |
| ":${wrapper_component_name}_env", |
| ] |
| disable_clippy = true # TODO(fxbug.dev/86506): clippy needs env vars |
| } |
| |
| fuchsia_component(wrapper_component_name) { |
| testonly = true |
| manifest = wrapper_component_manifest |
| deps = [ ":${wrapper_binary}_bin" ] |
| } |
| } |