# 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/package/component.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/lib/fidl/cpp",
    "//zircon/public/fidl/fuchsia-io",
    "//zircon/public/lib/async",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/zx",
  ]

  public_configs = [ "//sdk/config" ]
}

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",
  ]
}

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

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