From 4e4673898ca3d35afe99497dccf1d33506410f16 Mon Sep 17 00:00:00 2001 From: Googler Date: Thu, 4 Apr 2024 15:34:29 -0700 Subject: [PATCH] Adding ability to clear list of sent VirtualSensorEvents from ShadowVirtualSensor. ShadowVirtualSensor.getSentEvents() would leak data in between tests and this adds the ability to clear the list PiperOrigin-RevId: 621990558 --- .../shadows/ShadowVirtualSensorTest.java | 59 +++++++++++++++++++ .../shadows/ShadowVirtualSensor.java | 13 ++-- 2 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 robolectric/src/test/java/org/robolectric/shadows/ShadowVirtualSensorTest.java diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowVirtualSensorTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowVirtualSensorTest.java new file mode 100644 index 00000000000..719f04acaa3 --- /dev/null +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowVirtualSensorTest.java @@ -0,0 +1,59 @@ +package org.robolectric.shadows; + +import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; +import static com.google.common.truth.Truth.assertThat; + +import android.companion.virtual.sensor.VirtualSensor; +import android.companion.virtual.sensor.VirtualSensorEvent; +import android.hardware.Sensor; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; + +/** Unit test for ShadowVirtualSensor. */ +@Config(minSdk = UPSIDE_DOWN_CAKE) +@RunWith(RobolectricTestRunner.class) +public class ShadowVirtualSensorTest { + + @Test + public void virtualSensor_getDeviceId() { + VirtualSensor sensor = (VirtualSensor) createVirtualSensor(); + ((ShadowVirtualSensor) Shadow.extract(sensor)).setDeviceId(121); + assertThat(sensor.getDeviceId()).isEqualTo(121); + } + + @Test + public void virtualSensor_getEvents() { + VirtualSensor sensor = (VirtualSensor) createVirtualSensor(); + VirtualSensorEvent event = + new VirtualSensorEvent.Builder(new float[] {12f}) + .setTimestampNanos(System.nanoTime()) + .build(); + + sensor.sendEvent(event); + + assertThat(((ShadowVirtualSensor) Shadow.extract(sensor)).getSentEvents()) + .containsExactly(event); + } + + @Test + public void virtualSensor_clearEvents() { + VirtualSensor sensor = (VirtualSensor) createVirtualSensor(); + ShadowVirtualSensor virtualSensor = (ShadowVirtualSensor) Shadow.extract(sensor); + VirtualSensorEvent event = + new VirtualSensorEvent.Builder(new float[] {12f}) + .setTimestampNanos(System.nanoTime()) + .build(); + + sensor.sendEvent(event); + assertThat(virtualSensor.getSentEvents()).containsExactly(event); + virtualSensor.clearSentEvents(); + assertThat(virtualSensor.getSentEvents()).isEmpty(); + } + + private /* VirtualSensor */ Object createVirtualSensor() { + return new VirtualSensor(1, Sensor.TYPE_ACCELEROMETER, "some name", null, null); + } +} diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVirtualSensor.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVirtualSensor.java index 9a745d9ee0d..37114956ddb 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVirtualSensor.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVirtualSensor.java @@ -2,6 +2,7 @@ import android.companion.virtual.sensor.VirtualSensor; import android.companion.virtual.sensor.VirtualSensorEvent; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; import org.robolectric.annotation.Implementation; @@ -9,11 +10,7 @@ import org.robolectric.versioning.AndroidVersions.U; /** Shadow for VirtualSensor. */ -@Implements( - value = VirtualSensor.class, - minSdk = U.SDK_INT, - // TODO: remove when minimum supported compileSdk is >= 34 - isInAndroidSdk = false) +@Implements(value = VirtualSensor.class, minSdk = U.SDK_INT) public class ShadowVirtualSensor { private int deviceId = 0; @@ -30,7 +27,11 @@ protected void sendEvent(VirtualSensorEvent event) { } public List getSentEvents() { - return sentEvents; + return ImmutableList.copyOf(sentEvents); + } + + public void clearSentEvents() { + sentEvents.clear(); } void setDeviceId(int deviceId) {