# Copyright 2019 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/package.gni")
import("//tools/fidl/measure-tape/measure_tape.gni")

measure_tape("measure_tape_for_case") {
  fidls = [ "//sdk/fidl/fuchsia.test" ]
  target_type = "fuchsia.test/Case"
  target_binding = "hlcpp"
}

source_set("test_suite_lib") {
  sources = [
    "test_suite.cc",
    "test_suite.h",
  ]

  public_deps = [
    ":measure_tape_for_case",
    "//sdk/fidl/fuchsia.test",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("passing-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "passing_test_example.cc" ]
}

executable("no-onfinished-after-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "no_onfinished_after_test_example.cc" ]
}

executable("disabled-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "disabled_test_example.cc" ]
}

executable("failing-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "failing_test_example.cc" ]
}

executable("incomplete-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
  sources = [ "incomplete_test_example.cc" ]
}

executable("invalid-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
  sources = [ "invalid_test_example.cc" ]
}

executable("no-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "no_test_example.cc" ]
}

executable("huge-test-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "huge_test_example.cc" ]
}

executable("get-tests-hangs-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "get_tests_hangs_example.cc" ]
}

executable("get-tests-closes-channel-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "get_tests_closes_channel_example.cc" ]
}

executable("run-hangs-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "run_hangs_example.cc" ]
}

executable("run-closes-channel-example") {
  deps = [
    ":test_suite_lib",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  sources = [ "run_closes_channel_example.cc" ]
}

group("all_bins") {
  public_deps = [
    ":disabled-test-example",
    ":failing-test-example",
    ":get-tests-closes-channel-example",
    ":get-tests-hangs-example",
    ":huge-test-example",
    ":incomplete-test-example",
    ":invalid-test-example",
    ":no-onfinished-after-test-example",
    ":no-test-example",
    ":passing-test-example",
    ":run-closes-channel-example",
    ":run-hangs-example",
    "rust:all_bins",
    "//examples/components/routing/echo_server",
  ]
}

package("example-tests") {
  testonly = true
  deps = [ ":all_bins" ]

  binaries = [
    {
      name = "passing-test-example"
    },
    {
      name = "no-test-example"
    },
    {
      name = "huge-test-example"
    },
    {
      name = "disabled-test-example"
    },
    {
      name = "failing-test-example"
    },
    {
      name = "incomplete-test-example"
    },
    {
      name = "get-tests-hangs-example"
    },
    {
      name = "run-hangs-example"
    },
    {
      name = "no-onfinished-after-test-example"
    },
    {
      name = "get-tests-closes-channel-example"
    },
    {
      name = "run-closes-channel-example"
    },
    {
      name = "invalid-test-example"
    },
    {
      name = "echo_test_client"
    },
    {
      name = "echo_server"
    },
  ]

  tests = [
    {
      name = "echo_test_realm"
    },
  ]

  meta = [
    {
      path = "meta/passing-test-example.cmx"
      dest = "passing-test-example.cmx"
    },
    {
      path = "meta/no-onfinished-after-test-example.cml"
      dest = "no-onfinished-after-test-example.cm"
    },
    {
      path = "meta/passing-test-example.cml"
      dest = "passing-test-example.cm"
    },
    {
      path = "meta/no-test-example.cml"
      dest = "no-test-example.cm"
    },
    {
      path = "meta/huge-test-example.cml"
      dest = "huge-test-example.cm"
    },
    {
      path = "meta/disabled-test-example.cml"
      dest = "disabled-test-example.cm"
    },
    {
      path = "meta/failing-test-example.cml"
      dest = "failing-test-example.cm"
    },
    {
      path = "meta/incomplete-test-example.cml"
      dest = "incomplete-test-example.cm"
    },
    {
      path = "meta/get-tests-hangs-example.cmx"
      dest = "get-tests-hangs-example.cmx"
    },
    {
      path = "meta/get-tests-closes-channel-example.cmx"
      dest = "get-tests-closes-channel-example.cmx"
    },
    {
      path = "meta/run-closes-channel-example.cmx"
      dest = "run-closes-channel-example.cmx"
    },
    {
      path = "meta/run-hangs-example.cmx"
      dest = "run-hangs-example.cmx"
    },
    {
      path = "meta/invalid-test-example.cml"
      dest = "invalid-test-example.cm"
    },
    {
      path = "meta/echo_test_realm.cml"
      dest = "echo_test_realm.cm"
    },
    {
      path = "meta/echo_test_client.cml"
      dest = "echo_test_client.cm"
    },
    {
      path = rebase_path(
              "//examples/components/routing/echo_server/meta/echo_server.cml")
      dest = "echo_server.cm"
    },
  ]
}

group("tests") {
  testonly = true
  deps = [ ":example-tests" ]
}
