# 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/module_config.gni")
import("$dir_pw_build/python_action_test.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_toolchain/traits.gni")
import("$dir_pw_unit_test/test.gni")

declare_args() {
  # The build target that overrides the default configuration options for this
  # module. This should point to a source set that provides defines through a
  # public config (which may -include a file or add defines directly).
  pw_unit_test_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

# This pool limits the maximum number of unit tests that may run in parallel.
# Despite the fact that this is a single GN "target", each toolchain owns its
# own version of this pool, meaning pw_unit_test_POOL_DEPTH may be set
# differently across targets in a single build, and build steps in one toolchain
# will not consume pool resources of steps from another toolchain.
pool("unit_test_pool") {
  depth = pw_unit_test_POOL_DEPTH
}

config("public_include_path") {
  include_dirs = [ "public" ]
}

config("public_overrides_include_path") {
  include_dirs = [ "public_overrides" ]
}

config("light_public_overrides_include_path") {
  include_dirs = [ "light_public_overrides" ]
}

config("googletest_public_overrides_include_path") {
  include_dirs = [ "googletest_public_overrides" ]
}

pw_source_set("config") {
  public = [ "public/pw_unit_test/config.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [
    dir_pw_polyfill,
    pw_unit_test_CONFIG,
  ]
  visibility = [ ":*" ]
}

# pw_unit_test facade. This provides a GoogleTest-compatible test framework.
pw_source_set("pw_unit_test") {
  testonly = pw_unit_test_TESTONLY
  public = [ "public/pw_unit_test/framework.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [ pw_unit_test_BACKEND ]

  # Temporarily redirect deprecated googletest pointer to new pointer.
  if ("$pw_unit_test_GOOGLETEST_BACKEND" == "$dir_pw_third_party/googletest" &&
      "$pw_unit_test_MAIN" == "$dir_pw_third_party/googletest:gmock_main" &&
      "$pw_unit_test_BACKEND" == "$dir_pw_unit_test:light") {
    print("Warning: pw_unit_test_GOOGLETEST_BACKEND is deprecated.")
    print("Set pw_unit_test_BACKEND to //pw_unit_test:googletest.")
    public_deps = []  # The list must be empty before overriding.
    public_deps = [ ":googletest" ]
  }
}

# Lightweight unit test backend that implements a subset of GoogleTest.
pw_source_set("light") {
  public_configs = [
    ":light_public_overrides_include_path",
    ":public_include_path",
    ":public_overrides_include_path",
  ]
  public_deps = [
    ":config",
    ":event_handler",
    "$dir_pw_bytes:alignment",
    dir_pw_polyfill,
    dir_pw_preprocessor,
    dir_pw_span,
  ]

  # If C++17 is supported, depend on StringBuilder.
  if (pw_toolchain_CXX_STANDARD >= pw_toolchain_STANDARD.CXX17) {
    public_deps += [ "$dir_pw_string:builder" ]
  }

  deps = [ dir_pw_assert ]

  public = [
    "light_public_overrides/pw_unit_test/framework_backend.h",

    # The facade header is included here since public_overrides/gtest/gtest.h
    # includes it. This avoids a circular dependency in the build system.
    "public/pw_unit_test/framework.h",
    "public_overrides/gtest/gtest.h",
  ]
  sources = [ "framework_light.cc" ]
}

# Unit test framework backend that redirects to GoogleTest.
if (pw_unit_test_BACKEND != "") {
  pw_source_set("googletest") {
    public_configs = [ ":googletest_public_overrides_include_path" ]
    public = [ "googletest_public_overrides/pw_unit_test/framework_backend.h" ]

    public_deps = [ pw_unit_test_GOOGLETEST_BACKEND ]
  }
}

pw_source_set("event_handler") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_unit_test/event_handler.h" ]
}

# Unit test event handler that provides GoogleTest-style output.
pw_source_set("googletest_style_event_handler") {
  public_deps = [
    ":event_handler",
    dir_pw_preprocessor,
  ]
  public = [ "public/pw_unit_test/googletest_style_event_handler.h" ]
  sources = [ "googletest_style_event_handler.cc" ]
}

pw_source_set("googletest_handler_adapter") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":event_handler",
    "$dir_pw_third_party/googletest",
    dir_pw_preprocessor,
  ]
  public = [ "public/pw_unit_test/googletest_handler_adapter.h" ]
  sources = [ "googletest_handler_adapter.cc" ]
}

