# 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",
  ]
  libs = [ "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/gtest:gtest",
    "../../third_party/mini_chromium:base",
  ]
  libs = [ "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" ]
}
