# 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("//ios/chrome/test/earl_grey/chrome_ios_eg_test.gni")

group("all_tests") {
  testonly = true
  deps = [
    ":ios_chrome_device_check_egtests",
    ":ios_chrome_external_url_egtests",
    ":ios_chrome_flaky_egtests",
    ":ios_chrome_integration_egtests",
    ":ios_chrome_multitasking_egtests",
    ":ios_chrome_reading_list_egtests",
    ":ios_chrome_settings_egtests",
    ":ios_chrome_smoke_egtests",
    ":ios_chrome_ui_egtests",
    ":ios_chrome_web_egtests",
  ]
}

chrome_ios_eg_test("ios_chrome_integration_egtests") {
  deps = [
    "//ios/chrome/browser/autofill:eg_tests",
    "//ios/chrome/browser/context_menu:eg_tests",
    "//ios/chrome/browser/device_sharing:eg_tests",
    "//ios/chrome/browser/metrics:eg_tests",
    "//ios/chrome/browser/net:eg_tests",
  ]
}

chrome_ios_eg_test("ios_chrome_reading_list_egtests") {
  deps = [
    ":test_support",
    "//ios/chrome/browser/ui/reading_list:eg_tests",
  ]
}

chrome_ios_eg_test("ios_chrome_settings_egtests") {
  deps = [
    "//ios/chrome/browser/ui/settings:eg_tests",
  ]
}

chrome_ios_eg_test("ios_chrome_ui_egtests") {
  deps = [
    "//ios/chrome/app/safe_mode:eg_tests",
    "//ios/chrome/browser/ui:eg_tests",
    "//ios/chrome/browser/ui/activity_services:eg_tests",
    "//ios/chrome/browser/ui/alert_coordinator:eg_tests",
    "//ios/chrome/browser/ui/authentication:eg_tests",
    "//ios/chrome/browser/ui/bookmarks:eg_tests",
    "//ios/chrome/browser/ui/dialogs:eg_tests",
    "//ios/chrome/browser/ui/find_bar:eg_tests",
    "//ios/chrome/browser/ui/first_run:eg_tests",
    "//ios/chrome/browser/ui/history:eg_tests",
    "//ios/chrome/browser/ui/infobars:eg_tests",
    "//ios/chrome/browser/ui/ntp:eg_tests",
    "//ios/chrome/browser/ui/ntp/recent_tabs:eg_tests",
    "//ios/chrome/browser/ui/print:eg_tests",
    "//ios/chrome/browser/ui/qr_scanner:eg_tests",
    "//ios/chrome/browser/ui/stack_view:eg_tests",
    "//ios/chrome/browser/ui/sync:eg_tests",
    "//ios/chrome/browser/ui/tab_switcher:eg_tests",
    "//ios/chrome/browser/ui/tabs:eg_tests",
    "//ios/chrome/browser/ui/toolbar:eg_tests",
    "//ios/chrome/browser/ui/tools_menu:eg_tests",
    "//ios/chrome/browser/ui/webui:eg_tests",
  ]
}

chrome_ios_eg_test("ios_chrome_web_egtests") {
  deps = [
    "//ios/chrome/browser/web:eg_tests",
  ]
}

chrome_ios_eg_test("ios_chrome_multitasking_egtests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "//ios/chrome/app/multitasking_test_application_delegate.h",
    "//ios/chrome/app/multitasking_test_application_delegate.mm",
  ]

  deps = [
    ":test_support",
    "//base",
    "//ios/chrome/app:app_internal",
    "//ios/chrome/app/application_delegate:application_delegate_internal",

    # Depends on all EarlGrey test suites to create multitasking tests suite.
    ":ios_chrome_integration_egtests_deps_group",
    ":ios_chrome_settings_egtests_deps_group",
    ":ios_chrome_ui_egtests_deps_group",
    ":ios_chrome_web_egtests_deps_group",
  ]

  eg_main_application_delegate = "MultitaskingTestApplicationDelegate"
}

chrome_ios_eg_test("ios_chrome_device_check_egtests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "device_check_egtest.mm",
  ]
  deps = [
    ":test_support",
    "//ios/third_party/earl_grey",
    "//url",
  ]
}

chrome_ios_eg_test("ios_chrome_flaky_egtests") {
  deps = [
    ":test_support",
    "//base",

    # Depends on all EarlGrey test suites to run all the FLAKY_ tests found.
    # When adding a new test application, please follow the same pattern.
    ":ios_chrome_integration_egtests_deps_group",
    ":ios_chrome_settings_egtests_deps_group",
    ":ios_chrome_ui_egtests_deps_group",
    ":ios_chrome_web_egtests_deps_group",
  ]
}

chrome_ios_eg_test("ios_chrome_smoke_egtests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "smoke_egtest.mm",
  ]
  deps = [
    ":test_support",
    "//ios/chrome/test/app:test_support",
    "//ios/third_party/earl_grey",
  ]
  libs = [ "XCTest.framework" ]
}

chrome_ios_eg_test("ios_chrome_external_url_egtests") {
  deps = [
    "//ios/chrome/browser/metrics:external_url_eg_tests",
    "//ios/chrome/browser/translate:external_url_eg_tests",
    "//ios/chrome/browser/ui:external_url_eg_tests",
  ]
}

source_set("test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "accessibility_util.h",
    "accessibility_util.mm",
    "chrome_actions.h",
    "chrome_actions.mm",
    "chrome_assertions.h",
    "chrome_assertions.mm",
    "chrome_earl_grey.h",
    "chrome_earl_grey.mm",
    "chrome_earl_grey_ui.h",
    "chrome_earl_grey_ui.mm",
    "chrome_matchers.h",
    "chrome_matchers.mm",
    "chrome_test_case.h",
    "chrome_test_case.mm",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/collection_view/cells",
    "//ios/chrome/browser/ui/commands:commands",
    "//ios/chrome/browser/ui/omnibox:omnibox_internal",
    "//ios/chrome/browser/ui/settings:settings",
    "//ios/chrome/browser/ui/static_content",
    "//ios/chrome/browser/ui/toolbar",
    "//ios/chrome/browser/ui/tools_menu",
    "//ios/chrome/test/app:test_support",
    "//ios/testing:ios_test_support",
    "//ios/testing/earl_grey:earl_grey_support",
    "//ios/third_party/material_components_ios",
    "//ios/web",
    "//ios/web:earl_grey_test_support",
    "//ios/web/public/test",
    "//ios/web/public/test/http_server",
    "//ui/base",
    "//ui/base:test_support",
    "//url",
  ]

  public_deps = [
    "//build/config/ios:xctest",
    "//ios/third_party/earl_grey",
    "//ios/web/public/test/fakes",
  ]

  libs = [
    "OCHamcrest.framework",
    "WebKit.framework",
    "XCTest.framework",
  ]
}

source_set("hooks") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "eg_tests_hook.mm",
  ]
  deps = [
    "//ios/chrome/app:tests_hook",
  ]
}
