[CTS] NearbyDeviceParcelable CTS Test

Fix: 215435642
Fix: 215435371
Test: passed atest CtsNearbyFastPairTestCases:android.nearby.cts.NearbyDeviceParcelable
Change-Id: Ic10604323c04242abddeb94fdd28f5a390cdc25c
diff --git a/nearby/framework/java/android/nearby/NearbyDeviceParcelable.java b/nearby/framework/java/android/nearby/NearbyDeviceParcelable.java
index ed3cb7b..0f85519 100644
--- a/nearby/framework/java/android/nearby/NearbyDeviceParcelable.java
+++ b/nearby/framework/java/android/nearby/NearbyDeviceParcelable.java
@@ -16,7 +16,6 @@
 
 package android.nearby;
 
-
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -25,6 +24,9 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.util.Arrays;
+import java.util.Objects;
+
 /**
  * A data class representing scan result from Nearby Service. Scan result can come from multiple
  * mediums like BLE, Wi-Fi Aware, and etc.
@@ -134,6 +136,43 @@
     }
 
     /**
+     * Returns a string representation of this ScanRequest.
+     */
+    @Override
+    public String toString() {
+        return "NearbyDeviceParcelable["
+                + "name=" + mName
+                + ", medium=" + NearbyDevice.mediumToString(mMedium)
+                + ", rssi=" + mRssi
+                + ", bluetoothAddress=" + mBluetoothAddress
+                + ", fastPairModelId=" + mFastPairModelId
+                + ", data=" + Arrays.toString(mData)
+                + "]";
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (other instanceof NearbyDeviceParcelable) {
+            NearbyDeviceParcelable otherNearbyDeviceParcelable = (NearbyDeviceParcelable) other;
+            return  Objects.equals(mName, otherNearbyDeviceParcelable.mName)
+                    && (mMedium == otherNearbyDeviceParcelable.mMedium)
+                    && (mRssi == otherNearbyDeviceParcelable.mRssi)
+                    && (Objects.equals(
+                            mBluetoothAddress, otherNearbyDeviceParcelable.mBluetoothAddress))
+                    && (Objects.equals(
+                            mFastPairModelId, otherNearbyDeviceParcelable.mFastPairModelId))
+                    && (Arrays.equals(mData, otherNearbyDeviceParcelable.mData));
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(
+                mName, mMedium, mRssi, mBluetoothAddress, mFastPairModelId, Arrays.hashCode(mData));
+    }
+
+    /**
      * Gets the name of the NearbyDeviceParcelable. Returns {@code null} If there is no name.
      */
     @Nullable
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyDeviceParcelableTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyDeviceParcelableTest.java
new file mode 100644
index 0000000..16cab99
--- /dev/null
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/NearbyDeviceParcelableTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package android.nearby.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.nearby.NearbyDevice;
+import android.nearby.NearbyDeviceParcelable;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+public class NearbyDeviceParcelableTest {
+
+    private static final String BLUETOOTH_ADDRESS = "00:11:22:33:FF:EE";
+
+    /** Verify toString returns expected string. */
+    @Test
+    public void testToString() {
+        NearbyDeviceParcelable nearbyDeviceParcelable =  new NearbyDeviceParcelable.Builder()
+                .setName("testDevice")
+                .setMedium(NearbyDevice.Medium.BLE)
+                .setRssi(-60)
+                .setFastPairModelId(null)
+                .setBluetoothAddress(BLUETOOTH_ADDRESS)
+                .setData(null)
+                .build();
+
+        assertThat(nearbyDeviceParcelable.toString()).isEqualTo(
+                "NearbyDeviceParcelable[name=testDevice, medium=BLE, rssi=-60, "
+                        + "bluetoothAddress="
+                        + BLUETOOTH_ADDRESS + ", fastPairModelId=null, data=null]");
+    }
+
+    @Test
+    public void test_defaultNullFields() {
+        NearbyDeviceParcelable nearbyDeviceParcelable =  new NearbyDeviceParcelable.Builder()
+                .setMedium(NearbyDevice.Medium.BLE)
+                .setRssi(-60)
+                .build();
+
+        assertThat(nearbyDeviceParcelable.getName()).isNull();
+        assertThat(nearbyDeviceParcelable.getFastPairModelId()).isNull();
+        assertThat(nearbyDeviceParcelable.getBluetoothAddress()).isNull();
+        assertThat(nearbyDeviceParcelable.getData()).isNull();
+
+        assertThat(nearbyDeviceParcelable.getMedium()).isEqualTo(NearbyDevice.Medium.BLE);
+        assertThat(nearbyDeviceParcelable.getRssi()).isEqualTo(-60);
+    }
+}