From f22c761376fa581be742b579ddc6111da1448bf6 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Fri, 15 Jun 2018 13:02:33 +0200 Subject: [PATCH] fix unit tests, add shadow for WorkerManager --- ...stHelpers.java => AndroidTestHelpers.java} | 3 +- .../keychain/remote/OpenPgpServiceTest.java | 6 +-- .../ui/AsymmetricFileOperationTests.java | 14 +++--- .../ui/AsymmetricTextOperationTests.java | 6 +-- .../keychain/ui/EditKeyTest.java | 16 ++----- .../keychain/ui/MiscCryptOperationTests.java | 21 ++++----- .../ui/SymmetricTextOperationTests.java | 4 +- .../keychain/ui/ViewKeyAdvShareTest.java | 4 +- .../widget/EncryptKeyCompletionViewTest.java | 2 +- .../keychain/KeychainTestRunner.java | 3 ++ .../keychain/TestHelpers.java | 43 +++++++++++++++++++ .../keychain/pgp/InputDataOperationTest.java | 43 +++++++++++-------- .../keychain/shadows/ShadowWorkManager.java | 19 ++++++++ 13 files changed, 117 insertions(+), 67 deletions(-) rename OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/{TestHelpers.java => AndroidTestHelpers.java} (99%) create mode 100644 OpenKeychain/src/test/java/org/sufficientlysecure/keychain/TestHelpers.java create mode 100644 OpenKeychain/src/test/java/org/sufficientlysecure/keychain/shadows/ShadowWorkManager.java diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/TestHelpers.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/AndroidTestHelpers.java similarity index 99% rename from OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/TestHelpers.java rename to OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/AndroidTestHelpers.java index 5a6509080..f5353540d 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/TestHelpers.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/AndroidTestHelpers.java @@ -53,7 +53,7 @@ import static org.hamcrest.CoreMatchers.endsWith; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withSnackbarLineColor; -public class TestHelpers { +public class AndroidTestHelpers { public static void dismissSnackbar() { onView(withClassName(endsWith("Snackbar"))) @@ -161,5 +161,4 @@ public class TestHelpers { PassphraseCacheService.clearCachedPassphrases(context); } - } diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/remote/OpenPgpServiceTest.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/remote/OpenPgpServiceTest.java index 1e84ea879..ccd83a777 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/remote/OpenPgpServiceTest.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/remote/OpenPgpServiceTest.java @@ -9,7 +9,6 @@ import android.support.test.InstrumentationRegistry; import android.support.test.rule.ServiceTestRule; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.LargeTest; -import android.widget.AdapterView; import org.junit.Before; import org.junit.Rule; @@ -23,17 +22,14 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import static android.support.test.espresso.Espresso.closeSoftKeyboard; -import static android.support.test.espresso.Espresso.onData; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.typeText; -import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; -import static org.sufficientlysecure.keychain.TestHelpers.cleanupForTests; -import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyItemId; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.cleanupForTests; @RunWith(AndroidJUnit4.class) diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricFileOperationTests.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricFileOperationTests.java index 0cd3681dd..0930ef7c4 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricFileOperationTests.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricFileOperationTests.java @@ -32,7 +32,7 @@ import android.widget.AdapterView; import org.junit.Before; import org.junit.Rule; import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.TestHelpers; +import org.sufficientlysecure.keychain.AndroidTestHelpers; import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.ui.util.Notify.Style; @@ -61,11 +61,11 @@ import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.is; -import static org.sufficientlysecure.keychain.TestHelpers.checkSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.getImageNames; -import static org.sufficientlysecure.keychain.TestHelpers.importKeysFromResource; -import static org.sufficientlysecure.keychain.TestHelpers.pickRandom; -import static org.sufficientlysecure.keychain.TestHelpers.randomString; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.getImageNames; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.pickRandom; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.randomString; import static org.sufficientlysecure.keychain.actions.CustomActions.tokenEncryptViewAddToken; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.isRecyclerItemView; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withDisplayedChild; @@ -95,7 +95,7 @@ public class AsymmetricFileOperationTests { public void setUp() throws Exception { Activity activity = mActivity.getActivity(); - TestHelpers.copyFiles(); + AndroidTestHelpers.copyFiles(); // import these two, make sure they're there importKeysFromResource(activity, "x.sec.asc"); diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricTextOperationTests.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricTextOperationTests.java index e2ea0c52f..b34ea6c81 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricTextOperationTests.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/AsymmetricTextOperationTests.java @@ -43,9 +43,9 @@ import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; -import static org.sufficientlysecure.keychain.TestHelpers.checkSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.importKeysFromResource; -import static org.sufficientlysecure.keychain.TestHelpers.randomString; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.randomString; import static org.sufficientlysecure.keychain.actions.CustomActions.tokenEncryptViewAddToken; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.isRecyclerItemView; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withDisplayedChild; diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/EditKeyTest.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/EditKeyTest.java index 139967264..10939b8e9 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/EditKeyTest.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/EditKeyTest.java @@ -20,37 +20,27 @@ package org.sufficientlysecure.keychain.ui; import android.app.Activity; import android.content.Intent; -import android.support.test.espresso.ViewAction; -import android.support.test.espresso.action.ViewActions; -import android.support.test.espresso.contrib.RecyclerViewActions; -import android.support.test.espresso.matcher.ViewMatchers; import android.support.test.rule.ActivityTestRule; import android.support.v7.widget.RecyclerView; -import android.widget.AdapterView; -import org.hamcrest.Description; -import org.hamcrest.Matcher; import org.junit.FixMethodOrder; import org.junit.Rule; import org.junit.runners.MethodSorters; import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.matcher.CustomMatchers; import org.sufficientlysecure.keychain.provider.KeychainDatabase; import org.sufficientlysecure.keychain.ui.util.Notify.Style; -import static android.support.test.espresso.Espresso.onData; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnHolderItem; import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; -import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; -import static org.sufficientlysecure.keychain.TestHelpers.checkSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.importKeysFromResource; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyHolderId; -import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyItemId; + //TODO This test is disabled because it needs to be fixed to work with updated code @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/MiscCryptOperationTests.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/MiscCryptOperationTests.java index 784f26fe0..74b79f020 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/MiscCryptOperationTests.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/MiscCryptOperationTests.java @@ -27,18 +27,15 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build.VERSION_CODES; -import android.support.test.espresso.contrib.RecyclerViewActions; import android.support.test.espresso.intent.Intents; import android.support.test.espresso.intent.rule.IntentsTestRule; import android.support.v7.widget.RecyclerView; -import android.widget.AdapterView; import org.junit.Before; import org.junit.Rule; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.TestHelpers; -import org.sufficientlysecure.keychain.matcher.CustomMatchers; +import org.sufficientlysecure.keychain.AndroidTestHelpers; import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.util.Preferences; @@ -46,7 +43,6 @@ import org.sufficientlysecure.keychain.util.Preferences; import java.io.File; import static android.support.test.InstrumentationRegistry.getInstrumentation; -import static android.support.test.espresso.Espresso.onData; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu; import static android.support.test.espresso.Espresso.pressBack; @@ -67,16 +63,15 @@ import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.hasItem; -import static org.sufficientlysecure.keychain.TestHelpers.checkSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.dismissSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.getImageNames; -import static org.sufficientlysecure.keychain.TestHelpers.importKeysFromResource; -import static org.sufficientlysecure.keychain.TestHelpers.pickRandom; -import static org.sufficientlysecure.keychain.TestHelpers.randomString; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.dismissSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.getImageNames; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.pickRandom; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.randomString; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.isRecyclerItemView; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withDisplayedChild; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyHolderId; -import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyItemId; import static org.sufficientlysecure.keychain.matcher.DrawableMatcher.withDrawable; //TODO This test is disabled because it needs to be fixed to work with updated code @@ -104,7 +99,7 @@ public class MiscCryptOperationTests { mActivity = mActivityRule.getActivity(); - TestHelpers.copyFiles(); + AndroidTestHelpers.copyFiles(); // import these two, make sure they're there importKeysFromResource(mActivity, "x.sec.asc"); diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/SymmetricTextOperationTests.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/SymmetricTextOperationTests.java index d3e4a8a86..b51be1e09 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/SymmetricTextOperationTests.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/SymmetricTextOperationTests.java @@ -52,8 +52,8 @@ import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.Matchers.equalTo; -import static org.sufficientlysecure.keychain.TestHelpers.checkSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.randomString; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.randomString; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.isRecyclerItemView; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withEncryptionStatus; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withSignatureNone; diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareTest.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareTest.java index ebf5619ad..83463d179 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareTest.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvShareTest.java @@ -47,8 +47,8 @@ import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; -import static org.sufficientlysecure.keychain.TestHelpers.checkAndDismissSnackbar; -import static org.sufficientlysecure.keychain.TestHelpers.cleanupForTests; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkAndDismissSnackbar; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.cleanupForTests; //TODO This test is disabled because it needs to be fixed to work with updated code @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionViewTest.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionViewTest.java index e82914652..554df0a51 100644 --- a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionViewTest.java +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/ui/widget/EncryptKeyCompletionViewTest.java @@ -40,7 +40,7 @@ import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static org.hamcrest.CoreMatchers.allOf; -import static org.sufficientlysecure.keychain.TestHelpers.importKeysFromResource; +import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; import static org.sufficientlysecure.keychain.actions.CustomActions.tokenEncryptViewAddToken; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyItemId; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withKeyToken; diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/KeychainTestRunner.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/KeychainTestRunner.java index 37439d8b8..31a1ebd3a 100644 --- a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/KeychainTestRunner.java +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/KeychainTestRunner.java @@ -3,6 +3,8 @@ package org.sufficientlysecure.keychain; import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import org.sufficientlysecure.keychain.shadows.ShadowWorkManager; + public class KeychainTestRunner extends RobolectricTestRunner { @@ -15,6 +17,7 @@ public class KeychainTestRunner extends RobolectricTestRunner { return new Config.Builder() .setSdk(27) .setConstants(WorkaroundBuildConfig.class) + .setShadows(new Class[] { ShadowWorkManager.class }) .build(); } } diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/TestHelpers.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/TestHelpers.java new file mode 100644 index 000000000..b6305bb87 --- /dev/null +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/TestHelpers.java @@ -0,0 +1,43 @@ +package org.sufficientlysecure.keychain; + + +import android.content.ContentValues; + +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.mockito.Matchers; + + +public class TestHelpers { + public static ContentValues cvContains(ContentValues value) { + return Matchers.argThat(new BaseMatcher() { + @Override + public boolean matches(Object item) { + if (item instanceof ContentValues) { + ContentValues cv = (ContentValues) item; + for (String key : value.keySet()) { + if (!cv.containsKey(key)) { + return false; + } + + Object ours = value.get(key); + Object theirs = cv.get(key); + if (ours == null && theirs == null) { + continue; + } + if (ours == null || !ours.equals(theirs)) { + return false; + } + } + return true; + } + return false; + } + + @Override + public void describeTo(Description description) { + description.appendValue(value); + } + }); + } +} diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/InputDataOperationTest.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/InputDataOperationTest.java index a40c31662..6597fcdb3 100644 --- a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/InputDataOperationTest.java +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/pgp/InputDataOperationTest.java @@ -34,6 +34,7 @@ import org.openintents.openpgp.OpenPgpMetadata; import org.robolectric.RuntimeEnvironment; import org.robolectric.shadows.ShadowLog; import org.sufficientlysecure.keychain.KeychainTestRunner; +import org.sufficientlysecure.keychain.TestHelpers; import org.sufficientlysecure.keychain.operations.InputDataOperation; import org.sufficientlysecure.keychain.operations.results.InputDataResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; @@ -49,12 +50,16 @@ import java.io.PrintStream; import java.security.Security; import java.util.ArrayList; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.sufficientlysecure.keychain.TestHelpers.cvContains; + @RunWith(KeychainTestRunner.class) public class InputDataOperationTest { @@ -137,33 +142,33 @@ public class InputDataOperationTest { Assert.assertNull(result.mDecryptVerifyResult); ArrayList outUris = result.getOutputUris(); - Assert.assertEquals("must have two output URIs", 2, outUris.size()); - Assert.assertEquals("first uri must be the one we provided", fakeOutputUri1, outUris.get(0)); + assertEquals("must have two output URIs", 2, outUris.size()); + assertEquals("first uri must be the one we provided", fakeOutputUri1, outUris.get(0)); verify(mockResolver).openOutputStream(result.getOutputUris().get(0), "w"); - Assert.assertEquals("second uri must be the one we provided", fakeOutputUri2, outUris.get(1)); + assertEquals("second uri must be the one we provided", fakeOutputUri2, outUris.get(1)); verify(mockResolver).openOutputStream(result.getOutputUris().get(1), "w"); ContentValues contentValues = new ContentValues(); contentValues.put("name", "data.txt"); contentValues.put("mimetype", "text/plain"); - verify(mockResolver).insert(TemporaryFileProvider.CONTENT_URI, contentValues); + verify(mockResolver).insert(eq(TemporaryFileProvider.CONTENT_URI), cvContains(contentValues)); contentValues.put("name", (String) null); contentValues.put("mimetype", "text/testvalue"); - verify(mockResolver).insert(TemporaryFileProvider.CONTENT_URI, contentValues); + verify(mockResolver).insert(eq(TemporaryFileProvider.CONTENT_URI), cvContains(contentValues)); // quoted-printable returns windows style line endings for some reason? - Assert.assertEquals("first part must have expected content", + assertEquals("first part must have expected content", "message part 1\r\n", new String(outStream1.toByteArray())); - Assert.assertEquals("second part must have expected content", + assertEquals("second part must have expected content", "message part 2.1\nmessage part 2.2\n", new String(outStream2.toByteArray())); OpenPgpMetadata metadata = result.mMetadata.get(0); - Assert.assertEquals("text/plain", metadata.getMimeType()); - Assert.assertEquals("utf-8", metadata.getCharset()); + assertEquals("text/plain", metadata.getMimeType()); + assertEquals("utf-8", metadata.getCharset()); metadata = result.mMetadata.get(1); - Assert.assertEquals("text/testvalue", metadata.getMimeType()); - Assert.assertEquals("iso-8859-1", metadata.getCharset()); + assertEquals("text/testvalue", metadata.getMimeType()); + assertEquals("iso-8859-1", metadata.getCharset()); } @Test @@ -184,9 +189,9 @@ public class InputDataOperationTest { Assert.assertNull(result.mDecryptVerifyResult); OpenPgpMetadata metadata = result.mMetadata.get(0); - Assert.assertEquals("text/plain", metadata.getMimeType()); + assertEquals("text/plain", metadata.getMimeType()); - Assert.assertEquals("charset should be set since it was explicitly specified", + assertEquals("charset should be set since it was explicitly specified", "utf-8", metadata.getCharset()); Assert.assertTrue("faulty charset should have been detected", result.getLog().containsType(LogType.MSG_DATA_MIME_CHARSET_FAULTY)); @@ -210,7 +215,7 @@ public class InputDataOperationTest { Assert.assertNull(result.mDecryptVerifyResult); OpenPgpMetadata metadata = result.mMetadata.get(0); - Assert.assertEquals("text/plain", metadata.getMimeType()); + assertEquals("text/plain", metadata.getMimeType()); Assert.assertNull("charset was bad so it should not be set", metadata.getCharset()); Assert.assertTrue("faulty charset should have been detected", @@ -231,9 +236,9 @@ public class InputDataOperationTest { Assert.assertNull(result.mDecryptVerifyResult); OpenPgpMetadata metadata = result.mMetadata.get(0); - Assert.assertEquals("text/plain", metadata.getMimeType()); + assertEquals("text/plain", metadata.getMimeType()); - Assert.assertEquals("charset should be set since it was guessed and not faulty", + assertEquals("charset should be set since it was guessed and not faulty", "utf-8", metadata.getCharset()); Assert.assertTrue("charset should have been guessed", result.getLog().containsType(LogType.MSG_DATA_MIME_CHARSET_GUESS)); @@ -253,9 +258,9 @@ public class InputDataOperationTest { Assert.assertNull(result.mDecryptVerifyResult); OpenPgpMetadata metadata = result.mMetadata.get(0); - Assert.assertEquals("text/plain", metadata.getMimeType()); + assertEquals("text/plain", metadata.getMimeType()); - Assert.assertEquals("charset should be set since it was guessed and not faulty", + assertEquals("charset should be set since it was guessed and not faulty", "utf-8", metadata.getCharset()); Assert.assertTrue("charset should have been guessed", result.getLog().containsType(LogType.MSG_DATA_MIME_CHARSET_GUESS)); @@ -280,7 +285,7 @@ public class InputDataOperationTest { Assert.assertTrue("should not be mime parsed", result.getLog().containsType(LogType.MSG_DATA_MIME_NONE)); - Assert.assertEquals("output uri should simply be passed-through input uri", + assertEquals("output uri should simply be passed-through input uri", result.getOutputUris().get(0), FAKE_CONTENT_INPUT_URI_1); } diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/shadows/ShadowWorkManager.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/shadows/ShadowWorkManager.java new file mode 100644 index 000000000..f45ba8f6e --- /dev/null +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/shadows/ShadowWorkManager.java @@ -0,0 +1,19 @@ +package org.sufficientlysecure.keychain.shadows; + + +import androidx.work.WorkManager; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +import static org.mockito.Mockito.mock; + + +@Implements(WorkManager.class) +public class ShadowWorkManager { + + @Implementation + public static WorkManager getInstance() { + return mock(WorkManager.class); + } + +}