# 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("//build/config/jumbo.gni")
import("../pdfium.gni")

jumbo_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.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",
    "../core/fdrm",
    "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" ]
  }
}

jumbo_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",
    ]
  }
}

jumbo_source_set("embedder_test_support") {
  testonly = true
  sources = [
    "embedder_test.cpp",
    "embedder_test.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",
    "../core/fdrm",
    "//testing/gmock",
    "//testing/gtest",
  ]
  configs += [ "../:pdfium_core_config" ]
  visibility = [ "../*" ]

  if (pdf_enable_v8) {
    sources += [
      "js_embedder_test.cpp",
      "js_embedder_test.h",
    ]
    deps += [ "../fxjs" ]

    if (pdf_enable_xfa) {
      sources += [
        "xfa_js_embedder_test.cpp",
        "xfa_js_embedder_test.h",
      ]
      deps += [
        "../fpdfsdk",
        "../fpdfsdk/fpdfxfa",
        "../xfa/fxfa",
        "../xfa/fxfa/parser",
      ]
    }
  }
}
