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

import("//build/config/sanitizers/sanitizers.gni")
import("//build_overrides/build.gni")
import("../pdfium.gni")

source_set("test_support") {
  testonly = true
  sources = [
    "command_line_helpers.cpp",
    "command_line_helpers.h",
    "font_renamer.cpp",
    "font_renamer.h",
    "fx_string_testhelpers.cpp",
    "fx_string_testhelpers.h",
    "invalid_seekable_read_stream.cpp",
    "invalid_seekable_read_stream.h",
    "pseudo_retainable.h",
    "scoped_set_tz.cpp",
    "scoped_set_tz.h",
    "string_write_stream.cpp",
    "string_write_stream.h",
    "test_fonts.cpp",
    "test_fonts.h",
    "test_loader.cpp",
    "test_loader.h",
    "test_support.h",
    "utils/bitmap_saver.cpp",
    "utils/bitmap_saver.h",
    "utils/file_util.cpp",
    "utils/file_util.h",
    "utils/hash.cpp",
    "utils/hash.h",
  ]
  data = [ "resources/" ]
  public_deps = [
    ":path_service",
    "//third_party/test_fonts",
  ]
  deps = [
    "../:pdfium_public_headers",
    "../core/fdrm",
    "../core/fxcrt",
    "../core/fxge",
    "../fpdfsdk",
    "image_diff",
  ]
  configs += [
    "../:pdfium_strict_config",
    "../:pdfium_noshorten_config",
  ]
  visibility = [ "../*" ]
  if (is_posix) {
    sources += [
      "scoped_locale.cc",
      "scoped_locale.h",
    ]
    deps += [ "//testing/gtest" ]
  }
  if (pdf_use_partition_alloc) {
    sources += [
      "allocator_shim_config.cpp",
      "allocator_shim_config.h",
    ]
    deps += [ "//base/allocator/partition_allocator/src/partition_alloc" ]
  }
  if (pdf_enable_v8) {
    sources += [
      "v8_initializer.cpp",
      "v8_initializer.h",
    ]
    deps += [
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [ "//v8:external_startup_data" ]
  }
}

source_set("path_service") {
  testonly = true
  sources = [
    "utils/path_service.cpp",
    "utils/path_service.h",
  ]
  deps = [ "../core/fxcrt" ]
  configs += [
    "../:pdfium_strict_config",
    "../:pdfium_noshorten_config",
  ]
  visibility = [ "../*" ]
}

source_set("test_environments") {
  testonly = true
  sources = [
    "pdf_test_environment.cpp",
    "pdf_test_environment.h",
  ]
  deps = [
    ":test_support",
    "../core/fxcrt",
    "../core/fxge",
    "//testing/gtest",
  ]
  configs += [
    "../:pdfium_strict_config",
    "../:pdfium_noshorten_config",
  ]
  if (pdf_enable_v8) {
    sources += [
      "v8_test_environment.cpp",
      "v8_test_environment.h",
    ]
    deps += [
      "../fxjs",
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [ "//v8:external_startup_data" ]
  }
  if (pdf_enable_xfa) {
    sources += [
      "xfa_test_environment.cpp",
      "xfa_test_environment.h",
    ]
    deps += [
      "../fxjs:gc",
      "../xfa/fgas/font",
    ]
  }
}

source_set("unit_test_support") {
  testonly = true
  sources = []
  deps = []
  configs += [
    "../:pdfium_strict_config",
    "../:pdfium_noshorten_config",
  ]
  public_deps = [
    ":test_environments",
    ":test_support",
  ]
  if (pdf_enable_v8) {
    sources += [
      "fxv8_unittest.cpp",
      "fxv8_unittest.h",
    ]
    deps += [
      "../fxjs",
      "//testing/gtest",
    ]
    configs += [ "//v8:external_startup_data" ]
    if (pdf_enable_xfa) {
      sources += [
        "fxgc_unittest.cpp",
        "fxgc_unittest.h",
      ]
      deps += [
        "../fxjs:gc",
        "//testing/gtest",
      ]
    }
  }
}

source_set("embedder_test_support") {
  testonly = true
  sources = [
    "embedder_test.cpp",
    "embedder_test.h",
    "embedder_test_constants.cpp",
    "embedder_test_constants.h",
    "embedder_test_environment.cpp",
    "embedder_test_environment.h",
    "embedder_test_mock_delegate.h",
    "embedder_test_timer_handling_delegate.h",
    "fake_file_access.cpp",
    "fake_file_access.h",
    "range_set.cpp",
    "range_set.h",
  ]
  deps = [
    "../:pdfium_public_headers",
    "../core/fdrm",
    "../core/fxge",
    "//testing/gmock",
    "//testing/gtest",
  ]
  public_deps = [
    ":test_environments",
    ":test_support",
    "../core/fxcrt",
  ]
  configs += [
    "../:pdfium_strict_config",
    "../:pdfium_noshorten_config",
  ]
  visibility = [ "../*" ]
  if (pdf_enable_v8) {
    sources += [
      "external_engine_embedder_test.cpp",
      "external_engine_embedder_test.h",
      "js_embedder_test.cpp",
      "js_embedder_test.h",
    ]
    deps += [
      "../fxjs",
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [ "//v8:external_startup_data" ]
    if (pdf_enable_xfa) {
      sources += [
        "xfa_js_embedder_test.cpp",
        "xfa_js_embedder_test.h",
      ]
      deps += [
        "../fpdfsdk",
        "../fpdfsdk/fpdfxfa",
        "../xfa/fxfa",
        "../xfa/fxfa/parser",
      ]
    }
  }
}

# Dummy group to keep satisfy references from //build.
group("test_scripts_shared") {
}
