# Copyright 2019 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.

load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
load(
    "//pw_build:pigweed.bzl",
    "pw_cc_binary",
    "pw_cc_library",
    "pw_cc_test",
)
load("//pw_protobuf_compiler:proto.bzl", "pw_proto_library")

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

pw_cc_library(
    name = "config",
    hdrs = ["public/pw_unit_test/config.h"],
    includes = ["public"],
    deps = [
        "//pw_polyfill",
    ],
)

pw_cc_library(
    name = "pw_unit_test",
    deps = ["@pigweed_config//:pw_unit_test_googletest_backend"],
)

pw_cc_library(
    name = "light",
    srcs = [
        "framework.cc",
        "public/pw_unit_test/internal/framework.h",
    ],
    hdrs = ["public_overrides/gtest/gtest.h"],
    includes = [
        "public",
        "public_overrides",
    ],
    deps = [
        ":config",
        ":event_handler",
        "//pw_assert",
        "//pw_polyfill",
        "//pw_preprocessor",
        "//pw_span",
        "//pw_string",
    ],
)

pw_cc_library(
    name = "event_handler",
    hdrs = ["public/pw_unit_test/event_handler.h"],
    includes = ["public"],
)

pw_cc_library(
    name = "googletest_style_event_handler",
    srcs = ["googletest_style_event_handler.cc"],
    hdrs = ["public/pw_unit_test/googletest_style_event_handler.h"],
    deps = [
        ":event_handler",
        "//pw_preprocessor",
    ],
)

pw_cc_library(
    name = "simple_printing_event_handler",
    srcs = ["simple_printing_event_handler.cc"],
    hdrs = [
        "public/pw_unit_test/simple_printing_event_handler.h",
    ],
    includes = [
        "public",
    ],
    deps = [
        ":googletest_style_event_handler",
        "//pw_preprocessor",
    ],
)

pw_cc_library(
    name = "simple_printing_main",
    srcs = [
        "simple_printing_main.cc",
    ],
    deps = [
        ":pw_unit_test",
        ":simple_printing_event_handler",
        "//pw_span",
        "//pw_sys_io",
    ],
)

pw_cc_library(
    name = "printf_event_handler",
    hdrs = ["public/pw_unit_test/printf_event_handler.h"],
    deps = [
        ":googletest_style_event_handler",
        "//pw_preprocessor",
    ],
)

pw_cc_library(
    name = "printf_main",
    srcs = ["printf_main.cc"],
    deps = [
        ":printf_event_handler",
        ":pw_unit_test",
    ],
)

pw_cc_library(
    name = "logging_event_handler",
    srcs = [
        "logging_event_handler.cc",
    ],
    hdrs = [
        "public/pw_unit_test/logging_event_handler.h",
    ],
    includes = [
        "public",
    ],
    deps = [
        ":googletest_style_event_handler",
        "//pw_log",
    ],
)

pw_cc_binary(
    name = "logging_main",
    srcs = [
        "logging_main.cc",
    ],
    deps = [
        ":logging_event_handler",
        "//pw_unit_test",
    ],
)

proto_library(
    name = "unit_test_proto",
    srcs = ["pw_unit_test_proto/unit_test.proto"],
    strip_import_prefix = "//pw_unit_test",
)

py_proto_library(
    name = "unit_test_py_pb2",
    srcs = ["pw_unit_test_proto/unit_test.proto"],
)

pw_proto_library(
    name = "unit_test_cc",
    deps = [":unit_test_proto"],
)

pw_cc_library(
    name = "rpc_service",
    srcs = [
        "rpc_light_event_handler.cc",
        "unit_test_service.cc",
    ],
    hdrs = [
        "public/pw_unit_test/unit_test_service.h",
        "rpc_light_public/pw_unit_test/internal/rpc_event_handler.h",
    ],
    includes = ["rpc_light_public"],
    deps = [
        ":pw_unit_test",
        ":unit_test_cc.pwpb",
        ":unit_test_cc.raw_rpc",
        "//pw_log",
    ],
)

pw_cc_library(
    name = "rpc_main",
    srcs = [
        "rpc_main.cc",
    ],
    deps = [
        ":pw_unit_test",
        ":rpc_service",
        "//pw_hdlc:pw_rpc",
        "//pw_log",
        "//pw_rpc",
        "//pw_rpc/system_server",
    ],
)

pw_cc_library(
    name = "static_library_support",
    srcs = ["static_library_support.cc"],
    hdrs = ["public/pw_unit_test/static_library_support.h"],
    includes = ["public"],
    deps = [":light"],  # This library only works with the light backend
)

pw_cc_library(
    name = "tests_in_archive",
    srcs = [
        "static_library_archived_tests.cc",
        "static_library_missing_archived_tests.cc",
    ],
    linkstatic = True,
    visibility = ["//visibility:private"],
    deps = [":pw_unit_test"],
)

pw_cc_test(
    name = "static_library_support_test",
    srcs = ["static_library_support_test.cc"],
    deps = [
        ":static_library_support",
        ":tests_in_archive",
        "//pw_assert",
    ],
)

pw_cc_test(
    name = "framework_test",
    srcs = ["framework_test.cc"],
    deps = [
        ":pw_unit_test",
        "//pw_assert",
    ],
)

# TODO(hepler): Build this as a cc_binary and use it in integration tests.
filegroup(
    name = "test_rpc_server",
    srcs = ["test_rpc_server.cc"],
    # deps = [
    #     ":pw_unit_test",
    #     ":rpc_service",
    #     "//pw_log",
    #     "//pw_rpc/system_server",
    # ],
)

# GTest is not yet supported in the Bazel build. This filegroup silences
# warnings about these files not being included in the Bazel build.
filegroup(
    name = "gtest_rpc_support",
    srcs = [
        "rpc_gtest_event_handler.cc",
        "rpc_gtest_public/pw_unit_test/internal/rpc_event_handler.h",
    ],
)
