# 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("//build/config/ios/rules.gni")
import("//ios/build/chrome_build.gni")
import("//ios/build/config.gni")
import("//ios/third_party/earl_grey2/ios_eg2_test.gni")

ios_app_bundle("showcase") {
  info_plist = "core/Info.plist"
  extra_substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
  output_name = "Showcase"
  deps = [
    ":features",
    "//ios/showcase/core:main",
  ]
  bundle_deps = [ "//ios/showcase/core/resources" ]
  if (ios_enable_credential_provider_extension) {
    bundle_deps +=
        [ "//ios/chrome/credential_provider_extension:system_strings" ]
  }
  assert_no_deps = ios_assert_no_deps
}

group("features") {
  deps = [
    "//ios/showcase/alert",
    "//ios/showcase/badges",
    "//ios/showcase/bubble",
    "//ios/showcase/content_suggestions",
    "//ios/showcase/credential_provider",
    "//ios/showcase/default_browser",
    "//ios/showcase/first_run",
    "//ios/showcase/incognito_reauth",
    "//ios/showcase/infobars",
    "//ios/showcase/omnibox_popup",
    "//ios/showcase/recent_tabs",
    "//ios/showcase/settings",
    "//ios/showcase/tab_grid",
    "//ios/showcase/text_badge_view",
    "//ios/showcase/uikit_table_view_cell",
    "//ios/showcase/widget",
  ]
}

group("all_tests") {
  testonly = true
  deps = [ ":ios_showcase_eg2tests" ]
}

ios_eg2_test_app_host("ios_showcase_eg2tests") {
  info_plist = "core/Info.plist"
  extra_substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
  deps = [
    ":features",
    "//ios/showcase/core:main_eg2",
    "//ios/showcase/test:eg_app_support+eg2",
    "//ios/testing/earl_grey:eg_app_support+eg2",
  ]
  bundle_deps = [
    "//ios/chrome/app/resources",
    "//ios/showcase/core/resources",
    "//ios/third_party/earl_grey2:app_framework+bundle",
    "//ios/third_party/gtx:gtx+bundle",
  ]

  assert_no_deps = ios_assert_no_deps
}

ios_eg2_test("ios_showcase_eg2tests_module") {
  xcode_test_application_name = "ios_showcase_eg2tests"

  xctest_bundle_principal_class = "ChromeEGTestBundleMain"
  deps = [
    "//ios/showcase/badges:eg2_tests",
    "//ios/showcase/bubble:eg2_tests",
    "//ios/showcase/content_suggestions:eg2_tests",
    "//ios/showcase/core:eg2_tests",
    "//ios/showcase/credential_provider:eg2_tests",
    "//ios/showcase/default_browser:eg2_tests",
    "//ios/showcase/infobars:eg2_tests",
    "//ios/showcase/text_badge_view:eg2_tests",
  ]
  bundle_deps = [ "//ios/showcase/core/resources" ]
  data_deps = [ ":ios_showcase_eg2tests" ]
}
