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

source_set("cpp") {
  public = [
    "array_view.h",
    "circular_deque.h",
    "vector_buffer.h",
  ]

  public_deps = [ "//zircon/public/lib/safemath" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

test("containers_cpp_unittests") {
  testonly = true
  output_name = "containers_cpp_unittests"

  sources = [
    "array_view_unittest.cc",
    "circular_deque_unittest.cc",
    "vector_buffer_unittest.cc",
  ]

  deps = [
    ":cpp",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_unittest_package("containers_cpp_tests") {
  deps = [ ":containers_cpp_unittests" ]
}

group("tests") {
  testonly = true

  deps = [ ":containers_cpp_tests" ]
}
