# 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_grey/ios_eg_test.gni")
import("//ios/third_party/firebase/firebase.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" ]
  assert_no_deps = ios_assert_no_deps
}

group("features") {
  deps = [
    "//ios/showcase/alert",
    "//ios/showcase/bubble",
    "//ios/showcase/content_suggestions",
    "//ios/showcase/infobars",
    "//ios/showcase/omnibox_popup",
    "//ios/showcase/payments",
    "//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_egtests",
  ]
}

ios_eg_test("ios_showcase_egtests") {
  info_plist = "core/Info.plist"
  extra_substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
  deps = [
    ":features",
    "//ios/showcase/core:main",

    # Add all eg_tests targets below.
    "//ios/showcase/bubble:eg_tests",
    "//ios/showcase/content_suggestions:eg_tests",
    "//ios/showcase/core:eg_tests",
    "//ios/showcase/infobars:eg_tests",
    "//ios/showcase/payments:eg_tests",
    "//ios/showcase/text_badge_view:eg_tests",
  ]

  # TODO(crbug.com/870935): This dependency of ios_showcase_egtests on
  # Firebase SDK seems unnecessary. There must be some transitive
  # dependencies that eventually led to ios/chrome/app:app_internal.
  if (ios_enable_firebase_sdk) {
    deps += [ "//ios/third_party/firebase" ]
  }
  bundle_deps = [ "//ios/showcase/core/resources" ]
  assert_no_deps = ios_assert_no_deps
}
