# 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 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")

import("//build/fuzzing/fuzzer.gni")

group("test") {
  testonly = true
  deps = [
    ":kernel-cmdline",
    ":kernel-cmdline-fuzzer",
  ]
}

test("kernel-cmdline") {
  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 = [ "kernel_cmdline_test.cc" ]
  deps = [
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/kcmdline",
    "//zircon/public/lib/zxtest",
  ]
}

fuzzer("kernel-cmdline-fuzzer") {
  sources = [ "kernel_cmdline_fuzztest.cc" ]
  deps = [ "//zircon/public/lib/kcmdline" ]
}

unittest_package("kernel-cmdline-package") {
  package_name = "kernel-cmdline"
  deps = [ ":kernel-cmdline" ]

  tests = [
    {
      name = "kernel-cmdline"
      dest = "kernel-cmdline-test"
    },
  ]
}
