Skip to content

Commit

Permalink
Adding ability to clear list of sent VirtualSensorEvents from ShadowV…
Browse files Browse the repository at this point in the history
…irtualSensor

Within a single test suite, if you send VirtualSensorEvents to a ShadowVirtualSensor in testA then call ShadowVirtualSensor.getSentEvents() in testB, then you will see stale data leak from the last test. This new method will help clear stale stale between tests.

PiperOrigin-RevId: 621990558
  • Loading branch information
Googler authored and Copybara-Service committed Apr 22, 2024
1 parent d9d944c commit ce30005
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 6 deletions.
@@ -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);
}
}
Expand Up @@ -2,18 +2,15 @@

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;
import org.robolectric.annotation.Implements;
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;
Expand All @@ -30,7 +27,11 @@ protected void sendEvent(VirtualSensorEvent event) {
}

public List<VirtualSensorEvent> getSentEvents() {
return sentEvents;
return ImmutableList.copyOf(sentEvents);
}

public void clearSentEvents() {
sentEvents.clear();
}

void setDeviceId(int deviceId) {
Expand Down

0 comments on commit ce30005

Please sign in to comment.