From 06dbd048af788af10fc004de8bc7dbff495be2d2 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 6 Jan 2021 16:11:57 +0100 Subject: [PATCH] add WorkManagerTestRule to CleanCacheWorkerTest --- .../{ => work}/CleanCacheWorkerTest.java | 39 +++++++++++++++---- .../{ => work}/WorkManagerTestRule.java | 12 +++--- 2 files changed, 36 insertions(+), 15 deletions(-) rename app/src/androidTest/java/org/fdroid/fdroid/{ => work}/CleanCacheWorkerTest.java (58%) rename app/src/androidTest/java/org/fdroid/fdroid/{ => work}/WorkManagerTestRule.java (86%) diff --git a/app/src/androidTest/java/org/fdroid/fdroid/CleanCacheWorkerTest.java b/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java similarity index 58% rename from app/src/androidTest/java/org/fdroid/fdroid/CleanCacheWorkerTest.java rename to app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java index e3706dc03..b57cd1034 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/CleanCacheWorkerTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java @@ -1,25 +1,48 @@ -package org.fdroid.fdroid; +package org.fdroid.fdroid.work; import android.app.Instrumentation; - -import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.arch.core.executor.testing.InstantTaskExecutorRule; +import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; - +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkInfo; +import com.google.common.util.concurrent.ListenableFuture; import org.apache.commons.io.FileUtils; import org.fdroid.fdroid.compat.FileCompatTest; -import org.fdroid.fdroid.work.CleanCacheWorker; +import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import java.io.File; import java.io.IOException; +import java.util.concurrent.ExecutionException; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -@RunWith(AndroidJUnit4.class) +/** + * This test cannot run on Robolectric unfortunately since it does not support + *

+ * This is marked with {@link LargeTest} because it always fails on the emulator + * tests on GitLab CI. That excludes it from the test run there. + */ +@LargeTest public class CleanCacheWorkerTest { - public static final String TAG = "CleanCacheWorkerTest"; + public static final String TAG = "CleanCacheWorkerEmulatorTest"; + + @Rule + public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule(); + + @Rule + public WorkManagerTestRule workManagerTestRule = new WorkManagerTestRule(); + + @Test + public void testWorkRequest() throws ExecutionException, InterruptedException { + OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(CleanCacheWorker.class).build(); + workManagerTestRule.workManager.enqueue(request).getResult(); + ListenableFuture workInfo = workManagerTestRule.workManager.getWorkInfoById(request.getId()); + assertEquals(WorkInfo.State.SUCCEEDED, workInfo.get().getState()); + } @Test public void testClearOldFiles() throws IOException, InterruptedException { diff --git a/app/src/androidTest/java/org/fdroid/fdroid/WorkManagerTestRule.java b/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java similarity index 86% rename from app/src/androidTest/java/org/fdroid/fdroid/WorkManagerTestRule.java rename to app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java index a2091588b..fb6f6dc8e 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/WorkManagerTestRule.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java @@ -1,23 +1,21 @@ -package org.fdroid.fdroid; +package org.fdroid.fdroid.work; import android.app.Instrumentation; import android.content.Context; import android.util.Log; - import androidx.test.platform.app.InstrumentationRegistry; import androidx.work.Configuration; import androidx.work.WorkManager; import androidx.work.testing.SynchronousExecutor; import androidx.work.testing.WorkManagerTestInitHelper; - import org.junit.rules.TestWatcher; import org.junit.runner.Description; public class WorkManagerTestRule extends TestWatcher { - private Context targetContext; - private Context testContext; - private Configuration configuration; - private WorkManager workManager; + Context targetContext; + Context testContext; + Configuration configuration; + WorkManager workManager; @Override protected void starting(Description description) {