Merge "Update ComplicationCollectionLiveDataTest" into udc-dev
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user