# Copyright 2020 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

config("public") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

pw_source_set("server_api") {
  public_configs = [ ":public" ]
  public = [
    "public/pw_rpc/raw/internal/method.h",
    "public/pw_rpc/raw/internal/method_union.h",
    "public/pw_rpc/raw/server_reader_writer.h",
  ]
  sources = [ "method.cc" ]
  public_deps = [
    "..:server",
    dir_pw_bytes,
  ]
}

pw_source_set("client_api") {
  public_configs = [ ":public" ]
  public = [ "public/pw_rpc/raw/client_reader_writer.h" ]
  public_deps = [
    "..:client",
    dir_pw_bytes,
  ]
}

pw_source_set("fake_channel_output") {
  public = [ "public/pw_rpc/raw/fake_channel_output.h" ]
  public_configs = [ ":public" ]
  public_deps = [ "..:fake_channel_output" ]
}

pw_source_set("test_method_context") {
  public_configs = [ ":public" ]
  public = [ "public/pw_rpc/raw/test_method_context.h" ]
  public_deps = [
    ":fake_channel_output",
    ":server_api",
    "..:test_utils",
    dir_pw_assert,
    dir_pw_containers,
  ]
}

pw_source_set("client_testing") {
  public = [ "public/pw_rpc/raw/client_testing.h" ]
  sources = [ "client_testing.cc" ]
  public_deps = [
    ":fake_channel_output",
    "..:client",
  ]
  deps = [ "..:log_config" ]
}

pw_test_group("tests") {
  tests = [
    ":codegen_test",
    ":client_test",
    ":client_reader_writer_test",
    ":method_test",
    ":method_info_test",
    ":method_union_test",
    ":server_reader_writer_test",
    ":stub_generation_test",
  ]
}

pw_test("codegen_test") {
  deps = [
    ":client_testing",
    ":test_method_context",
    "..:test_protos.pwpb",
    "..:test_protos.raw_rpc",
    dir_pw_protobuf,
  ]
  sources = [ "codegen_test.cc" ]
}

pw_test("client_test") {
  deps = [
    ":client_api",
    ":client_testing",
    "..:test_utils",
  ]
  sources = [ "client_test.cc" ]
}

pw_test("client_reader_writer_test") {
  deps = [
    ":client_api",
    ":client_testing",
    "..:test_protos.raw_rpc",
  ]
  sources = [ "client_reader_writer_test.cc" ]
}

pw_test("method_test") {
  deps = [
    ":server_api",
    "..:test_protos.pwpb",
    "..:test_protos.raw_rpc",
    "..:test_utils",
    dir_pw_protobuf,
  ]
  sources = [ "method_test.cc" ]
}

pw_test("method_info_test") {
  deps = [
    "..:common",
    "..:test_protos.raw_rpc",
    "..:test_utils",
  ]
  sources = [ "method_info_test.cc" ]
}

pw_test("method_union_test") {
  deps = [
    ":server_api",
    "..:test_protos.pwpb",
    "..:test_utils",
    dir_pw_protobuf,
  ]
  sources = [ "method_union_test.cc" ]
}

pw_test("server_reader_writer_test") {
  deps = [
    ":server_api",
    ":test_method_context",
    "..:test_protos.raw_rpc",
  ]
  sources = [ "server_reader_writer_test.cc" ]
}

pw_test("stub_generation_test") {
  deps = [ "..:test_protos.raw_rpc" ]
  sources = [ "stub_generation_test.cc" ]
}
