Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 613bf477 authored by Ikram Gabiyev's avatar Ikram Gabiyev
Browse files

[PiP2] Increase PipTransitionState tests coverage

Adding more unit test cases in PipTransitionStateTest
to improve its unit test coverage as per go/pip-unit-test-coverage

Bug: 394938489
Flag: com.android.wm.shell.enable_pip2
Test: atest WMShellUnitTests:PipTransitionStateTest
Change-Id: I9625b34efeaf519c61e7f2bf3b9e843bed315355
parent a40cc071
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -27,11 +28,13 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.testing.AndroidTestingRunner;
import android.view.SurfaceControl;

import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.common.pip.PipDesktopState;
@@ -194,6 +197,25 @@ public class PipTransitionStateTest extends ShellTestCase {
        mPipTransitionState.setState(PipTransitionState.SCHEDULED_BOUNDS_CHANGE, extra);
    }

    @Test
    public void testAddSameStateChangedListener_changeState_receiveOneCallback() {
        // Choose an initial state.
        Bundle extra = new Bundle();
        extra.putParcelable(EXTRA_ENTRY_KEY, mEmptyParcelable);
        mPipTransitionState.setState(PipTransitionState.CHANGING_PIP_BOUNDS, extra);

        // Add the same PiP transition state changed listener twice.
        mStateChangedListener = mock(PipTransitionState.PipTransitionStateChangedListener.class);
        mPipTransitionState.addPipTransitionStateChangedListener(mStateChangedListener);
        mPipTransitionState.addPipTransitionStateChangedListener(mStateChangedListener);

        // Transition to a different valid state.
        mPipTransitionState.setState(PipTransitionState.CHANGED_PIP_BOUNDS);
        verify(mStateChangedListener, times(1)).onPipTransitionStateChanged(
                eq(PipTransitionState.CHANGING_PIP_BOUNDS),
                eq(PipTransitionState.CHANGED_PIP_BOUNDS), isNull());
    }

    @Test
    public void testResetOnIdlePipTransitionStateRunnable_whileIdle_removePrevRunnable() {
        when(mMainHandler.obtainMessage(anyInt())).thenAnswer(invocation ->
@@ -244,4 +266,31 @@ public class PipTransitionStateTest extends ShellTestCase {
        Assert.assertNull("onIdle runnable not cleared",
                mPipTransitionState.getOnIdlePipTransitionStateRunnable());
    }

    @Test
    public void testPostState_noImmediateStateChange_postedOnHandler() {
        mPipTransitionState.setState(PipTransitionState.UNDEFINED);
        mPipTransitionState.postState(PipTransitionState.SCHEDULED_ENTER_PIP);
        Assert.assertEquals(PipTransitionState.UNDEFINED, mPipTransitionState.getState());
        verify(mMainHandler, times(1)).post(any());
    }

    @Test
    public void testSetSwipePipToHomeState_thenResetSwipePipToHomeState() {
        final SurfaceControl overlay = mock(SurfaceControl.class);
        final Rect appBounds = new Rect(0, 0, 100, 100);
        mPipTransitionState.setSwipePipToHomeState(overlay, appBounds);

        Assert.assertTrue("Not in swipe PiP to home transition",
                mPipTransitionState.isInSwipePipToHomeTransition());
        Assert.assertEquals(overlay, mPipTransitionState.getSwipePipToHomeOverlay());
        Assert.assertEquals(appBounds, mPipTransitionState.getSwipePipToHomeAppBounds());

        mPipTransitionState.resetSwipePipToHomeState();
        Assert.assertFalse("swipe PiP to home transition flag not cleared",
                mPipTransitionState.isInSwipePipToHomeTransition());
        Assert.assertNull("swipe PiP to home overlay not cleared",
                mPipTransitionState.getSwipePipToHomeOverlay());
        Assert.assertEquals(new Rect(), mPipTransitionState.getSwipePipToHomeAppBounds());
    }
}