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

shared_library("empty_dll") {
  sources = [
    "empty_dll.cc",
  ]
}

source_set("scoped_file") {
  sources = [
    "scoped_file.cc",
    "scoped_file.h",
  ]

  deps = [
    "//base:base",
  ]
}

source_set("test_strings") {
  testonly = true

  sources = [
    "test_strings.cc",
    "test_strings.h",
  ]
}

source_set("test_executables") {
  testonly = true

  sources = [
    "test_executables.cc",
    "test_executables.h",
  ]

  # Assume that every target that uses the test_executables header will run one
  # of the executables, so make sure they are built.
  data_deps = [
    ":test_process",
    ":test_service",
  ]

  deps = [
    ":test_strings",
    ":test_util",
    "//base:base",
    "//chrome/chrome_cleaner/constants:common_strings",
  ]
}

source_set("test_util") {
  testonly = true

  sources = [
    "reboot_deletion_helper.cc",
    "reboot_deletion_helper.h",
    "test_file_util.cc",
    "test_file_util.h",
    "test_layered_service_provider.cc",
    "test_layered_service_provider.h",
    "test_name_helper.cc",
    "test_name_helper.h",
    "test_registry_util.cc",
    "test_registry_util.h",
    "test_util.cc",
    "test_util.h",
  ]

  deps = [
    ":test_pup_data",
    ":test_strings",
    "//base:base",
    "//base/test:test_support",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/os:cleaner_os",
    "//chrome/chrome_cleaner/os:common_os",
    "//chrome/chrome_cleaner/pup_data:pup_data_base",
    "//chrome/chrome_cleaner/strings",
    "//components/chrome_cleaner/public/constants:constants",
    "//sandbox/win:sandbox",
  ]

  data_deps = [
    ":empty_dll",
    "//chrome/chrome_cleaner/test/resources:signed_empty_dll",
  ]

  public_deps = [
    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("test_branding_header") {
  # This is NOT testonly because it's used by RegistryOverrideManager, which is
  # shipped on official builds.
  sources = [
    "test_branding.h",
  ]
}

source_set("test_pup_data") {
  testonly = true

  sources = [
    "test_pup_data.cc",
    "test_pup_data.h",
    "test_signatures.cc",
    "test_uws_catalog.cc",
    "test_uws_catalog.h",
  ]

  deps = [
    "//base:base",
    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
    "//chrome/chrome_cleaner/pup_data:dynamic_pup",
    "//chrome/chrome_cleaner/pup_data:pup_data_base",
    "//chrome/chrome_cleaner/pup_data:pup_data_base",
    "//chrome/chrome_cleaner/pup_data:test_uws",
    "//testing/gtest",
  ]
}

source_set("unittest_sources") {
  testonly = true

  sources = [
    "reboot_deletion_helper_unittest.cc",
    "test_util_unittest.cc",
  ]

  deps = [
    ":test_util",
    "//base",
    "//base/test:test_support",
    "//chrome/chrome_cleaner/os:common_os",
    "//testing/gtest",
  ]
}

executable("test_process") {
  testonly = true

  sources = [
    "test_process_main.cc",
  ]

  deps = [
    ":test_strings",
    ":test_util",
    "//base:base",
    "//base/test:test_support",
    "//build/win:default_exe_manifest",
    "//chrome/chrome_cleaner/os:common_os",
  ]
}

executable("test_service") {
  testonly = true

  sources = [
    "test_service_main.cc",
  ]

  deps = [
    ":test_strings",
    "//base:base",
    "//base/test:test_support",
    "//build/win:default_exe_manifest",
  ]
}
