# 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("//remoting/build/config/remoting_build.gni")
import("//remoting/remoting_locales.gni")

group("all") {
  testonly = true

  deps = [
    ":ios_core",
    "./app:all",
  ]
}

group("all_test") {
  testonly = true

  deps = [
    ":ios_core_unit_tests",
  ]
}

source_set("ios_core") {
  sources = [
    "client_gestures.h",
    "client_gestures.mm",
    "client_keyboard.h",
    "client_keyboard.mm",
  ]

  public_deps = [
    "//remoting/ios/domain",
    "//remoting/ios/facade",
    "//remoting/ios/session",
    "//third_party/webrtc/modules/desktop_capture:primitives",
    "//third_party/webrtc/rtc_base:rtc_base",
  ]

  deps = [
    "//base",
    "//remoting/protocol",
  ]

  libs = [
    "CoreGraphics.framework",
    "GLKit.framework",
    "OpenGLES.framework",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("ios_core_unit_tests") {
  testonly = true

  include_dirs = [
    "$root_gen_dir",
    "//third_party/protobuf/src",
  ]

  sources = []

  deps = [
    ":ios_core",
    "//testing/gtest",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]

  data = []
}

# test

test("ios_remoting_unittests") {
  deps = [
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//remoting//ios/facade:unit_tests",
    "//remoting/ios/persistence:unit_tests",
  ]

  foreach(locale, remoting_locales_with_underscores) {
    deps += [ ":unittests_locale_${locale}_bundle_data" ]
  }
}

foreach(locale, remoting_locales_with_underscores) {
  bundle_data("unittests_locale_${locale}_bundle_data") {
    sources = [
      "$root_out_dir/remoting/resources/$locale.lproj/locale.pak",
    ]
    outputs = [
      "{{bundle_resources_dir}}/$locale.lproj/{{source_file_part}}",
    ]
    public_deps = [
      "//remoting/resources:copy_locales",
    ]
  }
}
