# Copyright 2015 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/features.gni")
import("//build/config/ui.gni")
import("//build/util/version.gni")
import("//remoting/remoting_version.gni")
import("//remoting/remoting_enable.gni")
import("//testing/test.gni")

# Various remoting targets need this version definition.
config("version") {
  defines = [ "VERSION=$chrome_version_full" ]
}

config("enable_webrtc_remoting_client") {
  if (!is_official_build && !is_nacl) {
    defines = [ "ENABLE_WEBRTC_REMOTING_CLIENT=1" ]
  }
}

group("remoting_all") {
  testonly = true

  deps = [
    "//remoting:remoting_unittests",
    "//remoting/test:chromoting_test_driver",
    "//remoting/webapp:browser_test_resources",
    "//remoting/webapp:unit_tests",
  ]

  # TODO(GYP): add is_mac
  if ((is_linux && !is_chromeos) || is_win) {
    deps += [ "//remoting/webapp" ]
  }

  if (is_win) {
    deps += [
      "//remoting:remoting_breakpad_tester",
      "//remoting/host:remoting_console",
      "//remoting/host:remoting_desktop",
    ]

    if (is_chrome_branded) {
      deps += [ "//remoting/host:remoting_host_installation" ]
    }
  }

  if (is_android) {
    deps += [
      "//remoting/android:remoting_apk",
      "//remoting/android:remoting_test_apk",
    ]
  }

  if (enable_remoting_host) {
    deps += [
      "//remoting:remoting_perftests",
      "//remoting/host",
    ]

    if (!is_android) {
      deps += [ "//remoting/host:remoting_native_messaging_manifests" ]
    }

    if (!is_chromeos && !is_android) {
      deps += [
        "//remoting/host:remoting_start_host",
        "//remoting/host/it2me:remote_assistance_host",
      ]
    }
  }

  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host" ]
    if (is_chrome_branded) {
      deps += [ "//remoting/host:remoting_me2me_host_archive" ]
    }
  }

  if (enable_nacl) {
    deps += [ "//remoting/tools/javascript_key_tester" ]
  }
}

if (is_win) {
  # GYP version: remoting/remoting_host_win.gypi:remoting_breakpad_tester
  executable("remoting_breakpad_tester") {
    deps = [
      "//base",
      "//build/win:default_exe_manifest",
      "//remoting/host",
    ]

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

    sources = [
      "tools/breakpad_tester_win.cc",
    ]
  }
}

# GYP version: remoting/remoting_test.gypi:remoting_test_support
source_set("test_support") {
  testonly = true

  deps = [
    "//base",
    "//net",
    "//remoting/base",
    "//remoting/client",
    "//remoting/codec",
    "//remoting/protocol:test_support",
    "//remoting/resources",
    "//remoting/signaling:test_support",
    "//remoting/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_configuration_policy) {
    deps += [
      "//components/policy:test_support",

      # TODO(zijiehe): This should belong to //components/policy:test_support
      "//components/prefs",
    ]
  }

  if (enable_remoting_host) {
    deps += [ "//remoting/host:test_support" ]
  }
}

# TODO(GYP) remoting_unittests on Mac. Needs to be tested.
if (!is_mac) {
  test("remoting_unittests") {
    defines = []
    libs = []

    configs += [
      ":version",

      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
      "//build/config/compiler:no_size_t_to_int_warning",
    ]

    data = [
      "//net/data/ssl/certificates/ok_cert.pem",
      "//net/data/ssl/certificates/unittest.key.bin",
      "//net/data/ssl/certificates/unittest.selfsigned.der",
    ]

    deps = [
      ":test_support",
      "//base",
      "//google_apis",
      "//remoting/base:unit_tests",
      "//remoting/client:unit_tests",
      "//remoting/protocol:unit_tests",
      "//remoting/signaling:unit_tests",
      "//remoting/test:unit_tests",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/webrtc",
    ]

    if (enable_remoting_host) {
      deps += [
        "//remoting/codec:unit_tests",
        "//remoting/host:unit_tests",
        "//ui/gfx",
      ]
    }

    if (enable_webrtc) {
      deps += [ "//third_party/libjingle:libjingle_webrtc" ]
    }

    if (is_android) {
      deps += [ "//net/android:net_java" ]
    }

    if (is_win) {
      defines += [ "_ALT_NO_EXCEPTIONS" ]

      libs += [
        "rpcrt4.lib",
        "wtsapi32.lib",
      ]
    }

    if (enable_configuration_policy) {
      deps += [ "//components/policy:policy_component_test_support" ]
    }
  }

  if (enable_remoting_host) {
    test("remoting_perftests") {
      sources = [
        "test/codec_perftest.cc",
        "test/protocol_perftest.cc",
      ]

      configs += [ ":version" ]

      deps = [
        ":test_support",
        "//base",
        "//base/test:run_all_unittests",
        "//base/test:test_support",
        "//net:test_support",
        "//remoting/base",
        "//testing/gtest",
        "//third_party/libjingle",
        "//third_party/webrtc/modules/desktop_capture",
      ]

      if (enable_webrtc) {
        deps += [ "//third_party/libjingle:libjingle_webrtc" ]
      }
    }
  }
} else {
  group("remoting_unittests") {
  }
}
