# Copyright 2015 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("//build/config/ios/rules.gni")
import("//ios/build/config.gni")
import("//testing/test.gni")

bundle_data("ios_chrome_unittests_bundle_data") {
  testonly = true
  sources = [
    "test/data/webdata/bookmarkimages/image.jpg",
    "test/data/webdata/bookmarkimages/index.html",
    "test/data/webp_transcode/test.jpg",
    "test/data/webp_transcode/test.webp",
    "test/data/webp_transcode/test_alpha.png",
    "test/data/webp_transcode/test_alpha.webp",
    "test/data/webp_transcode/test_small.tiff",
    "test/data/webp_transcode/test_small.webp",
  ]
  outputs = [
    "{{bundle_resources_dir}}/{{source_root_relative_dir}}/" +
        "{{source_file_part}}",
  ]
}

bundle_data_xib("native_content_controller_test_xib") {
  testonly = true
  source = "browser/ui/native_content_controller_test.xib"
}

test("ios_chrome_unittests") {
  sources = [
    "app/application_delegate/memory_warning_helper_unittest.mm",
    "app/safe_mode_util_unittest.cc",
    "browser/chrome_url_util_unittest.mm",
    "browser/crash_loop_detection_util_unittest.mm",
    "browser/favicon/large_icon_cache_unittest.cc",
    "browser/geolocation/CLLocation+XGeoHeaderTest.mm",
    "browser/geolocation/location_manager_unittest.mm",
    "browser/geolocation/omnibox_geolocation_local_state_unittest.mm",
    "browser/install_time_util_unittest.mm",
    "browser/installation_notifier_unittest.mm",
    "browser/ios_chrome_io_thread_unittest.mm",
    "browser/itunes_links/itunes_links_observer_unittest.mm",
    "browser/metrics/ios_chrome_metrics_service_accessor_unittest.cc",
    "browser/metrics/ios_chrome_stability_metrics_provider_unittest.cc",
    "browser/metrics/mobile_session_shutdown_metrics_provider_unittest.mm",
    "browser/metrics/previous_session_info_unittest.mm",
    "browser/net/cookie_util_unittest.mm",
    "browser/net/image_fetcher_unittest.mm",
    "browser/net/metrics_network_client_unittest.mm",
    "browser/net/retryable_url_fetcher_unittest.mm",
    "browser/passwords/credential_manager_js_unittest.mm",
    "browser/passwords/credential_manager_unittest.mm",
    "browser/passwords/password_controller_js_unittest.mm",
    "browser/passwords/password_controller_off_the_record_unittest.mm",
    "browser/passwords/password_controller_unittest.mm",
    "browser/passwords/password_generation_agent_unittest.mm",
    "browser/reading_list/reading_list_entry_unittest.cc",
    "browser/reading_list/reading_list_model_storage_unittest.mm",
    "browser/reading_list/reading_list_model_unittest.cc",
    "browser/reading_list/url_downloader_unittest.cc",
    "browser/signin/chrome_identity_service_observer_bridge_unittest.mm",
    "browser/signin/gaia_auth_fetcher_ios_unittest.mm",
    "browser/snapshots/lru_cache_unittest.mm",
    "browser/snapshots/snapshot_cache_unittest.mm",
    "browser/snapshots/snapshots_util_unittest.mm",
    "browser/ssl/ios_ssl_error_handler_unittest.mm",
    "browser/translate/translate_service_ios_unittest.cc",
    "browser/ui/alert_coordinator/action_sheet_coordinator_unittest.mm",
    "browser/ui/alert_coordinator/alert_coordinator_unittest.mm",
    "browser/ui/alert_coordinator/input_alert_coordinator_unittest.mm",
    "browser/ui/commands/set_up_for_testing_command_unittest.mm",
    "browser/ui/context_menu/context_menu_coordinator_unittest.mm",
    "browser/ui/elements/selector_coordinator_unittest.mm",
    "browser/ui/elements/selector_picker_view_controller_unittest.mm",
    "browser/ui/keyboard/UIKeyCommand+ChromeTest.mm",
    "browser/ui/keyboard/hardware_keyboard_watcher_unittest.mm",
    "browser/ui/native_content_controller_unittest.mm",
    "browser/ui/ui_util_unittest.mm",
    "browser/ui/uikit_ui_util_unittest.mm",
    "browser/update_client/ios_chrome_update_query_params_delegate_unittest.cc",
    "browser/web_resource/web_resource_util_unittest.cc",
    "browser/webp_transcode/webp_decoder_unittest.mm",
    "common/string_util_unittest.mm",
    "test/google_toolbox_unittest.mm",
  ]

  deps = [
    ":ios_chrome_unittests_bundle_data",
    ":native_content_controller_test_xib",
    "//base",
    "//base/test:test_support",
    "//components/autofill/core/common:common",
    "//components/autofill/ios/browser:browser",
    "//components/bookmarks/test",
    "//components/favicon_base",
    "//components/metrics",
    "//components/metrics:test_support",
    "//components/password_manager/core/browser",
    "//components/password_manager/core/browser:test_support",
    "//components/password_manager/core/common",
    "//components/prefs:test_support",
    "//components/proxy_config:proxy_config",
    "//components/signin/core/browser:test_support",
    "//components/signin/ios/browser:test_support",
    "//components/ssl_config:ssl_config",
    "//components/sync:test_support_sync_driver",
    "//components/syncable_prefs:test_support",
    "//components/update_client",
    "//components/version_info",
    "//ios/chrome/app",
    "//ios/chrome/app/resources:packed_resources",
    "//ios/chrome/browser",
    "//ios/chrome/browser:test_support",
    "//ios/chrome/common",
    "//ios/chrome/test",
    "//ios/chrome/test:run_all_unittests",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser:test_support",
    "//ios/testing:ocmock_support",
    "//ios/web",
    "//ios/web:test_support",
    "//net:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/google_toolbox_for_mac",
    "//third_party/ocmock",
    "//ui/base:base",
    "//ui/gfx:test_support",
    "//ui/strings:ui_strings",
  ]

  assert_no_deps = ios_assert_no_deps
}
