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

test("trace-reader-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 = [
    "file_reader_tests.cc",
    "reader_tests.cc",
    "records_tests.cc",
  ]
  deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/trace-engine-headers-for-reader",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/trace-reader",
  ]
  if (is_fuchsia) {
    deps += [
      "//zircon/public/lib/fdio",
      "//zircon/public/lib/zx",
    ]
  }
}

group("test") {
  testonly = true
  deps = [ ":trace-reader-test" ]
}

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

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