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

import("../pdfium.gni")

source_set("test_support") {
  testonly = true
  sources = [
    "fx_string_testhelpers.cpp",
    "fx_string_testhelpers.h",
    "invalid_seekable_read_stream.cpp",
    "invalid_seekable_read_stream.h",
    "pseudo_retainable.h",
    "string_write_stream.cpp",
    "string_write_stream.h",
    "test_loader.cpp",
    "test_loader.h",
    "test_support.cpp",
    "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",
    "utils/path_service.cpp",
    "utils/path_service.h",
  ]
  data = [ "resources/" ]
  deps = [
    "../:pdfium_public_headers",
    "../core/fdrm",
    "../core/fxcrt",
    "../core/fxge",
    "image_diff",
  ]
  configs += [ "../:pdfium_core_config" ]
  visibility = [ "../*" ]

  if (pdf_enable_v8) {
    sources += [
      "v8_initializer.cpp",
      "v8_initializer.h",
    ]
    deps += [
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [ "//v8:external_startup_data" ]
  }
}

if (pdf_enable_v8) {
  source_set("pdfium_v8_gtest_support") {
    testonly = true
    sources = [
      "v8_test_environment.cpp",
      "v8_test_environment.h",
    ]
    deps = [
      ":test_support",
      "../core/fxcrt",
      "//testing/gtest",
      "//v8",
      "//v8:v8_libplatform",
    ]
    configs += [
      "../:pdfium_core_config",
      "//v8:external_startup_data",
    ]
  }
}

source_set("unit_test_support") {
  testonly = true
  sources = []
  deps = []
  configs += [ "../:pdfium_core_config" ]
  visibility = [ "../*" ]

  if (pdf_enable_v8) {
    deps += [ ":pdfium_v8_gtest_support" ]

    if (pdf_enable_xfa) {
      sources += [
        "xfa_unit_test_support.cpp",
        "xfa_unit_test_support.h",
      ]
      deps += [
        "../:pdfium",
        "../core/fxge",
        "../xfa/fgas",
        "//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_mock_delegate.h",
    "embedder_test_timer_handling_delegate.h",
    "fake_file_access.cpp",
    "fake_file_access.h",
    "range_set.cpp",
    "range_set.h",
  ]
  deps = [
    ":test_support",
    "../:pdfium_public_headers",
    "../core/fdrm",
    "../core/fxcrt",
    "../third_party:pdfium_base",
    "//testing/gmock",
    "//testing/gtest",
  ]
  configs += [ "../:pdfium_core_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 += [
      ":pdfium_v8_gtest_support",
      "../fxjs",
    ]
    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",
        "//v8:cppgc",
        "//v8:v8_libplatform",
      ]
    }
  }
}
