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

source_set("history") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "clear_browsing_bar.h",
    "clear_browsing_bar.mm",
    "favicon_view.h",
    "favicon_view.mm",
    "favicon_view_provider.h",
    "favicon_view_provider.mm",
    "history_collection_view_controller.h",
    "history_collection_view_controller.mm",
    "history_entries_status_item.h",
    "history_entries_status_item.mm",
    "history_entry.cc",
    "history_entry.h",
    "history_entry_inserter.h",
    "history_entry_inserter.mm",
    "history_entry_item.h",
    "history_entry_item.mm",
    "history_panel_view_controller.h",
    "history_panel_view_controller.mm",
    "history_search_view.h",
    "history_search_view.mm",
    "history_search_view_controller.h",
    "history_search_view_controller.mm",
    "history_service_facade.h",
    "history_service_facade.mm",
    "history_service_facade_delegate.h",
    "history_util.h",
    "history_util.mm",
    "tab_history_cell.h",
    "tab_history_cell.mm",
    "tab_history_popup_controller.h",
    "tab_history_popup_controller.mm",
    "tab_history_view_controller.h",
    "tab_history_view_controller.mm",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//components/browser_sync",
    "//components/browsing_data/core",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/query_parser",
    "//components/strings",
    "//components/sync/protocol",
    "//components/url_formatter",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/favicon",
    "//ios/chrome/browser/history",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/collection_view",
    "//ios/chrome/browser/ui/collection_view/cells",
    "//ios/chrome/browser/ui/colors",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/context_menu",
    "//ios/chrome/browser/ui/icons",
    "//ios/chrome/browser/ui/keyboard",
    "//ios/chrome/browser/ui/material_components",
    "//ios/chrome/browser/ui/ntp/recent_tabs/views",
    "//ios/chrome/browser/ui/popup_menu",
    "//ios/chrome/browser/ui/settings",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/common",
    "//ios/third_party/material_components_ios",
    "//ios/third_party/material_roboto_font_loader_ios",
    "//ios/web",
    "//net",
    "//skia",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]
  libs = [
    "MobileCoreServices.framework",
    "QuartzCore.framework",
    "UIKit.framework",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "favicon_view_provider_unittest.mm",
    "history_entries_status_item_unittest.mm",
    "history_entry_inserter_unittest.mm",
    "history_entry_item_unittest.mm",
    "history_search_view_controller_unittest.mm",
    "history_util_unittest.mm",
    "tab_history_popup_controller_unittest.mm",
  ]
  deps = [
    ":history",
    ":resources_unit_tests",
    "//base",
    "//base/test:test_support",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/sessions",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/history",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/signin:test_support",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/collection_view",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/common",
    "//ios/chrome/test:test_support",
    "//ios/web",
    "//ios/web:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]

  public_deps = [
    ":unit_tests_arc",
  ]
  allow_circular_includes_from = [ ":unit_tests_arc" ]
}

source_set("unit_tests_arc") {
  testonly = true
  configs += [ "//build/config/compiler:enable_arc" ]

  sources = [
    "history_collection_view_controller_unittest.mm",
    "history_service_facade_unittest.mm",
  ]
  deps = [
    ":history",
    ":resources_unit_tests",
    "//base",
    "//base/test:test_support",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/sessions",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/history",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/signin:test_support",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/collection_view",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/common",
    "//ios/chrome/test:test_support",
    "//ios/web",
    "//ios/web:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]
}

bundle_data("resources_unit_tests") {
  visibility = [
    ":unit_tests",
    ":unit_tests_arc",
  ]
  testonly = true
  sources = [
    "//ios/chrome/test/data/favicon/test_favicon.png",
  ]
  outputs = [
    "{{bundle_resources_dir}}/" +
        "ios/chrome/test/data/favicon/{{source_file_part}}",
  ]
}

source_set("eg_tests") {
  testonly = true
  sources = [
    "history_ui_egtest.mm",
    "tab_history_popup_controller_egtest.mm",
  ]
  deps = [
    ":history",
    "//base",
    "//components/browsing_data/core",
    "//components/prefs",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/ui/settings",
    "//ios/chrome/browser/ui/tools_menu",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/common",
    "//ios/chrome/test/app:test_support",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/public/provider/chrome/browser/signin",
    "//ios/public/provider/chrome/browser/signin:test_support",
    "//ios/testing:ios_test_support",
    "//ios/third_party/earl_grey",
    "//ios/web:test_support",
    "//net",
    "//ui/base",
  ]
  libs = [
    "UIKit.framework",
    "XCTest.framework",
  ]
}
