From 780fca296226f6809ccdf9fffb09910f903757d3 Mon Sep 17 00:00:00 2001 From: Muzahidul Islam <129880873+muzahidul-opti@users.noreply.github.com> Date: Fri, 3 Jan 2025 18:25:56 +0600 Subject: [PATCH] [FSSDK-10505] chore: update mockito and java version (#502) - java version update to 17 - Update gradle to 7.5 --- .github/workflows/android.yml | 4 +- .github/workflows/build.yml | 4 +- android-sdk/build.gradle | 20 ++- .../ab/android/sdk/ODPIntegrationTest.java | 6 +- .../sdk/ODPIntegrationUpdateConfigTest.java | 6 +- .../ab/android/sdk/OptimizelyClientTest.java | 54 +++--- .../sdk/OptimizelyDefaultAttributesTest.java | 4 +- .../ab/android/sdk/OptimizelyManagerTest.java | 162 +++++++++++------- .../ab/android/sdk/OptimizelyClientTest.java | 30 +--- .../sdk/OptimizelyManagerBuilderTest.java | 5 +- .../sdk/OptimizelyManagerIntervalTest.java | 10 +- ...erOptlyActivityLifecycleCallbacksTest.java | 2 +- build.gradle | 7 +- datafile-handler/build.gradle | 8 +- .../BackgroundWatchersCacheTest.java | 4 +- .../datafile_handler/DatafileCacheTest.java | 4 +- .../datafile_handler/DatafileClientTest.java | 8 +- .../datafile_handler/DatafileLoaderTest.java | 4 +- .../DatafileReschedulerTest.java | 2 +- .../datafile_handler/DatafileWorkerTest.java | 7 +- event-handler/build.gradle | 16 +- .../event_handler/EventClientTest.java | 6 +- .../event_handler/EventReschedulerTest.java | 6 +- .../event_handler/EventClientTest.java | 6 +- .../event_handler/EventWorkerUnitTest.java | 74 ++++---- .../resources/org.mockito.plugins.MockMaker | 1 + odp/build.gradle | 8 +- .../android/odp/DefaultODPApiManagerTest.kt | 2 +- .../ab/android/odp/ODPEventClientTest.kt | 6 +- .../ab/android/odp/ODPSegmentClientTest.kt | 6 +- shared/build.gradle | 8 +- .../ab/android/shared/ClientTest.java | 4 +- test-app/build.gradle | 4 +- user-profile/build.gradle | 8 +- .../DefaultUserProfileServiceTest.java | 2 +- .../android/user_profile/DiskCacheTest.java | 4 +- 36 files changed, 275 insertions(+), 237 deletions(-) create mode 100644 event-handler/src/test/resources/org.mockito.plugins.MockMaker diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 8f924677e..454162f4f 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -88,10 +88,10 @@ jobs: steps: - name: checkout uses: actions/checkout@v2 - - name: set up JDK 11 + - name: set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: '17' - name: Enable KVM run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index acbab6819..769fc4d0c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,10 +23,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: set up JDK 11 + - name: set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'temurin' cache: gradle - name: Grant execute permission for gradlew diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index 4f4b8af63..7a5974781 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -34,6 +34,15 @@ android { } testOptions { unitTests.returnDefaultValues = true + unitTests.all { + jvmArgs = [ + "--add-opens","java.base/java.lang.reflect=ALL-UNNAMED", + "--add-opens","java.base/java.util.concurrent=ALL-UNNAMED", + "--add-opens","java.base/java.util.concurrent.locks=ALL-UNNAMED", + "--add-opens","java.base/java.util=ALL-UNNAMED", + "--add-opens","java.base/java.lang=ALL-UNNAMED" + ] + } } buildTypes { release { @@ -45,8 +54,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } @@ -64,7 +73,8 @@ dependencies { implementation "androidx.annotation:annotation:$annotations_ver" testImplementation "junit:junit:$junit_ver" - testImplementation "org.mockito:mockito-core:$mockito_ver" + testImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" + testImplementation "org.powermock:powermock-module-junit4:$powermock_ver" testImplementation "org.powermock:powermock-api-mockito2:$powermock_ver" testImplementation "com.noveogroup.android:android-logger:$android_logger_ver" @@ -78,9 +88,7 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.google.code.gson:gson:$gson_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java index 00dd811e1..9c3effda6 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java @@ -42,9 +42,9 @@ import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java index 04cd52363..20c0b9355 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java @@ -51,9 +51,9 @@ import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java index 3895d7e6c..b7f2f7b41 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java @@ -77,12 +77,12 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeTrue; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @RunWith(Parameterized.class) @@ -131,7 +131,7 @@ public OptimizelyClientTest(int datafileVersion,String datafile){ optimizely = Optimizely.builder(datafile, eventHandler).build(); // set to return DecisionResponse with null variation by default (instead of null DecisionResponse) - when(bucketer.bucket(anyObject(), anyObject(), anyObject())).thenReturn(DecisionResponse.nullNoReasons()); + when(bucketer.bucket(any(), any(), any())).thenReturn(DecisionResponse.nullNoReasons()); if(datafileVersion==3) { Variation variation = optimizely.getProjectConfig().getExperiments().get(0).getVariations().get(0); @@ -431,7 +431,7 @@ public void testGoodForcedTrack() { optimizelyClient.track("test_event", GENERIC_USER_ID); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); try { @@ -462,7 +462,7 @@ public void testGoodTrack() { OptimizelyClient optimizelyClient = new OptimizelyClient(optimizely, logger); optimizelyClient.track("test_event", GENERIC_USER_ID); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -484,7 +484,7 @@ public void onTrack(@Nonnull String eventKey, @Nonnull String userId, @Nonnull M assertTrue(notificationId <= 0); assertFalse(optimizelyClient.getNotificationCenter().removeNotificationListener(notificationId)); assertEquals(false, numberOfCalls[0]); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -512,7 +512,7 @@ public void onTrack(@Nonnull String eventKey, @Nonnull String userId, @Nonnull M else { assertEquals(true, numberOfCalls[0]); } - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -524,7 +524,7 @@ public void testGoodTrackBucketing() { Experiment experiment = optimizelyClient.getProjectConfig().getExperimentsForEventKey("test_event").get(0); attributes.put(BUCKETING_ATTRIBUTE, bucketingId); optimizelyClient.track("test_event", "userId", attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -569,7 +569,7 @@ public void testGoodForcedTrackAttribute() { optimizelyClient.track("test_event", GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -611,7 +611,7 @@ public void testGoodTrackAttribute() { optimizelyClient.track("test_event", GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); Variation v = optimizelyClient.getForcedVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID); assertEquals(v.getKey(), "var_2"); @@ -671,7 +671,7 @@ public void testGoodForcedTrackEventVal() { Collections.emptyMap(), Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -705,7 +705,7 @@ public void testGoodTrackEventVal() { GENERIC_USER_ID, Collections.emptyMap(), Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -750,7 +750,7 @@ public void testGoodTrackAttributeEventVal() { final HashMap attributes = new HashMap<>(); optimizelyClient.track("test_event", GENERIC_USER_ID, attributes, Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -770,7 +770,7 @@ public void testGoodForcedTrackAttributeEventVal() { attributes, Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -839,7 +839,7 @@ public void testTrackWithEventTags() { final HashMap eventTags = new HashMap<>(); eventTags.put("foo", 843); optimizelyClient.track("test_event", GENERIC_USER_ID, attributes, eventTags); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -875,7 +875,7 @@ public void testForcedTrackWithEventTags() { // id of var_2 assertTrue(logEvent.getBody().contains("\"enrich_decisions\":true")); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); Variation v = optimizelyClient.getForcedVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID); assertEquals(v.getKey(), "var_2"); @@ -979,7 +979,7 @@ public void testGoodGetVariationAttribute() { logger); final HashMap attributes = new HashMap<>(); optimizelyClient.getVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -996,7 +996,7 @@ public void testGoodForcedGetVariationAttribute() { v = optimizelyClient.getVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); assertEquals(v.getKey(), "var_2"); @@ -1180,7 +1180,7 @@ public void testGoodIsFeatureEnabledWithAttribute() { Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); assertFalse(optimizelyClient.isFeatureEnabled( "InvalidFeatureKey", @@ -1301,7 +1301,7 @@ public void testIsFeatureEnabledWithFeatureEnabledTrue(){ Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -1398,7 +1398,7 @@ public void testGoodGetFeatureVariableBooleanWithAttr() { GENERIC_USER_ID, Collections.singletonMap("key", "value") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -1505,7 +1505,7 @@ public void testGoodGetFeatureVariableDoubleWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableDouble Scenario#3 if feature not found @@ -1616,7 +1616,7 @@ public void testGoodGetFeatureVariableIntegerWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableInteger Scenario#3 if feature not found @@ -1723,7 +1723,7 @@ public void testGoodGetFeatureVariableStringWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableString Scenario#3 if feature not found @@ -1837,7 +1837,7 @@ public void testGetFeatureVariableJsonWithAttr() { ); assertTrue(compareJsonStrings(json.toString(), defaultValueOfStringVar)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableJSON Scenario#3 if feature not found @@ -1949,7 +1949,7 @@ public void testGetAllFeatureVariablesWithAttr() { ); assertTrue(compareJsonStrings(json.toString(), defaultValueOfStringVar)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //GetAllFeatureVariables Scenario#3 if feature not found diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyDefaultAttributesTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyDefaultAttributesTest.java index f730f3d68..930cfcc8a 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyDefaultAttributesTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyDefaultAttributesTest.java @@ -26,8 +26,8 @@ import org.junit.runner.RunWith; import org.slf4j.Logger; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java index 9b1fb08fb..4e44808e6 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java @@ -62,13 +62,9 @@ import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; import static org.junit.Assert.assertNotEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -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.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; /** * Tests for {@link OptimizelyManager} @@ -500,14 +496,20 @@ public void initializeSyncWithUpdateOnNewDatafileDisabled() { OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); @@ -533,14 +535,20 @@ public void initializeSyncWithUpdateOnNewDatafileEnabled() { OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); @@ -566,14 +574,20 @@ public void initializeSyncWithDownloadToCacheDisabled() { OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); @@ -599,12 +613,20 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingEnab OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - (Answer) invocation -> { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); @@ -631,14 +653,20 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingEnabl OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); @@ -664,15 +692,21 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingDisa OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); + OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); try { @@ -698,14 +732,20 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingDisab OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, null, null, null, null, null, null, null, null, null); - doAnswer( - new Answer() { - public Object answer(InvocationOnMock invocation) { - String newDatafile = manager.getDatafile(context, R.raw.datafile_api); - datafileHandler.saveDatafile(context, manager.getDatafileConfig(), newDatafile); - return null; - } - }).when(manager.getDatafileHandler()).downloadDatafile(any(Context.class), any(DatafileConfig.class), any(DatafileLoadedListener.class)); + ArgumentCaptor contextCaptor = ArgumentCaptor.forClass(Context.class); + ArgumentCaptor configCaptor = ArgumentCaptor.forClass(DatafileConfig.class); + ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(DatafileLoadedListener.class); + + doAnswer(invocation -> { + Context capturedContext = contextCaptor.getValue(); + DatafileConfig capturedConfig = configCaptor.getValue(); + DatafileLoadedListener capturedListener = listenerCaptor.getValue(); + + String newDatafile = manager.getDatafile(capturedContext, R.raw.datafile_api); + datafileHandler.saveDatafile(capturedContext, capturedConfig, newDatafile); + + return datafileHandler; + }).when(manager.getDatafileHandler()).downloadDatafile(contextCaptor.capture(), configCaptor.capture(), listenerCaptor.capture()); OptimizelyClient client = manager.initialize(context, defaultDatafile, downloadToCache, updateConfigOnNewDatafile); diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java index f5df9af0f..92731f5ce 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java @@ -29,12 +29,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent; import org.slf4j.Logger; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -43,6 +41,9 @@ import static junit.framework.Assert.assertFalse; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import org.powermock.reflect.Whitebox; + + /** * Tests for {@link OptimizelyClient} @@ -56,28 +57,9 @@ public class OptimizelyClientTest { @Before public void setup() { - Field field = null; - try { - field = Optimizely.class.getDeclaredField("notificationCenter"); - // Mark the field as public so we can toy with it - field.setAccessible(true); -// Get the Modifiers for the Fields - Field modifiersField = Field.class.getDeclaredField("modifiers"); -// Allow us to change the modifiers - modifiersField.setAccessible(true); - // Remove final modifier from field by blanking out the bit that says "FINAL" in the Modifiers - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); -// Set new value - field.set(optimizely, notificationCenter); - - when(optimizely.isValid()).thenReturn(true); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + Whitebox.setInternalState(optimizely, "notificationCenter", notificationCenter); + when(optimizely.isValid()).thenReturn(true); } - @Test(expected=ArgumentsAreDifferent.class) public void testGoodActivation1() { OptimizelyClient optimizelyClient = new OptimizelyClient(optimizely, logger); diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java index 6753c3273..d6c747571 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java @@ -56,8 +56,8 @@ import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -73,7 +73,6 @@ import java.util.concurrent.TimeUnit; @RunWith(PowerMockRunner.class) -@PowerMockIgnore("jdk.internal.reflect.*") @PrepareForTest({OptimizelyManager.class, BatchEventProcessor.class, DefaultEventHandler.class, ODPManager.class, ODPSegmentManager.class, ODPEventManager.class, VuidManager.class}) public class OptimizelyManagerBuilderTest { diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java index f707c61ad..378d4ecb6 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java @@ -16,11 +16,11 @@ package com.optimizely.ab.android.sdk; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerOptlyActivityLifecycleCallbacksTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerOptlyActivityLifecycleCallbacksTest.java index e00e89b93..bb2264f3a 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerOptlyActivityLifecycleCallbacksTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerOptlyActivityLifecycleCallbacksTest.java @@ -23,7 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import static org.mockito.Mockito.verify; diff --git a/build.gradle b/build.gradle index a41cf70f1..730711c31 100644 --- a/build.gradle +++ b/build.gradle @@ -76,7 +76,8 @@ ext { jacksonversion= "2.11.2" annotations_ver = "1.2.0" junit_ver = "4.12" - mockito_ver = "1.10.19" + mockito_ver = "4.11.0" + mockito_ver_sdk_module = "3.6.28" powermock_ver = "2.0.9" support_test_runner_ver = "0.5" dexmaker_ver = "1.4" @@ -114,6 +115,10 @@ task testAllModulesTravis () { ':odp:connectedAndroidTest', ':odp:test' ) } +task testODPModule () { + logger.info("Running android tests for Travis") + dependsOn(':android-sdk:connectedAndroidTest', ':android-sdk:test',) +} // Publish to MavenCentral diff --git a/datafile-handler/build.gradle b/datafile-handler/build.gradle index e1f467650..4e4d592d8 100644 --- a/datafile-handler/build.gradle +++ b/datafile-handler/build.gradle @@ -39,8 +39,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } @@ -64,9 +64,7 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java index 10aa9181f..9c51b8f56 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java @@ -34,8 +34,8 @@ import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.contains; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileCacheTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileCacheTest.java index f7821f754..06a0345cf 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileCacheTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileCacheTest.java @@ -37,8 +37,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.contains; /** * Tests for {@link DatafileCache} diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileClientTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileClientTest.java index fe7e80e6e..c0ece2b5d 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileClientTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileClientTest.java @@ -36,10 +36,10 @@ import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.contains; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.contains; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileLoaderTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileLoaderTest.java index 469edca9e..931f005e5 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileLoaderTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileLoaderTest.java @@ -46,8 +46,8 @@ import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.atMost; import static org.mockito.Mockito.mock; diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileReschedulerTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileReschedulerTest.java index d671e5e44..0c247b124 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileReschedulerTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileReschedulerTest.java @@ -37,7 +37,7 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.fail; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileWorkerTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileWorkerTest.java index 02fce99a6..036b00d31 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileWorkerTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/DatafileWorkerTest.java @@ -19,10 +19,9 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/event-handler/build.gradle b/event-handler/build.gradle index e276a4213..1684d7c16 100644 --- a/event-handler/build.gradle +++ b/event-handler/build.gradle @@ -29,6 +29,11 @@ android { } testOptions { unitTests.returnDefaultValues = true + unitTests.all { + jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED' + jvmArgs '--add-opens=java.base/java.util.zip=ALL-UNNAMED' + jvmArgs '--add-opens=java.base/java.io=ALL-UNNAMED' + } } buildTypes { release { @@ -39,8 +44,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } buildToolsVersion build_tools_version } @@ -54,8 +59,7 @@ dependencies { testImplementation "junit:junit:$junit_ver" testImplementation "org.mockito:mockito-core:$mockito_ver" - testImplementation "org.powermock:powermock-module-junit4:$powermock_ver" - testImplementation "org.powermock:powermock-api-mockito2:$powermock_ver" + testImplementation "org.mockito:mockito-inline:$mockito_ver" testImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "androidx.work:work-testing:$work_runtime" @@ -67,9 +71,7 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventClientTest.java b/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventClientTest.java index a3ce2628a..89b86fed8 100644 --- a/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventClientTest.java +++ b/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventClientTest.java @@ -34,9 +34,9 @@ import java.net.HttpURLConnection; import java.net.URL; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.contains; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.contains; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; diff --git a/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventReschedulerTest.java b/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventReschedulerTest.java index 18236dfae..725d27612 100644 --- a/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventReschedulerTest.java +++ b/event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventReschedulerTest.java @@ -23,11 +23,11 @@ import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.Logger; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.matches; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.matches; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; diff --git a/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventClientTest.java b/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventClientTest.java index 0f222273d..7b42eaaf1 100644 --- a/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventClientTest.java +++ b/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventClientTest.java @@ -24,7 +24,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.exceptions.base.MockitoException; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.Logger; import java.io.IOException; @@ -35,8 +35,8 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventWorkerUnitTest.java b/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventWorkerUnitTest.java index 2baac0290..3384e8d6c 100644 --- a/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventWorkerUnitTest.java +++ b/event-handler/src/test/java/com/optimizely/ab/android/event_handler/EventWorkerUnitTest.java @@ -19,10 +19,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; + +import org.mockito.MockedStatic; + import android.content.Context; @@ -35,22 +39,17 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; /** * Tests {@link EventWorker} */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ EventWorker.class, EventHandlerUtils.class, WorkerParameters.class }) -@PowerMockIgnore("jdk.internal.reflect.*") +@RunWith(MockitoJUnitRunner.class) public class EventWorkerUnitTest { - private WorkerParameters mockWorkParams = PowerMockito.mock(WorkerParameters.class); + private WorkerParameters mockWorkParams = mock(WorkerParameters.class); private EventWorker eventWorker = new EventWorker(mock(Context.class), mockWorkParams); private String host = "http://www.foo.com"; @@ -72,31 +71,37 @@ public void dataForCompressedEvent() { assertEquals(data.getString("bodyCompressed"), base64); assertNull(data.getString("body")); } - @Test public void compressEvent() throws IOException { String base64 = "abc123"; - PowerMockito.mockStatic(EventHandlerUtils.class); - when(EventHandlerUtils.compress(anyString())).thenReturn(base64); - Data data = EventWorker.compressEvent(host, smallBody); - assertEquals(data.getString("url"), host); - assertEquals(data.getString("bodyCompressed"), base64); - assertNull(data.getString("body")); + // Mocking the static method compress in EventHandlerUtils + try (MockedStatic mockedStatic = mockStatic(EventHandlerUtils.class)) { + mockedStatic.when(() -> EventHandlerUtils.compress(anyString())).thenReturn(base64); + + Data data = EventWorker.compressEvent(host, smallBody); + + // Verify the results + assertEquals(data.getString("url"), host); + assertEquals(data.getString("bodyCompressed"), base64); + assertNull(data.getString("body")); + + // Optionally, verify that the method was called + mockedStatic.verify(() -> EventHandlerUtils.compress(anyString())); + } } + @Test public void compressEventWithCompressionFailure() throws IOException { - PowerMockito.mockStatic(EventHandlerUtils.class); - PowerMockito.doThrow(new IOException()).when(EventHandlerUtils.class); - EventHandlerUtils.compress(anyString()); // PowerMockito throws exception on this static method - - // return original body if compress fails - - Data data = EventWorker.compressEvent(host, smallBody); - assertEquals(data.getString("url"), host); - assertEquals(data.getString("body"), smallBody); - assertNull(data.getByteArray("bodyCompressed")); + try (MockedStatic mockedStatic = mockStatic(EventHandlerUtils.class)) { + mockedStatic.when(() -> EventHandlerUtils.compress(anyString())).thenThrow(new IOException()); + // return original body if compress fails + Data data = EventWorker.compressEvent(host, smallBody); + assertEquals(data.getString("url"), host); + assertEquals(data.getString("body"), smallBody); + assertNull(data.getByteArray("bodyCompressed")); + } } @Test @@ -155,12 +160,17 @@ public void getEventBodyFromInputDataCompressed() { public void getEventBodyFromInputDataDecompressFailure() throws Exception { Data data = EventWorker.compressEvent(host, smallBody); - PowerMockito.mockStatic(EventHandlerUtils.class); - PowerMockito.doThrow(new IOException()).when(EventHandlerUtils.class); - EventHandlerUtils.decompress(any()); // PowerMockito throws exception on this static method + try (MockedStatic mockedStatic = mockStatic(EventHandlerUtils.class)) { + mockedStatic.when(() -> EventHandlerUtils.compress(anyString())).thenThrow(new IOException()); - String str = eventWorker.getEventBodyFromInputData(data); - assertNull(str); + // return original body if compress fails + + EventHandlerUtils.decompress(any()); + + String str = eventWorker.getEventBodyFromInputData(data); + assertNull(str); + + } } @Test diff --git a/event-handler/src/test/resources/org.mockito.plugins.MockMaker b/event-handler/src/test/resources/org.mockito.plugins.MockMaker new file mode 100644 index 000000000..1f0955d45 --- /dev/null +++ b/event-handler/src/test/resources/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline diff --git a/odp/build.gradle b/odp/build.gradle index 5270d7f2b..4550d5d74 100644 --- a/odp/build.gradle +++ b/odp/build.gradle @@ -42,8 +42,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } buildToolsVersion build_tools_version @@ -73,7 +73,5 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" } diff --git a/odp/src/androidTest/java/com/optimizely/ab/android/odp/DefaultODPApiManagerTest.kt b/odp/src/androidTest/java/com/optimizely/ab/android/odp/DefaultODPApiManagerTest.kt index 8918f8a3a..f95f7e27f 100644 --- a/odp/src/androidTest/java/com/optimizely/ab/android/odp/DefaultODPApiManagerTest.kt +++ b/odp/src/androidTest/java/com/optimizely/ab/android/odp/DefaultODPApiManagerTest.kt @@ -20,7 +20,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.mock +import org.mockito.Mockito.* import org.mockito.Mockito.verify @RunWith(AndroidJUnit4::class) diff --git a/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPEventClientTest.kt b/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPEventClientTest.kt index 67501b82a..c36e06557 100644 --- a/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPEventClientTest.kt +++ b/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPEventClientTest.kt @@ -24,9 +24,9 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor -import org.mockito.Matchers.any -import org.mockito.Matchers.contains -import org.mockito.Matchers.eq +import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.contains +import org.mockito.ArgumentMatchers.eq import org.mockito.Mockito.`when` import org.mockito.Mockito.mock import org.mockito.Mockito.verify diff --git a/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPSegmentClientTest.kt b/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPSegmentClientTest.kt index c7a2a82ec..511fa909f 100644 --- a/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPSegmentClientTest.kt +++ b/odp/src/androidTest/java/com/optimizely/ab/android/odp/ODPSegmentClientTest.kt @@ -23,9 +23,9 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor -import org.mockito.Matchers.any -import org.mockito.Matchers.contains -import org.mockito.Matchers.eq +import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.contains +import org.mockito.ArgumentMatchers.eq import org.mockito.Mockito.`when` import org.mockito.Mockito.mock import org.mockito.Mockito.verify diff --git a/shared/build.gradle b/shared/build.gradle index bafad9054..2bab5c6d1 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -41,8 +41,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } buildToolsVersion build_tools_version } @@ -75,9 +75,7 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" } diff --git a/shared/src/androidTest/java/com/optimizely/ab/android/shared/ClientTest.java b/shared/src/androidTest/java/com/optimizely/ab/android/shared/ClientTest.java index 8bdd60382..d35f644d7 100644 --- a/shared/src/androidTest/java/com/optimizely/ab/android/shared/ClientTest.java +++ b/shared/src/androidTest/java/com/optimizely/ab/android/shared/ClientTest.java @@ -35,8 +35,8 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; diff --git a/test-app/build.gradle b/test-app/build.gradle index 14281e0eb..86653c090 100644 --- a/test-app/build.gradle +++ b/test-app/build.gradle @@ -30,8 +30,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } packagingOptions { resources { diff --git a/user-profile/build.gradle b/user-profile/build.gradle index 4d0d54e5f..238263fe6 100644 --- a/user-profile/build.gradle +++ b/user-profile/build.gradle @@ -39,8 +39,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } @@ -65,9 +65,7 @@ dependencies { androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" androidTestImplementation "org.mockito:mockito-core:$mockito_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-dx:$dexmaker_ver" - androidTestImplementation "com.crittercism.dexmaker:dexmaker-mockito:$dexmaker_ver" + androidTestImplementation "org.mockito:mockito-android:$mockito_ver" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" } diff --git a/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DefaultUserProfileServiceTest.java b/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DefaultUserProfileServiceTest.java index 544485432..87c84c581 100644 --- a/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DefaultUserProfileServiceTest.java +++ b/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DefaultUserProfileServiceTest.java @@ -106,7 +106,7 @@ public void teardown() { @Test public void startInBackground() throws InterruptedException { - DefaultUserProfileService ups = spy(DefaultUserProfileService.class); + DefaultUserProfileService ups = spy(userProfileService); CountDownLatch latch = new CountDownLatch(1); ups.startInBackground((u) -> { diff --git a/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DiskCacheTest.java b/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DiskCacheTest.java index 684bb52d7..b7e3c31be 100644 --- a/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DiskCacheTest.java +++ b/user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DiskCacheTest.java @@ -38,8 +38,8 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when;