pw_source_set("googletest_test_matchers") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_unit_test/googletest_test_matchers.h" ]
  public_deps = [
    "$dir_pw_third_party/googletest",
    dir_pw_result,
    dir_pw_status,
  ]
}

pw_test("googletest_test_matchers_test") {
  enable_if = pw_unit_test_BACKEND != "" &&
              pw_unit_test_BACKEND != "$dir_pw_unit_test:light"
  sources = [ "googletest_test_matchers_test.cc" ]
  deps = [ ":googletest_test_matchers" ]
}

# Library providing an event handler which outputs human-readable text.
pw_source_set("simple_printing_event_handler") {
  public_deps = [
    ":googletest_style_event_handler",
    "$dir_pw_preprocessor",
  ]
  public = [ "public/pw_unit_test/simple_printing_event_handler.h" ]
  sources = [ "simple_printing_event_handler.cc" ]
}

# Library providing a standard desktop main function for the pw_unit_test
# framework. Unit test files can link against this library to build runnable
# unit test executables.
pw_source_set("simple_printing_main") {
  testonly = pw_unit_test_TESTONLY
  deps = [
    ":pw_unit_test",
    ":simple_printing_event_handler",
    "$dir_pw_sys_io",
    dir_pw_span,
  ]
  sources = [ "simple_printing_main.cc" ]
}

pw_source_set("printf_event_handler") {
  public_deps = [
    ":googletest_style_event_handler",
    dir_pw_preprocessor,
  ]
  public = [ "public/pw_unit_test/printf_event_handler.h" ]
}

pw_source_set("printf_main") {
  testonly = pw_unit_test_TESTONLY
  deps = [
    ":printf_event_handler",
    ":pw_unit_test",
  ]
  sources = [ "printf_main.cc" ]
}

# Library providing an event handler which logs using pw_log.
pw_source_set("logging_event_handler") {
  public_deps = [
    ":googletest_style_event_handler",
    dir_pw_log,
  ]
  public = [ "public/pw_unit_test/logging_event_handler.h" ]
  sources = [ "logging_event_handler.cc" ]
}

# Provides logging to either the light framework or an external GoogleTest.
group("logging") {
  public_deps = [ ":logging_event_handler" ]
  deps = []
  if (pw_unit_test_BACKEND != "$dir_pw_unit_test:light") {
    deps += [ ":googletest_handler_adapter" ]
  }
}

pw_source_set("logging_main") {
  testonly = pw_unit_test_TESTONLY
  deps = [
    ":logging",
    ":pw_unit_test",
  ]
  sources = [ "logging_main.cc" ]
}

# Library providing an event handler adapter that allows for multiple
# event handlers to be registered for a given test run
pw_source_set("multi_event_handler") {
  public_deps = [ ":event_handler" ]
  public = [ "public/pw_unit_test/multi_event_handler.h" ]
}

pw_test("multi_event_handler_test") {
  sources = [ "multi_event_handler_test.cc" ]
  deps = [
    ":multi_event_handler",
    ":pw_unit_test",
  ]
}

# Library providing an event handler which outputs a test summary artifact.
pw_source_set("test_record_event_handler") {
  public_deps = [
    ":googletest_style_event_handler",
    "$dir_pw_json:builder",
  ]
  deps = [ "$dir_pw_assert" ]
  public = [ "public/pw_unit_test/test_record_event_handler.h" ]
  sources = [ "public/pw_unit_test/internal/test_record_trie.h" ]
}

pw_test("test_record_event_handler_test") {
  sources = [ "test_record_event_handler_test.cc" ]
  deps = [
    ":pw_unit_test",
    ":test_record_event_handler",
  ]
}

config("rpc_service_backend_light") {
  include_dirs = [ "rpc_light_public" ]
}

config("rpc_service_backend_gtest") {
  include_dirs = [ "rpc_gtest_public" ]
}

