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

bundle_data("resources") {
  sources = [
    "resources/border_frame_bottom.png",
    "resources/border_frame_bottom@2x.png",
    "resources/border_frame_bottom@3x.png",
    "resources/border_frame_incognito_bottom.png",
    "resources/border_frame_incognito_bottom@2x.png",
    "resources/border_frame_incognito_bottom@3x.png",
    "resources/border_frame_incognito_left.png",
    "resources/border_frame_incognito_left@2x.png",
    "resources/border_frame_incognito_left@3x.png",
    "resources/border_frame_incognito_right.png",
    "resources/border_frame_incognito_right@2x.png",
    "resources/border_frame_incognito_right@3x.png",
    "resources/border_frame_incognito_top.png",
    "resources/border_frame_incognito_top@2x.png",
    "resources/border_frame_incognito_top@3x.png",
    "resources/border_frame_left.png",
    "resources/border_frame_left@2x.png",
    "resources/border_frame_left@3x.png",
    "resources/border_frame_right.png",
    "resources/border_frame_right@2x.png",
    "resources/border_frame_right@3x.png",
    "resources/border_frame_top.png",
    "resources/border_frame_top@2x.png",
    "resources/border_frame_top@3x.png",
    "resources/card_close_button.png",
    "resources/card_close_button@2x.png",
    "resources/card_close_button@3x.png",
    "resources/card_close_button_incognito.png",
    "resources/card_close_button_incognito@2x.png",
    "resources/card_close_button_incognito@3x.png",
    "resources/card_close_button_pressed.png",
    "resources/card_close_button_pressed@2x.png",
    "resources/card_close_button_pressed@3x.png",
    "resources/card_frame_shadow.png",
    "resources/card_frame_shadow@2x.png",
    "resources/card_frame_shadow@3x.png",
    "resources/stack_view_background_noise.jpg",
    "resources/stack_view_background_noise@2x.jpg",
    "resources/stack_view_background_noise@2x~ipad.jpg",
    "resources/stack_view_background_noise@3x.jpg",
    "resources/stack_view_background_noise~ipad.jpg",
  ]
  outputs = [
    "{{bundle_resources_dir}}/{{source_file_part}}",
  ]
}

source_set("stack_view") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "card_set.h",
    "card_set.mm",
    "card_stack_layout_manager.h",
    "card_stack_layout_manager.mm",
    "card_stack_pinch_gesture_recognizer.h",
    "card_stack_pinch_gesture_recognizer.mm",
    "card_view.h",
    "card_view.mm",
    "close_button.h",
    "close_button.mm",
    "page_animation_util.h",
    "page_animation_util.mm",
    "stack_card.h",
    "stack_card.mm",
    "stack_view_controller.h",
    "stack_view_controller.mm",
    "stack_view_controller_private.h",
    "stack_view_toolbar_controller.h",
    "stack_view_toolbar_controller.mm",
    "title_label.h",
    "title_label.mm",
  ]
  deps = [
    ":resources",
    "//base",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/keyboard",
    "//ios/chrome/browser/ui/ntp",
    "//ios/chrome/browser/ui/ntp:ntp_internal",
    "//ios/chrome/browser/ui/tab_switcher",
    "//ios/chrome/browser/ui/tabs",
    "//ios/chrome/browser/ui/toolbar",
    "//ios/chrome/browser/ui/tools_menu",
    "//ios/chrome/common",
    "//ios/shared/chrome/browser/ui/tools_menu",
    "//ios/third_party/material_components_ios",
    "//ios/web",
    "//net",
    "//ui/base",
    "//ui/gfx",
  ]
  libs = [
    "CoreGraphics.framework",
    "QuartzCore.framework",
    "UIKit.framework",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "card_set_unittest.mm",
    "card_stack_layout_manager_unittest.mm",
    "stack_card_unittest.mm",
    "stack_view_controller_unittest.mm",
  ]
  deps = [
    ":stack_view",
    "//base",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui",
    "//ios/chrome/test:test_support",
    "//ios/testing:ocmock_support",
    "//testing/gtest",
    "//third_party/ocmock",
  ]
}

source_set("eg_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "stack_view_egtest.mm",
  ]
  deps = [
    ":stack_view",
    "//base",
    "//base/test:test_support",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui:ui_internal",
    "//ios/chrome/browser/ui/toolbar",
    "//ios/chrome/browser/ui/tools_menu",
    "//ios/chrome/test/app:test_support",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/testing:ios_test_support",
    "//ios/testing/earl_grey:earl_grey_support",
  ]
  libs = [ "XCTest.framework" ]
}

source_set("perf_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "stack_view_controller_perftest.mm",
  ]
  deps = [
    ":stack_view",
    "//base",
    "//base/test:test_support",
    "//ios/chrome/browser/snapshots",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/test:perf_test_support",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui:ui_internal",
    "//ios/web",
    "//net",
  ]
  libs = [ "UIKit.framework" ]
}
