# 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/test.gni")
import("//src/sys/build/fuchsia_unittest_package.gni")

group("tests") {
  testonly = true
  deps = [
    ":fit($host_toolchain)",
    ":fit-test-pkg",
    ":fit-unittest($host_toolchain)",
    ":fit-unittest-pkg",
  ]
}

test("fit-unittest") {
  output_name = "fit-unittest-test"
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [ "thread_checker_tests.cc" ]
  deps = [
    "//sdk/lib/fit",
    "//zircon/public/lib/zxtest",
  ]
  configs += [ ":shadow" ]
  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }
}

# TODO: Convert these to zxtest and move them into the test above.
test("fit") {
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [
    "defer_tests.cc",
    "examples/function_example1.cc",
    "examples/function_example2.cc",
    "function_examples.cc",
    "function_tests.cc",
    "function_traits_tests.cc",
    "nullable_tests.cc",
    "thread_checker_tests.cc",
    "traits_tests.cc",
    "utility_internal_tests.cc",
  ]
  deps = [
    "//sdk/lib/fit",
    "//zircon/public/lib/zxtest",
  ]
  configs += [ ":shadow" ]
  if (is_fuchsia) {
    deps += [ "//sdk/lib/fdio" ]
  }

  # TODO(fxbug.dev/48668): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

config("shadow") {
  # chromium uses this library, and enables the following flag,
  # so these tests should work with this flag enabled
  cflags_cc = [ "-Wshadow" ]
}

fuchsia_unittest_package("fit-test-pkg") {
  package_name = "fit"
  deps = [ ":fit" ]
}

fuchsia_unittest_package("fit-unittest-pkg") {
  package_name = "fit-unittest-test"
  deps = [ ":fit-unittest" ]
}
