# 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("//device/vr/buildflags/buildflags.gni")
import("//testing/test.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")  # For generate_jni().
}

if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}

is_linux_without_udev = is_linux && !use_udev

test("device_unittests") {
  sources = [
    "base/synchronization/one_writer_seqlock_unittest.cc",
    "bluetooth/bluetooth_adapter_mac_unittest.mm",
    "bluetooth/bluetooth_adapter_unittest.cc",
    "bluetooth/bluetooth_adapter_win_unittest.cc",
    "bluetooth/bluetooth_advertisement_unittest.cc",
    "bluetooth/bluetooth_device_unittest.cc",
    "bluetooth/bluetooth_device_win_unittest.cc",
    "bluetooth/bluetooth_discovery_filter_unittest.cc",
    "bluetooth/bluetooth_local_gatt_characteristic_unittest.cc",
    "bluetooth/bluetooth_local_gatt_descriptor_unittest.cc",
    "bluetooth/bluetooth_local_gatt_service_unittest.cc",
    "bluetooth/bluetooth_low_energy_advertisement_manager_mac_unittest.mm",
    "bluetooth/bluetooth_low_energy_win_unittest.cc",
    "bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc",
    "bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc",
    "bluetooth/bluetooth_remote_gatt_service_unittest.cc",
    "bluetooth/bluetooth_service_record_win_unittest.cc",
    "bluetooth/bluetooth_task_manager_win_unittest.cc",
    "bluetooth/bluetooth_uuid_unittest.cc",
    "bluetooth/device_unittest.cc",
    "bluetooth/string_util_icu_unittest.cc",
    "bluetooth/test/bluetooth_gatt_server_test.cc",
    "bluetooth/test/bluetooth_gatt_server_test.h",
    "bluetooth/test/bluetooth_test.cc",
    "bluetooth/test/bluetooth_test.h",
    "bluetooth/test/bluetooth_test_android.cc",
    "bluetooth/test/bluetooth_test_android.h",
    "bluetooth/test/bluetooth_test_mac.h",
    "bluetooth/test/bluetooth_test_mac.mm",
    "bluetooth/test/bluetooth_test_win.cc",
    "bluetooth/test/bluetooth_test_win.h",
    "bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h",
    "bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm",
    "bluetooth/test/mock_bluetooth_cbdescriptor_mac.h",
    "bluetooth/test/mock_bluetooth_cbdescriptor_mac.mm",
    "bluetooth/test/mock_bluetooth_cbperipheral_mac.h",
    "bluetooth/test/mock_bluetooth_cbperipheral_mac.mm",
    "bluetooth/test/mock_bluetooth_cbservice_mac.h",
    "bluetooth/test/mock_bluetooth_cbservice_mac.mm",
    "bluetooth/test/mock_bluetooth_central_manager_mac.h",
    "bluetooth/test/mock_bluetooth_central_manager_mac.mm",
    "bluetooth/test/test_bluetooth_adapter_observer.cc",
    "bluetooth/test/test_bluetooth_adapter_observer.h",
    "bluetooth/test/test_bluetooth_advertisement_observer.cc",
    "bluetooth/test/test_bluetooth_advertisement_observer.h",
    "bluetooth/test/test_bluetooth_local_gatt_service_delegate.cc",
    "bluetooth/test/test_bluetooth_local_gatt_service_delegate.h",
    "bluetooth/test/test_pairing_delegate.cc",
    "bluetooth/test/test_pairing_delegate.h",
    "bluetooth/uribeacon/uri_encoder_unittest.cc",
    "fido/attestation_statement_formats_unittest.cc",
    "fido/ble/fido_ble_connection_unittest.cc",
    "fido/ble/fido_ble_device_unittest.cc",
    "fido/ble/fido_ble_frames_unittest.cc",
    "fido/ble/fido_ble_pairing_delegate_unittest.cc",
    "fido/ble/fido_ble_transaction_unittest.cc",
    "fido/ble_adapter_manager_unittest.cc",
    "fido/cable/fido_cable_device_unittest.cc",
    "fido/cable/fido_cable_discovery_unittest.cc",
    "fido/cable/fido_cable_handshake_handler_unittest.cc",
    "fido/ctap_request_unittest.cc",
    "fido/ctap_response_unittest.cc",
    "fido/fake_fido_discovery_unittest.cc",
    "fido/fido_device_discovery_unittest.cc",
    "fido/fido_parsing_utils_unittest.cc",
    "fido/fido_request_handler_unittest.cc",
    "fido/get_assertion_handler_unittest.cc",
    "fido/get_assertion_task_unittest.cc",
    "fido/hid/fido_hid_message_unittest.cc",
    "fido/mac/browsing_data_deletion_unittest.mm",
    "fido/mac/credential_metadata_unittest.cc",
    "fido/mac/get_assertion_operation_unittest_mac.mm",
    "fido/mac/make_credential_operation_unittest_mac.mm",
    "fido/mac/util_unittest.cc",
    "fido/make_credential_handler_unittest.cc",
    "fido/make_credential_task_unittest.cc",
    "fido/test_callback_receiver_unittest.cc",
    "fido/u2f_command_constructor_unittest.cc",
    "fido/u2f_register_operation_unittest.cc",
    "fido/u2f_sign_operation_unittest.cc",
    "gamepad/abstract_haptic_gamepad_unittest.cc",
    "gamepad/gamepad_id_list_unittest.cc",
    "gamepad/gamepad_provider_unittest.cc",
    "gamepad/gamepad_service_unittest.cc",
    "gamepad/hid_haptic_gamepad_base_unittest.cc",
    "gamepad/public/cpp/gamepad_mojom_traits_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  if (is_fuchsia) {
    sources += [
      "bluetooth/test/bluetooth_test_fuchsia.cc",
      "bluetooth/test/bluetooth_test_fuchsia.h",
    ]
  }

  deps = [
    "//base/test:test_support",
    "//base/third_party/dynamic_annotations:dynamic_annotations",
    "//components/apdu",
    "//components/cbor",
    "//device/base/synchronization",
    "//device/bluetooth",
    "//device/bluetooth:deprecated_experimental_mojo",
    "//device/bluetooth:mocks",
    "//device/bluetooth/uribeacon",
    "//device/fido",
    "//device/fido:mocks",
    "//device/fido:test_support",
    "//device/gamepad",
    "//device/gamepad:test_helpers",
    "//device/gamepad/public/cpp:shared_with_blink",
    "//device/gamepad/public/mojom",
    "//mojo/core/embedder",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/test_support:test_utils",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public:blink_headers",
    "//tools/usb_gadget",
    "//url",
  ]

  # U2F and Serial:
  # Android doesn't compile.
  # Linux, requires udev.
  if (!is_linux_without_udev && !is_android) {
    sources += [
      "fido/hid/fido_hid_device_unittest.cc",
      "fido/hid/fido_hid_discovery_unittest.cc",
    ]
    deps += [
      "//device/fido:test_support",
      "//services/device/public/cpp/hid",
      "//services/device/public/mojom",
      "//services/service_manager/public/cpp",
      "//services/service_manager/public/mojom",
    ]

    # Serial is supported in below platforms. See //device/servial/BUILD.gn
    if (is_win || is_linux || is_mac) {
      sources += [ "serial/serial_device_enumerator_unittest.cc" ]
      deps += [ "//device/serial" ]
      if (is_linux || is_mac) {
        sources += [ "serial/serial_io_handler_posix_unittest.cc" ]
      }
    }
  }

  if (use_udev) {
    sources += [ "udev_linux/udev_unittest.cc" ]
    deps += [ "//device/udev_linux" ]
  }

  # USB does not compile on iOS.
  if (!is_ios) {
    sources += [
      "test/test_device_client.cc",
      "test/test_device_client.h",
      "usb/mojo/device_impl_unittest.cc",
      "usb/mojo/device_manager_impl_unittest.cc",
      "usb/public/cpp/usb_utils_unittest.cc",
      "usb/usb_descriptors_unittest.cc",
      "usb/usb_device_handle_unittest.cc",
      "usb/usb_service_unittest.cc",
      "usb/webusb_descriptors_unittest.cc",
    ]
    deps += [
      ":usb_test_gadget",
      "//device/base",
      "//device/base:mocks",
      "//device/usb",
      "//device/usb:test_support",
      "//device/usb/mojo",
      "//device/usb/public/cpp",
      "//device/usb/public/mojom",
      "//net:test_support",
    ]

    if (!is_android) {
      sources += [ "usb/usb_ids_unittest.cc" ]
    }
  }

  # UsbContext is a libusb-specific object.
  if (is_mac || is_win) {
    sources += [ "usb/usb_context_unittest.cc" ]
    deps += [ "//third_party/libusb" ]
  }

  if (is_android) {
    deps += [
      ":bluetooth_test_java",
      ":bluetooth_test_jni_headers",
      "//device/usb:java",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos",
      "//chromeos:test_support",
      "//chromeos:test_support_without_gmock",
    ]
  }

  if ((is_chromeos || is_linux) && use_dbus) {
    configs += [ "//build/config/linux/dbus" ]

    sources += [
      "bluetooth/bluez/bluetooth_adapter_profile_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_advertisement_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_service_attribute_value_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_service_record_bluez_unittest.cc",
      "bluetooth/bluez/bluetooth_socket_bluez_unittest.cc",
      "bluetooth/dbus/bluetooth_gatt_application_service_provider_unittest.cc",
      "bluetooth/test/bluetooth_test_bluez.cc",
      "bluetooth/test/bluetooth_test_bluez.h",
    ]

    deps += [ "//dbus" ]
  }

  if (is_linux) {
    if (is_chromecast) {
      # Cast does not support GATT server mode.
      sources -= [
        "bluetooth/bluetooth_local_gatt_characteristic_unittest.cc",
        "bluetooth/bluetooth_local_gatt_descriptor_unittest.cc",
        "bluetooth/bluetooth_local_gatt_service_unittest.cc",
      ]

      sources += [
        "bluetooth/cast/bluetooth_adapter_cast_unittest.cc",
        "bluetooth/cast/bluetooth_utils_unittest.cc",
        "bluetooth/test/bluetooth_test_cast.cc",
        "bluetooth/test/bluetooth_test_cast.h",
      ]

      deps += [
        "//chromecast/device/bluetooth:util",
        "//chromecast/device/bluetooth/le",
        "//chromecast/device/bluetooth/le:test_support",
        "//chromecast/device/bluetooth/shlib:mock_shlib",
      ]
    } else {
      # BLE discovery: works on Linux.
      sources += [ "fido/ble/fido_ble_discovery_unittest.cc" ]
    }
  }

  if (is_mac) {
    deps += [ "//third_party/ocmock" ]
    ldflags = [ "-ObjC" ]
    libs = [
      "IOBluetooth.framework",
      "IOKit.framework",
    ]

    # In the OSX 10.10 SDK, CoreBluetooth became a top level framework.
    # Previously, it was nested in IOBluetooth. In order for Chrome to run on
    # OSes older than OSX 10.10, the top level CoreBluetooth framework must be
    # weakly linked.
    if (mac_sdk_version == "10.10") {
      ldflags += [
        "-weak_framework",
        "CoreBluetooth",
      ]
    }
  }

  if (is_win) {
    sources += [
      "bluetooth/bluetooth_classic_win_fake.cc",
      "bluetooth/bluetooth_classic_win_fake.h",
      "bluetooth/bluetooth_low_energy_win_fake.cc",
      "bluetooth/bluetooth_low_energy_win_fake.h",
      "bluetooth/test/fake_bluetooth_adapter_winrt.cc",
      "bluetooth/test/fake_bluetooth_adapter_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_data_section_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_data_section_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_status_changed_event_args_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_publisher_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_received_event_args_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_received_event_args_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_watcher_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_watcher_winrt.h",
      "bluetooth/test/fake_bluetooth_le_advertisement_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_advertisement_winrt.h",
      "bluetooth/test/fake_bluetooth_le_device_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_device_winrt.h",
      "bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.cc",
      "bluetooth/test/fake_bluetooth_le_manufacturer_data_winrt.h",
      "bluetooth/test/fake_device_information_custom_pairing_winrt.cc",
      "bluetooth/test/fake_device_information_custom_pairing_winrt.h",
      "bluetooth/test/fake_device_information_pairing_winrt.cc",
      "bluetooth/test/fake_device_information_pairing_winrt.h",
      "bluetooth/test/fake_device_information_winrt.cc",
      "bluetooth/test/fake_device_information_winrt.h",
      "bluetooth/test/fake_device_pairing_requested_event_args_winrt.cc",
      "bluetooth/test/fake_device_pairing_requested_event_args_winrt.h",
      "bluetooth/test/fake_device_pairing_result_winrt.cc",
      "bluetooth/test/fake_device_pairing_result_winrt.h",
      "bluetooth/test/fake_device_watcher_winrt.cc",
      "bluetooth/test/fake_device_watcher_winrt.h",
      "bluetooth/test/fake_gatt_characteristic_winrt.cc",
      "bluetooth/test/fake_gatt_characteristic_winrt.h",
      "bluetooth/test/fake_gatt_characteristics_result_winrt.cc",
      "bluetooth/test/fake_gatt_characteristics_result_winrt.h",
      "bluetooth/test/fake_gatt_descriptor_winrt.cc",
      "bluetooth/test/fake_gatt_descriptor_winrt.h",
      "bluetooth/test/fake_gatt_descriptors_result_winrt.cc",
      "bluetooth/test/fake_gatt_descriptors_result_winrt.h",
      "bluetooth/test/fake_gatt_device_service_winrt.cc",
      "bluetooth/test/fake_gatt_device_service_winrt.h",
      "bluetooth/test/fake_gatt_device_services_result_winrt.cc",
      "bluetooth/test/fake_gatt_device_services_result_winrt.h",
      "bluetooth/test/fake_gatt_read_result_winrt.cc",
      "bluetooth/test/fake_gatt_read_result_winrt.h",
      "bluetooth/test/fake_gatt_value_changed_event_args_winrt.cc",
      "bluetooth/test/fake_gatt_value_changed_event_args_winrt.h",
      "bluetooth/test/fake_gatt_write_result_winrt.cc",
      "bluetooth/test/fake_gatt_write_result_winrt.h",
      "bluetooth/test/fake_radio_winrt.cc",
      "bluetooth/test/fake_radio_winrt.h",
    ]
  }

  if (enable_vr) {
    sources += [
      "vr/orientation/orientation_device_provider_unittest.cc",
      "vr/orientation/orientation_device_unittest.cc",
      "vr/vr_device_base_unittest.cc",
      "vr/vr_display_impl_unittest.cc",
    ]

    if (is_android) {
      deps += [ "//device/vr:java" ]
    }

    defines = [ "DEVICE_VR_IMPLEMENTATION" ]

    deps += [
      "//device/vr",
      "//device/vr:fakes",
      "//device/vr/public/mojom",
      "//services/device/public/cpp/generic_sensor",
      "//ui/display",
      "//ui/display:test_support",
    ]
  }
}