pw_source_set("rpc_service") {
  testonly = pw_unit_test_TESTONLY
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":config",
    ":event_handler",
    ":pw_unit_test",
    ":unit_test_proto.pwpb",
    ":unit_test_proto.raw_rpc",
    "$dir_pw_containers:vector",
  ]
  deps = [ dir_pw_log ]
  public = [ "public/pw_unit_test/unit_test_service.h" ]
  sources = [ "unit_test_service.cc" ]
  defines = []

  if (pw_unit_test_BACKEND == "$dir_pw_unit_test:light") {
    public_configs += [ ":rpc_service_backend_light" ]
    sources += [ "rpc_light_event_handler.cc" ]
    public += [ "rpc_light_public/pw_unit_test/internal/rpc_event_handler.h" ]
  } else {
    public_configs += [ ":rpc_service_backend_gtest" ]
    sources += [ "rpc_gtest_event_handler.cc" ]
    public += [ "rpc_gtest_public/pw_unit_test/internal/rpc_event_handler.h" ]
  }
}

pw_source_set("rpc_main") {
  testonly = pw_unit_test_TESTONLY
  public_deps = [ ":pw_unit_test" ]
  deps = [
    ":rpc_service",
    "$dir_pw_rpc/system_server",
    dir_pw_log,
  ]
  sources = [ "rpc_main.cc" ]
}

if (pw_unit_test_BACKEND == "$dir_pw_unit_test:light") {
  pw_source_set("static_library_support") {
    public_configs = [ ":public_include_path" ]
    public_deps = [ pw_unit_test_BACKEND ]
    public = [ "public/pw_unit_test/static_library_support.h" ]
    sources = [ "static_library_support.cc" ]
  }
} else {
  group("static_library_support") {
  }
}

pw_executable("test_rpc_server") {
  testonly = pw_unit_test_TESTONLY
  sources = [ "test_rpc_server.cc" ]
  deps = [
    ":pw_unit_test",
    ":rpc_service",
    "$dir_pw_rpc/system_server",
    "$dir_pw_rpc/system_server:socket",
    dir_pw_log,
  ]
}

pw_proto_library("unit_test_proto") {
  sources = [ "pw_unit_test_proto/unit_test.proto" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  other_deps = [ "py" ]
}

pw_test("metadata_only_test") {
  extra_metadata = {
    extra_key = "extra_value"
  }
}

# pw_test_group produces the metadata file for its tests.
pw_test_group("metadata_only_group") {
  tests = [ ":metadata_only_test" ]
  output_metadata = true
}

pw_python_action_test("test_group_metadata_test") {
  testonly = pw_unit_test_TESTONLY
  sources = [ "py/test_group_metadata_test.py" ]
  args = [
    "--stamp-path",
    "<TARGET_FILE(:metadata_only_group)>",
  ]
  deps = [ ":metadata_only_group" ]
}

pw_test("framework_test") {
  sources = [ "framework_test.cc" ]
  deps = [
    dir_pw_assert,
    dir_pw_status,
  ]

  # TODO: https://pwbug.dev/325509758 - Passes but hangs on cleanup.
  if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") {
    enable_if = false
  }
}

pw_test("framework_light_test") {
  enable_if = pw_unit_test_BACKEND == "$dir_pw_unit_test:light"
  sources = [ "framework_light_test.cc" ]
  deps = [
    "$dir_pw_string:builder",
    dir_pw_status,
  ]
}

pw_static_library("tests_in_archive") {
  testonly = pw_unit_test_TESTONLY
  sources = [
    "static_library_archived_tests.cc",
    "static_library_missing_archived_tests.cc",
  ]
  deps = [ ":pw_unit_test" ]
  visibility = [ ":*" ]
}

pw_test("static_library_support_test") {
  enable_if = pw_unit_test_BACKEND == "$dir_pw_unit_test:light"
  sources = [ "static_library_support_test.cc" ]
  deps = [
    ":static_library_support",
    ":tests_in_archive",
    dir_pw_assert,
  ]
}

pw_test_group("tests") {
  tests = [
    ":framework_test",
    ":framework_light_test",
    ":static_library_support_test",
    ":multi_event_handler_test",
    ":test_record_event_handler_test",
  ]
  if (dir_pw_third_party_googletest != "") {
    tests += [ ":googletest_test_matchers_test" ]
  }
}
