# 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.

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxb/36139.                         #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/test.gni")
import("//build/test/test_package.gni")

group("test") {
  testonly = true
  deps = [
    ":trace-vthread-test",
    ":trace-vthread-with-static-engine-test",
  ]
}

# Common pieces of the unittest.
source_set("test-common") {
  visibility = [ ":*" ]
  sources = [ "event_vthread_tests.cc" ]
  deps = [
    "//zircon/public/lib/async",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/trace",
    "//zircon/public/lib/trace-handler",
    "//zircon/public/lib/trace-reader",
    "//zircon/public/lib/trace-vthread",
    "//zircon/public/lib/unittest",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/trace-test-utils",
  ]
}

# The unittest for the default case of dynamically linked trace-engine.
test("trace-vthread-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
    }
  }
  deps = [
    ":test-common",
    "//zircon/public/lib/trace-engine",
  ]
}

# The unittest with a static trace-engine.
test("trace-vthread-with-static-engine-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
    }
  }
  deps = [
    ":test-common",
    "//zircon/public/lib/trace-engine-static",
  ]
}

unittest_package("trace-vthread-test-package") {
  package_name = "trace-vthread-test"
  deps = [ ":trace-vthread-test" ]

  tests = [
    {
      name = "trace-vthread-test"
      dest = "trace-vthread-test-test"
    },
  ]
}

unittest_package("trace-vthread-with-static-engine-test-package") {
  package_name = "trace-vthread-with-static-engine-test"
  deps = [ ":trace-vthread-with-static-engine-test" ]

  tests = [
    {
      name = "trace-vthread-with-static-engine-test"
      dest = "trace-vthread-with-static-engine-test-test"
    },
  ]
}