source_set("usb_test_gadget") {
  testonly = true

  sources = [
    "test/usb_test_gadget.h",
    "test/usb_test_gadget_impl.cc",
  ]

  deps = [
    "//device/base",
    "//device/usb",
    "//net:test_support",
  ]
}

if (is_android) {
  bluetooth_java_sources_needing_jni = [
    "bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java",
  ]

  generate_jni("bluetooth_test_jni_headers") {
    sources = bluetooth_java_sources_needing_jni
    jni_package = "bluetooth"
  }

  android_library("bluetooth_test_java") {
    testonly = true
    java_files = bluetooth_java_sources_needing_jni
    deps = [
      "//base:base_java",
      "//components/location/android:location_java",
      "//device/bluetooth:java",
      "//third_party/android_deps:android_support_annotations_java",
      "//third_party/android_tools:android_test_mock_java",
    ]

    srcjar_deps = [ ":bluetooth_test_javagen" ]
  }

  junit_binary("device_junit_tests") {
    java_files = [ "gamepad/android/junit/src/org/chromium/device/gamepad/GamepadMappingsTest.java" ]
    deps = [
      "$google_play_services_package:google_play_services_base_java",
      "$google_play_services_package:google_play_services_basement_java",
      "$google_play_services_package:google_play_services_location_java",
      "//base:base_java",
      "//base:base_java_test_support",
      "//base:base_junit_test_support",
      "//device/gamepad:java",
      "//mojo/public/java:bindings_java",
      "//third_party/android_deps:android_support_annotations_java",
    ]
    srcjar_deps = [ "//device/gamepad:java_enums_srcjar" ]
  }

  java_cpp_enum("bluetooth_test_javagen") {
    sources = [
      "bluetooth/test/bluetooth_test.h",
    ]
  }
}
