# 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/cpp/sdk_source_set.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

sdk_source_set("cpp") {
  category = "partner"

  sdk_name = "vfs_cpp"

  include_base = "//sdk"
  sources = [
    "composed_service_dir.cc",
    "composed_service_dir.h",
    "flags.h",
    "internal/connection.cc",
    "internal/connection.h",
    "internal/directory.cc",
    "internal/directory.h",
    "internal/directory_connection.cc",
    "internal/directory_connection.h",
    "internal/dirent_filler.cc",
    "internal/dirent_filler.h",
    "internal/file.cc",
    "internal/file.h",
    "internal/file_connection.cc",
    "internal/file_connection.h",
    "internal/node.cc",
    "internal/node.h",
    "internal/node_connection.cc",
    "internal/node_connection.h",
    "lazy_dir.cc",
    "lazy_dir.h",
    "node_kind.h",
    "pseudo_dir.cc",
    "pseudo_dir.h",
    "pseudo_file.cc",
    "pseudo_file.h",
    "remote_dir.cc",
    "remote_dir.h",
    "service.cc",
    "service.h",
    "vmo_file.cc",
    "vmo_file.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.io",
    "//sdk/lib/fdio",
    "//sdk/lib/fidl/cpp",
    "//zircon/public/lib/async",
    "//zircon/public/lib/zx",
  ]

  public_configs = [ "//sdk/config" ]

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

test("vfs_cpp_unittests") {
  sources = [
    "composed_service_dir_unittest.cc",
    "internal/connection_unittest.cc",
    "internal/file_unittest.cc",
    "lazy_dir_unittest.cc",
    "pseudo_dir_unittest.cc",
    "pseudo_file_unittest.cc",
    "remote_dir_unittest.cc",
    "service_unittest.cc",
    "vmo_file_unittest.cc",
  ]

  deps = [
    ":cpp",
    "testing",
    "//garnet/examples/fidl/services:echo",
    "//garnet/public/lib/gtest",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl/test:gtest_main",
  ]

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

test_package("vfs_cpp_tests") {
  deps = [ ":vfs_cpp_unittests" ]

  tests = [
    {
      name = "vfs_cpp_unittests"
      environments = basic_envs
    },
  ]
}
