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

Commit 48be50a5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Speed up sysui tests"

parents 81b840ea 3cfedd78
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -60,8 +60,6 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene

    private final QSDetailClipper mClipper;

    private PhoneStatusBar mPhoneStatusBar;

    private boolean isShown;
    private QSTileHost mHost;
    private RecyclerView mRecyclerView;
@@ -119,7 +117,6 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene

    public void setHost(QSTileHost host) {
        mHost = host;
        mPhoneStatusBar = host.getPhoneStatusBar();
        mTileAdapter.setHost(host);
    }

+0 −4
Original line number Diff line number Diff line
@@ -165,10 +165,6 @@ public class QSTileHost implements QSTile.Host, Tunable {
        mHeader = view;
    }

    public PhoneStatusBar getPhoneStatusBar() {
        return mStatusBar;
    }

    public void destroy() {
        mHandlerThread.quitSafely();
        mTiles.values().forEach(tile -> tile.destroy());
+13 −1
Original line number Diff line number Diff line
@@ -81,11 +81,23 @@ public class LayoutInflaterBuilder {
     * @return Builder object post-modification.
     */
    public LayoutInflaterBuilder replace(@NonNull Class from, @NonNull Class to) {
        return replace(from.getName(), to);
    }

    /**
     * Instructs the Builder to configure the LayoutInflater such that all instances
     * of one {@link View} will be replaced with instances of another during inflation.
     *
     * @param tag Instances of this tag will be replaced during inflation.
     * @param to Instances of this class will be inflated as replacements.
     * @return Builder object post-modification.
     */
    public LayoutInflaterBuilder replace(@NonNull String tag, @NonNull Class to) {
        assertIfAlreadyBuilt();
        if (mReplaceMap == null) {
            mReplaceMap = new ArrayMap<String, String>();
        }
        mReplaceMap.put(from.getName(), to.getName());
        mReplaceMap.put(tag, to.getName());
        return this;
    }

+47 −58
Original line number Diff line number Diff line
@@ -14,37 +14,31 @@

package com.android.systemui.qs;

import static junit.framework.Assert.assertEquals;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.Resources;
import android.os.Handler;
import android.os.Looper;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableStringBuilder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.SecurityController;
import com.android.systemui.util.LayoutInflaterBuilder;
import com.android.systemui.utils.TestableImageView;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import static junit.framework.Assert.assertEquals;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class QSFooterTest extends SysuiTestCase {
@@ -53,28 +47,26 @@ public class QSFooterTest extends SysuiTestCase {
    private final String DEVICE_OWNER_PACKAGE = "TestDPC";
    private final String VPN_PACKAGE = "TestVPN";

    private ViewGroup mRootView = mock(ViewGroup.class);
    private TextView mFooterText = mock(TextView.class);
    private ImageView mFooterIcon = mock(ImageView.class);
    private ImageView mFooterIcon2 = mock(ImageView.class);
    private ViewGroup mRootView;
    private TextView mFooterText;
    private TestableImageView mFooterIcon;
    private TestableImageView mFooterIcon2;
    private QSFooter mFooter;
    private Resources mResources;
    private SecurityController mSecurityController = mock(SecurityController.class);

    @Before
    public void setUp() {
        when(mRootView.findViewById(R.id.footer_text)).thenReturn(mFooterText);
        when(mRootView.findViewById(R.id.footer_icon)).thenReturn(mFooterIcon);
        when(mRootView.findViewById(R.id.footer_icon2)).thenReturn(mFooterIcon2);
        final LayoutInflater layoutInflater = mock(LayoutInflater.class);
        when(layoutInflater.inflate(eq(R.layout.quick_settings_footer), anyObject(), anyBoolean()))
                .thenReturn(mRootView);
        final Context context = mock(Context.class);
        when(context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).thenReturn(layoutInflater);
        mResources = mContext.getResources();
        when(context.getResources()).thenReturn(mResources);
        mFooter = new QSFooter(null, context);
        reset(mRootView);
        mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
                new LayoutInflaterBuilder(mContext)
                        .replace("ImageView", TestableImageView.class)
                        .build());
        Handler h = new Handler(Looper.getMainLooper());
        h.post(() -> mFooter = new QSFooter(null, mContext));
        waitForIdleSync(h);
        mRootView = (ViewGroup) mFooter.getView();
        mFooterText = (TextView) mRootView.findViewById(R.id.footer_text);
        mFooterIcon = (TestableImageView) mRootView.findViewById(R.id.footer_icon);
        mFooterIcon2 = (TestableImageView) mRootView.findViewById(R.id.footer_icon2);
        mFooter.setHostEnvironment(null, mSecurityController, Looper.getMainLooper());
    }

@@ -86,8 +78,7 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mRootView).setVisibility(View.GONE);
        verifyNoMoreInteractions(mRootView);
        assertEquals(View.GONE, mRootView.getVisibility());
    }

    @Test
@@ -97,10 +88,8 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mFooterText).setText(mResources.getString(R.string.do_disclosure_generic));
        verifyNoMoreInteractions(mFooterText);
        verify(mRootView).setVisibility(View.VISIBLE);
        verifyNoMoreInteractions(mRootView);
        assertEquals(mContext.getString(R.string.do_disclosure_generic), mFooterText.getText());
        assertEquals(View.VISIBLE, mRootView.getVisibility());
    }

    @Test
