# 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" ]
  }
}

source_set("unit_test_support") {
  testonly = true
  sources = []
  deps = []

  configs += [ "../:pdfium_core_config" ]
  visibility = [ "../*" ]

  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 += [
      "js_embedder_test.cpp",
      "js_embedder_test.h",
    ]
    deps += [ "../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",
      ]
    }
  }
}
