# 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/components.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")

# Run all tests with:
# fx test //src/sys/build/tests
group("tests") {
  deps = [
    ":echo-integration-test",
    ":launcher-integration-tests",
    ":readfile-unittest",
    ":return_zero_package",
    ":twoplustwo-cpp-unittest",
    ":twoplustwo-rust-unittest",
  ]
  testonly = true
}

executable("return_zero") {
  sources = [ "return_zero.cc" ]
  testonly = true
}

fuchsia_component("return_zero_component") {
  manifest = "meta/return_zero.cmx"
  testonly = true
  deps = [ ":return_zero" ]
}

fuchsia_test_package("return_zero_package") {
  package_name = "return-zero-package"
  test_components = [ ":return_zero_component" ]
}

executable("twoplustwo_cpp") {
  sources = [ "two_plus_two.cc" ]
  testonly = true
  deps = [
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

fuchsia_unittest_package("twoplustwo-cpp-unittest") {
  deps = [ ":twoplustwo_cpp" ]
}

rustc_test("twoplustwo_rust") {
  source_root = "two_plus_two.rs"

  sources = [ "two_plus_two.rs" ]
}

fuchsia_unittest_package("twoplustwo-rust-unittest") {
  deps = [ ":twoplustwo_rust" ]
}

rustc_test("read_file_test") {
  source_root = "read_file.rs"

  sources = [ "read_file.rs" ]
}

resource("hello_world.txt") {
  sources = [ "hello_world.txt" ]
  outputs = [ "data/hello_world.txt" ]
}

fuchsia_unittest_package("readfile-unittest") {
  deps = [
    ":hello_world.txt",
    ":read_file_test",
  ]
}

rustc_test("echo_client_test") {
  source_root = "echo_client.rs"
  deps = [
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/testing/fidl:placeholders-rustc",
    "//third_party/rust_crates:anyhow",
  ]

  sources = [ "echo_client.rs" ]
}

fuchsia_test_component("echo-client-test") {
  manifest = "meta/echo_client_test.cmx"
  deps = [ ":echo_client_test" ]
}

fuchsia_test_package("echo-integration-test") {
  test_components = [
    ":echo-client-test",

    # Demonstrate that you can include multiple tests in the same package
    ":return_zero_component",
  ]
  deps = [ "//src/testing/fidl/echo_server_placeholder:echo_server" ]
  test_specs = {
    environments = [ emu_env ]
  }
}

group("launcher-integration-tests") {
  testonly = true
  deps = [
    ":launcher-integration-test",
    ":return-zero-component-named",
    ":return-zero-package-component-named",
    ":return-zero-package-named",
    ":return-zero-unnamed",
  ]
}

rustc_test("launcher_test") {
  source_root = "launcher.rs"
  deps = [
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/testing/fidl:placeholders-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:clap",
  ]

  sources = [ "launcher.rs" ]
}

fuchsia_package_with_single_component("return-zero-unnamed") {
  testonly = true
  manifest = "meta/return_zero.cmx"
  deps = [ ":return_zero" ]
}

fuchsia_package_with_single_component("return-zero-package-named") {
  testonly = true
  package_name = "return-zero"
  manifest = "meta/return_zero.cmx"
  deps = [ ":return_zero" ]
}

fuchsia_package_with_single_component("return-zero-component-named") {
  testonly = true
  component_name = "return-zero"
  manifest = "meta/return_zero.cmx"
  deps = [ ":return_zero" ]
}

fuchsia_package_with_single_component("return-zero-package-component-named") {
  testonly = true
  package_name = "return-zero-package-name"
  component_name = "return-zero-component-name"
  manifest = "meta/return_zero.cmx"
  deps = [ ":return_zero" ]
}

fuchsia_test_component("launcher-test") {
  manifest = "meta/launcher_test.cmx"
  deps = [ ":launcher_test" ]
}

fuchsia_test_package("launcher-integration-test") {
  # Demonstrate that `fuchsia_package_with_single_component` generates packages
  # with single components and those packages have the expected names. See the
  # launcher test binary to learn more.
  test_components = [ ":launcher-test" ]
}
