# 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",
    "//testing/gmock",
    "//testing/gtest",
  ]
  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",
      ]
    }
  }
}
