package org.robolectric.shadows; import android.app.Notification; import android.os.Parcel; import android.view.accessibility.AccessibilityEvent; import android.widget.TextView; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowAccessibilityEventTest { private AccessibilityEvent event; private ShadowAccessibilityEvent shadow; @Before public void setUp() { ShadowAccessibilityEvent.resetObtainedInstances(); assertThat(ShadowAccessibilityEvent.areThereUnrecycledEvents(true)).isEqualTo(false); event = ShadowAccessibilityEvent.obtain(); shadow = shadowOf(event); assertThat(shadow != null).isEqualTo(true); } @Test public void shouldHaveObtainedEvent() { assertThat(ShadowAccessibilityEvent.areThereUnrecycledEvents(false)).isEqualTo(true); } @Test public void shouldRecordParcelables() { final Notification notification = new Notification(); event.setParcelableData(notification); AccessibilityEvent anotherEvent = AccessibilityEvent.obtain(event); assertThat(anotherEvent.getParcelableData() instanceof Notification).isEqualTo(true); assertThat(anotherEvent.getParcelableData()).isEqualTo(notification); anotherEvent.recycle(); } @Test public void shouldEqualToClonedEvent() { shadow.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT); AccessibilityEvent newEvent = ShadowAccessibilityEvent.obtain(event); assertThat(shadow.equals(newEvent)).isEqualTo(true); newEvent.recycle(); } @Test public void shouldWriteAndReadFromParcelCorrectly() { Parcel p = Parcel.obtain(); event.setContentDescription("test"); event.writeToParcel(p, 0); p.setDataPosition(0); AccessibilityEvent anotherEvent = AccessibilityEvent.CREATOR.createFromParcel(p); assertThat(event).isEqualTo(anotherEvent); event.setContentDescription(null); anotherEvent.recycle(); } @Test public void shouldHaveCurrentSourceId() { TextView rootView = new TextView(RuntimeEnvironment.application); event.setSource(rootView); assertThat(shadow.getSourceRoot()).isEqualTo(rootView); assertThat(shadow.getVirtualDescendantId()).isEqualTo(ShadowAccessibilityRecord.NO_VIRTUAL_ID); event.setSource(rootView, 1); assertThat(shadow.getVirtualDescendantId()).isEqualTo(1); } @After public void tearDown() { shadow.recycle(); assertThat(ShadowAccessibilityEvent.areThereUnrecycledEvents(true)).isEqualTo(false); } }