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

Commit 3115bdf1 authored by Bryce Lee's avatar Bryce Lee
Browse files

Fix ActivityRecordTests.

Tests are not guaranteed to run on the same thread as setup methods.
Therefore, we must ensure any loopers used are already created by the
time the test runs. We do this now by creating a HandlerThread and
referencing its Looper later. Loopers are initialized per
HandlerThread, which will allow us to both isolate its usage and
guarantee the Looper initialization by test time.

Change-Id: If15494783959e5c399375033253cef69b921ff84
Fixes: 36916522
Test: bit FrameworksServicesTests:com.android.server.am.ActivityRecordTests
parent 7458ea38
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -33,8 +33,7 @@ import org.junit.Test;
 *  bit FrameworksServicesTests:com.android.server.am.ActivityRecordTests
 */
@MediumTest
// TODO(b/36916522): Currently failing in CI.
// @Presubmit
@Presubmit
@RunWith(AndroidJUnit4.class)
public class ActivityRecordTests extends ActivityTestsBase {
    private final ComponentName testActivityComponent =
+10 −8
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.support.test.InstrumentationRegistry;
import com.android.server.AttributeCache;
@@ -34,6 +34,7 @@ import com.android.server.wm.StackWindowController;

import com.android.server.wm.WindowManagerService;
import com.android.server.wm.WindowTestUtils;
import org.junit.After;
import org.junit.Before;
import org.mockito.MockitoAnnotations;

@@ -42,8 +43,7 @@ import org.mockito.MockitoAnnotations;
 */
public class ActivityTestsBase {
    private final Context mContext = InstrumentationRegistry.getContext();
    private static boolean sLooperPrepared;
    private Handler mHandler;
    private HandlerThread mHandlerThread;

    // Grabbing an instance of {@link WindowManagerService} creates it if not present so this must
    // be called at before any tests.
@@ -52,11 +52,13 @@ public class ActivityTestsBase {
    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        if (!sLooperPrepared) {
            sLooperPrepared = true;
            Looper.prepare();
        mHandlerThread = new HandlerThread("ActivityTestsBaseThread");
        mHandlerThread.start();
    }

    @After
    public void tearDown() {
        mHandlerThread.quitSafely();
    }

    protected ActivityManagerService createActivityManagerService() {
@@ -126,7 +128,7 @@ public class ActivityTestsBase {

        @Override
        protected ActivityStackSupervisor createStackSupervisor() {
            return new TestActivityStackSupervisor(this, new Handler().getLooper());
            return new TestActivityStackSupervisor(this, mHandlerThread.getLooper());
        }
    }