@@ -111,11 +100,9 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mFooterText).setText(mResources.getString(R.string.do_disclosure_with_name,
                MANAGING_ORGANIZATION));
        verifyNoMoreInteractions(mFooterText);
        verify(mRootView).setVisibility(View.VISIBLE);
        verifyNoMoreInteractions(mRootView);
        assertEquals(mContext.getString(R.string.do_disclosure_with_name, MANAGING_ORGANIZATION),
                mFooterText.getText());
        assertEquals(View.VISIBLE, mRootView.getVisibility());
    }

    @Test
@@ -126,9 +113,9 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mFooterIcon).setVisibility(View.VISIBLE);
        verify(mFooterIcon).setImageResource(R.drawable.ic_qs_network_logging);
        verify(mFooterIcon2).setVisibility(View.INVISIBLE);
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(R.drawable.ic_qs_network_logging, mFooterIcon.getLastImageResource());
        assertEquals(View.INVISIBLE, mFooterIcon2.getVisibility());
    }

    @Test
@@ -140,9 +127,10 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mFooterIcon).setVisibility(View.VISIBLE);
        verify(mFooterIcon, never()).setImageResource(anyInt());
        verify(mFooterIcon2).setVisibility(View.INVISIBLE);
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        // -1 == never set.
        assertEquals(-1, mFooterIcon.getLastImageResource());
        assertEquals(View.INVISIBLE, mFooterIcon2.getVisibility());
    }

    @Test
@@ -154,10 +142,11 @@ public class QSFooterTest extends SysuiTestCase {
        mFooter.refreshState();

        waitForIdleSync(mFooter.mHandler);
        verify(mFooterIcon).setVisibility(View.VISIBLE);
        verify(mFooterIcon, never()).setImageResource(anyInt());
        verify(mFooterIcon2).setVisibility(View.VISIBLE);
        verify(mFooterIcon2, never()).setImageResource(anyInt());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.VISIBLE, mFooterIcon2.getVisibility());
        // -1 == never set.
        assertEquals(-1, mFooterIcon.getLastImageResource());
        assertEquals(-1, mFooterIcon2.getLastImageResource());
    }

    @Test
@@ -211,15 +200,15 @@ public class QSFooterTest extends SysuiTestCase {
    private CharSequence getExpectedMessage(boolean hasDeviceOwnerOrganization, boolean hasVPN) {
        final SpannableStringBuilder message = new SpannableStringBuilder();
        message.append(hasDeviceOwnerOrganization ?
                mResources.getString(R.string.monitoring_description_do_header_with_name,
                mContext.getString(R.string.monitoring_description_do_header_with_name,
                        MANAGING_ORGANIZATION, DEVICE_OWNER_PACKAGE) :
                mResources.getString(R.string.monitoring_description_do_header_generic,
                mContext.getString(R.string.monitoring_description_do_header_generic,
                        DEVICE_OWNER_PACKAGE));
        message.append("\n\n");
        message.append(mResources.getString(R.string.monitoring_description_do_body));
        message.append(mResources.getString(
        message.append(mContext.getString(R.string.monitoring_description_do_body));
        message.append(mContext.getString(
                R.string.monitoring_description_do_learn_more_separator));
        message.append(mResources.getString(R.string.monitoring_description_do_learn_more),
        message.append(mContext.getString(R.string.monitoring_description_do_learn_more),
                mFooter.new EnterprisePrivacySpan(), 0);
        return message;
    }
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class QSFragmentTest extends FragmentTestCase {
        when(userSwitcher.getKeyguardMonitor()).thenReturn(keyguardMonitor);
        when(userSwitcher.getUsers()).thenReturn(new ArrayList<>());
        QSTileHost host = new QSTileHost(mContext,
                mock(PhoneStatusBar.class),
                null,
                getLeakChecker(BluetoothController.class),
                getLeakChecker(LocationController.class),
                getLeakChecker(RotationLockController.class),
Loading