Merge "Update ComplicationCollectionLiveDataTest" into udc-dev

This commit is contained in:
Lucas Silva
2023-04-06 20:02:17 +00:00
committed by Android (Google) Code Review

View File

@@ -18,8 +18,8 @@ package com.android.systemui.dreams.complication;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper; import android.testing.TestableLooper;
@@ -29,23 +29,45 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@SmallTest @SmallTest
@RunWith(AndroidTestingRunner.class) @RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper @TestableLooper.RunWithLooper(setAsMainLooper = true)
public class ComplicationCollectionLiveDataTest extends SysuiTestCase { public class ComplicationCollectionLiveDataTest extends SysuiTestCase {
private FakeExecutor mExecutor;
private DreamOverlayStateController mStateController;
private ComplicationCollectionLiveData mLiveData;
private FakeFeatureFlags mFeatureFlags;
@Mock
private Observer mObserver;
@Before @Before
public void setUp() throws Exception { public void setUp() {
allowTestableLooperAsMainThread(); MockitoAnnotations.initMocks(this);
mFeatureFlags = new FakeFeatureFlags();
mExecutor = new FakeExecutor(new FakeSystemClock());
mFeatureFlags.set(Flags.ALWAYS_SHOW_HOME_CONTROLS_ON_DREAMS, true);
mStateController = new DreamOverlayStateController(
mExecutor,
/* overlayEnabled= */ true,
mFeatureFlags);
mLiveData = new ComplicationCollectionLiveData(mStateController);
} }
@Test @Test
@@ -53,45 +75,41 @@ public class ComplicationCollectionLiveDataTest extends SysuiTestCase {
* Ensures registration and callback lifecycles are respected. * Ensures registration and callback lifecycles are respected.
*/ */
public void testLifecycle() { public void testLifecycle() {
getContext().getMainExecutor().execute(() -> { final HashSet<Complication> complications = new HashSet<>();
final DreamOverlayStateController stateController = mLiveData.observeForever(mObserver);
Mockito.mock(DreamOverlayStateController.class); mExecutor.runAllReady();
final ComplicationCollectionLiveData liveData = // Verify observer called with empty complications
new ComplicationCollectionLiveData(stateController); assertObserverCalledWith(complications);
final HashSet<Complication> complications = new HashSet<>();
final Observer<Collection<Complication>> observer = Mockito.mock(Observer.class);
complications.add(Mockito.mock(Complication.class));
when(stateController.getComplications()).thenReturn(complications); addComplication(mock(Complication.class), complications);
assertObserverCalledWith(complications);
liveData.observeForever(observer); addComplication(mock(Complication.class), complications);
ArgumentCaptor<DreamOverlayStateController.Callback> callbackCaptor = assertObserverCalledWith(complications);
ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
verify(stateController).addCallback(callbackCaptor.capture()); mStateController.setAvailableComplicationTypes(0);
verifyUpdate(observer, complications); mExecutor.runAllReady();
assertObserverCalledWith(complications);
complications.add(Mockito.mock(Complication.class)); mLiveData.removeObserver(mObserver);
callbackCaptor.getValue().onComplicationsChanged();
verifyUpdate(observer, complications);
callbackCaptor.getValue().onAvailableComplicationTypesChanged();
verifyUpdate(observer, complications);
});
} }
void verifyUpdate(Observer<Collection<Complication>> observer, private void assertObserverCalledWith(Collection<Complication> targetCollection) {
Collection<Complication> targetCollection) {
ArgumentCaptor<Collection<Complication>> collectionCaptor = ArgumentCaptor<Collection<Complication>> collectionCaptor =
ArgumentCaptor.forClass(Collection.class); ArgumentCaptor.forClass(Collection.class);
verify(observer).onChanged(collectionCaptor.capture()); verify(mObserver).onChanged(collectionCaptor.capture());
final Collection<Complication> collection = collectionCaptor.getValue();
final Collection collection = collectionCaptor.getValue();
assertThat(collection.containsAll(targetCollection) assertThat(collection.containsAll(targetCollection)
&& targetCollection.containsAll(collection)).isTrue(); && targetCollection.containsAll(collection)).isTrue();
Mockito.clearInvocations(observer); Mockito.clearInvocations(mObserver);
}
private void addComplication(Complication complication,
Collection<Complication> complications) {
complications.add(complication);
mStateController.addComplication(complication);
mExecutor.runAllReady();
} }
} }