# 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("//build/test/test_package.gni")

test_package("bugreport_tests") {
  tests = [
    {
      name = "bugreport_unittest"
    },
    {
      name = "bugreport_integration_test"
    },
    {
      name = "command_line_options_unittest"
    },
  ]

  deps = [
    ":bugreport_integration_test",
    ":bugreport_unittest",
    ":command_line_options_unittest",
  ]
}

executable("bugreport_unittest") {
  testonly = true

  sources = [
    "bug_reporter_unittest.cc",
    "stub_feedback_data_provider.cc",
    "stub_feedback_data_provider.h",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.feedback",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/developer/bugreport:bug_report_schema",
    "//src/developer/bugreport:src",
    "//src/lib/files",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/zx",
  ]
}

executable("bugreport_integration_test") {
  testonly = true

  sources = [
    "bug_reporter_integration_test.cc",
  ]

  deps = [
    "//src/developer/bugreport:bug_report_schema",
    "//src/developer/bugreport:src",
    "//src/lib/files",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
    "//third_party/rapidjson",
  ]
}

executable("command_line_options_unittest") {
  testonly = true

  sources = [
    "command_line_options_unittest.cc",
  ]

  deps = [
    "//src/developer/bugreport:command_line_options",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

if (current_toolchain == host_toolchain) {
  group("bugreport_client_tests") {
    testonly = true

    deps = [
      ":bugreport_handler_unittest",
    ]
  }

  test("bugreport_handler_unittest") {
    sources = [
      "bug_report_handler_unittest.cc",
    ]

    deps = [
      "//src/developer/bugreport:client_lib",
      "//src/lib/fxl/test:gtest_main",
      "//third_party/googletest:gtest",
    ]
  }
}
