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

import("//printing/buildflags/buildflags.gni")
import("//ui/base/ui_features.gni")

source_set("test_support") {
  testonly = true

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

  deps = [
    "//components/content_settings/core/common",
    "//components/gcm_driver:gcm_driver",
    "//components/signin/core/browser",
    "//mojo/core/embedder",
    "//net",
    "//testing/gtest",
    "//ui/base",
    "//ui/resources:ui_test_pak",
  ]

  public_deps = [
    "//base/test:test_support",
  ]

  if (is_ios) {
    sources += [
      "ios_components_test_initializer.cc",
      "ios_components_test_initializer.h",
    ]

    deps += [ "//services/network:test_support" ]
  } else {
    deps += [
      "//components/invalidation/impl",
      "//components/policy/core/browser",
      "//ui/gl:test_support",
    ]

    public_deps += [ "//content/test:test_support" ]
  }

  if (enable_mus) {
    deps += [ "//ui/aura:test_support" ]
  }
}

# Defines a main() function that uses components_test_suite.h
source_set("run_all_unittests") {
  testonly = true

  sources = [
    "run_all_unittests.cc",
  ]

  deps = [
    ":test_support",
  ]
}
