# Copyright 2018 The PDFium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

config("gtest_config") {
  visibility = [ ":*" ]  # gmock also shares this config.

  defines = [
    # Chromium always links googletest statically, so no API qualifier is
    # necessary. The definition in gtest-port.h at the time of this writing
    # causes crashes in content_browsertests.
    "GTEST_API_=",

    # In order to allow regex matches in gtest to be shared between Windows
    # and other systems, we tell gtest to always use its internal engine.
    "GTEST_HAS_POSIX_RE=0",

    # Enables C++11 features.
    "GTEST_LANG_CXX11=1",

    # Prevents gtest from including both <tr1/tuple> and <tuple>.
    "GTEST_HAS_TR1_TUPLE=0",
  ]

  # Gtest headers need to be able to find themselves.
  include_dirs = [
    "custom",
    "src/googletest/include",
  ]

  if (is_win) {
    cflags = [ "/wd4800" ]  # Unused variable warning.
  }
}

config("gmock_config") {
  # Gmock headers need to be able to find themselves.
  include_dirs = [
    "custom",
    "src/googlemock/include",
  ]
}

# Do NOT depend on this directly. Use //testing/gtest instead.
# See README.chromium for details.
source_set("gtest") {
  testonly = true
  sources = [
    "custom/gtest/internal/custom/gtest.h",
    "custom/gtest/internal/custom/stack_trace_getter.cc",
    "custom/gtest/internal/custom/stack_trace_getter.h",

    # TODO(crbug.com/1009553): Remove this wrapper and custom temp dir
    # after plumbing a workable temporary path into googletest on Android.
    "custom/gtest/internal/custom/gtest_port_wrapper.cc",
    "custom/gtest/internal/custom/pdfium_custom_temp_dir.cc",
    "custom/gtest/internal/custom/pdfium_custom_temp_dir.h",
    "src/googletest/include/gtest/gtest-death-test.h",
    "src/googletest/include/gtest/gtest-matchers.h",
    "src/googletest/include/gtest/gtest-message.h",
    "src/googletest/include/gtest/gtest-param-test.h",
    "src/googletest/include/gtest/gtest-printers.h",
    "src/googletest/include/gtest/gtest-spi.h",
    "src/googletest/include/gtest/gtest-test-part.h",
    "src/googletest/include/gtest/gtest-typed-test.h",
    "src/googletest/include/gtest/gtest.h",
    "src/googletest/include/gtest/gtest_pred_impl.h",
    "src/googletest/include/gtest/gtest_prod.h",

    #"src/googletest/include/gtest/internal/custom/gtest.h",  # Superseded.
    "src/googletest/include/gtest/internal/custom/gtest-port.h",
    "src/googletest/include/gtest/internal/custom/gtest-printers.h",
    "src/googletest/include/gtest/internal/gtest-death-test-internal.h",
    "src/googletest/include/gtest/internal/gtest-filepath.h",
    "src/googletest/include/gtest/internal/gtest-internal.h",
    "src/googletest/include/gtest/internal/gtest-param-util.h",
    "src/googletest/include/gtest/internal/gtest-port-arch.h",
    "src/googletest/include/gtest/internal/gtest-port.h",
    "src/googletest/include/gtest/internal/gtest-string.h",
    "src/googletest/include/gtest/internal/gtest-type-util.h",

    #"src/googletest/src/gtest-all.cc",  # Not needed by our build.
    "src/googletest/src/gtest-death-test.cc",
    "src/googletest/src/gtest-filepath.cc",
    "src/googletest/src/gtest-internal-inl.h",
    "src/googletest/src/gtest-matchers.cc",

    # gtest_port_wrapper.cc is used instead of gtest-port.cc.
    # TODO(crbug.com/1009553): Re-enable this file after plumbing a workable
    #                          temporary path into googletest on Android.
    #"src/googletest/src/gtest-port.cc",
    "src/googletest/src/gtest-printers.cc",
    "src/googletest/src/gtest-test-part.cc",
    "src/googletest/src/gtest-typed-test.cc",
    "src/googletest/src/gtest.cc",
  ]

  # Some files include "src/gtest-internal-inl.h".
  include_dirs = [ "src/googletest" ]

  public_configs = [ ":gtest_config" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  defines = [ "GTEST_DISABLE_PRINT_STACK_TRACE" ]
  sources -= [
    "custom/gtest/internal/custom/stack_trace_getter.cc",
    "custom/gtest/internal/custom/stack_trace_getter.h",
  ]
}

# Do NOT depend on this directly. Use //testing/gtest:gtest_main instead.
# See README.chromium for details.
source_set("gtest_main") {
  testonly = true
  sources = [ "src/googletest/src/gtest_main.cc" ]
  deps = [ ":gtest" ]
}

# Do NOT depend on this directly. Use //testing/gmock:gmock_main instead.
# See README.chromium for details.
source_set("gmock") {
  testonly = true
  sources = [
    "src/googlemock/include/gmock/gmock-actions.h",
    "src/googlemock/include/gmock/gmock-cardinalities.h",
    "src/googlemock/include/gmock/gmock-function-mocker.h",
    "src/googlemock/include/gmock/gmock-generated-actions.h",
    "src/googlemock/include/gmock/gmock-matchers.h",
    "src/googlemock/include/gmock/gmock-more-actions.h",
    "src/googlemock/include/gmock/gmock-more-matchers.h",
    "src/googlemock/include/gmock/gmock-nice-strict.h",
    "src/googlemock/include/gmock/gmock-spec-builders.h",
    "src/googlemock/include/gmock/gmock.h",

    #"src/googlemock/include/gmock/internal/custom/gmock-port.h",  # Superseded.
    "src/googlemock/include/gmock/internal/custom/gmock-generated-actions.h",
    "src/googlemock/include/gmock/internal/custom/gmock-matchers.h",
    "src/googlemock/include/gmock/internal/gmock-internal-utils.h",
    "src/googlemock/include/gmock/internal/gmock-port.h",
    "src/googlemock/include/gmock/internal/gmock-pp.h",

    #"src/googlemock/src/gmock-all.cc",  # Not needed by our build.
    "src/googlemock/src/gmock-cardinalities.cc",
    "src/googlemock/src/gmock-internal-utils.cc",
    "src/googlemock/src/gmock-matchers.cc",
    "src/googlemock/src/gmock-spec-builders.cc",
    "src/googlemock/src/gmock.cc",
  ]

  public_deps = [ ":gtest" ]

  public_configs = [ ":gmock_config" ]
}

# Do NOT depend on this directly. Use //testing/gmock:gmock_main instead.
# See README.chromium for details.
static_library("gmock_main") {
  testonly = true
  sources = [ "src/googlemock/src/gmock_main.cc" ]
  deps = [ ":gmock" ]
}
