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

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

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

import("//build/test.gni")
import("//build/testing/bootfs_test.gni")
import("//src/sys/build/fuchsia_unittest_package.gni")

group("psutils") {
  testonly = true
  deps = [
    ":handles",
    ":ps",
  ]
}

test("ps") {
  output_name = "ps-test"
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "ps_test.c" ]
  deps = [
    "//sdk/lib/fdio",
    "//src/sys/bin/psutils:ps_internal",
    "//zircon/public/lib/pretty",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/task-utils",
  ]
}

test("handles") {
  output_name = "handles-test"
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "handles_test.cc" ]
  deps = [
    "//sdk/lib/fdio",
    "//src/sys/bin/psutils:handles_internal",
    "//zircon/public/lib/pretty",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/task-utils",
  ]
}

bootfs_test("ps-bootfs-test") {
  name = "ps-test"
  deps = [ ":ps" ]
}

fuchsia_unittest_package("handles-test-pkg") {
  package_name = "handles-test"
  executable_path = "test/handles-test"
  deps = [ ":handles" ]
}

group("tests") {
  testonly = true
  deps = [ ":handles-test-pkg" ]
}
