# 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",
    ],
)
