# Copyright 2020 The Crashpad Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../../build/crashpad_buildconfig.gni")

if (crashpad_is_in_chromium) {
  import("//build/config/ios/rules.gni")
} else if (crashpad_is_standalone) {
  import("//third_party/mini_chromium/mini_chromium/build/ios/rules.gni")
}

group("all_tests") {
  testonly = true
  deps = [
    ":ios_crash_xcuitests_module",
    "host:ios_crash_xcuitests",
  ]
}

source_set("google_test_runner_shared_headers") {
  testonly = true
  sources = [ "cptest_google_test_runner_delegate.h" ]
}

source_set("google_test_runner") {
  testonly = true
  sources = [ "cptest_google_test_runner.mm" ]
  configs += [ "../..:crashpad_config" ]
  deps = [
    "../../build:ios_enable_arc",
    "../../build:ios_xctest",
    "../../test/ios:google_test_runner_shared_headers",
    "../../third_party/mini_chromium:base",
  ]
  frameworks = [ "UIKit.framework" ]
}

source_set("google_test_setup") {
  testonly = true
  sources = [
    "google_test_setup.h",
    "google_test_setup.mm",
  ]
  configs += [ "../..:crashpad_config" ]
  deps = [
    ":google_test_runner_shared_headers",
    "../../build:ios_enable_arc",
    "../../third_party/googletest:googletest",
    "../../third_party/mini_chromium:base",
  ]
  frameworks = [ "UIKit.framework" ]
}

source_set("xcuitests") {
  testonly = true
  sources = [ "crash_type_xctest.mm" ]
  configs += [ "../..:crashpad_config" ]
  deps = [
    "../../build:ios_enable_arc",
    "../../build:ios_xctest",
    "../../test/ios/host:app_shared_sources",
    "../../third_party/edo",
  ]
}

ios_xcuitest_test("ios_crash_xcuitests_module") {
  xcode_test_application_name = "ios_crash_xcuitests"
  deps = [ ":xcuitests" ]
}
