// Copyright 2019 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.

#include "device/bluetooth/bluetooth_adapter_android.h"
#include "base/android/build_info.h"
#include "base/android/jni_string.h"
#include "base/bind.h"
#include "device/bluetooth/android/wrappers.h"
#include "device/bluetooth/bluetooth_discovery_filter.h"
#include "device/bluetooth/test/bluetooth_test_android.h"
#include "device/bluetooth_test_jni_headers/ChromeBluetoothScanFilter_jni.h"
#include "testing/gtest/include/gtest/gtest.h"

using base::android::AttachCurrentThread;

namespace device {

class BluetoothAdapterAndroidTest : public BluetoothTestAndroid {
 public:
  BluetoothAdapterAndroidTest() {
    InitWithoutDefaultAdapter();
    android_adapter_ = static_cast<BluetoothAdapterAndroid*>(adapter_.get());
  }

 protected:
  BluetoothAdapterAndroid* android_adapter_;
};

TEST_F(BluetoothAdapterAndroidTest, ScanFilterTest) {
  auto* build_info = base::android::BuildInfo::GetInstance();
  if (build_info->sdk_int() >= base::android::SDK_VERSION_LOLLIPOP) {
    auto discovery_filter =
        std::make_unique<BluetoothDiscoveryFilter>(BLUETOOTH_TRANSPORT_LE);
    std::string test_uuid = "00000000-0000-0000-8000-000000000001";
    std::string test_uuid2 = "00000000-0000-0000-8000-000000000002";
    BluetoothDiscoveryFilter::DeviceInfoFilter device_filter;
    device_filter.uuids.insert(BluetoothUUID(test_uuid));
    device_filter.uuids.insert(BluetoothUUID(test_uuid2));
    discovery_filter->AddDeviceFilter(device_filter);
    std::string test_uuid3 = "00000000-0000-0000-8000-000000000003";
    BluetoothDiscoveryFilter::DeviceInfoFilter device_filter2;
    std::string test_name = "test name";
    device_filter2.name = test_name;
    device_filter2.uuids.insert(BluetoothUUID(test_uuid3));
    discovery_filter->AddDeviceFilter(device_filter2);
    auto scan_filter_list_java_object =
        android_adapter_->CreateAndroidFilter(discovery_filter.get());
    auto scan_filter_java_object = Java_ChromeBluetoothScanFilter_getFromList(
        AttachCurrentThread(), scan_filter_list_java_object, /*index=*/0);
    auto scan_filter_java_object_2 = Java_ChromeBluetoothScanFilter_getFromList(
        AttachCurrentThread(), scan_filter_list_java_object, /*index=*/1);
    std::string uuid = ConvertJavaStringToUTF8(
        AttachCurrentThread(),
        Java_ChromeBluetoothScanFilter_getServiceUuid(AttachCurrentThread(),
                                                      scan_filter_java_object));
    EXPECT_EQ(uuid, test_uuid);
    std::string uuid3 = ConvertJavaStringToUTF8(
        AttachCurrentThread(),
        Java_ChromeBluetoothScanFilter_getServiceUuid(
            AttachCurrentThread(), scan_filter_java_object_2));
    EXPECT_EQ(uuid3, test_uuid3);
    std::string name = ConvertJavaStringToUTF8(
        AttachCurrentThread(),
        Java_ChromeBluetoothScanFilter_getDeviceName(
            AttachCurrentThread(), scan_filter_java_object_2));
    EXPECT_EQ(name, test_name);
  }
}

}  // namespace device
