diff --git a/Examples/OneSignalDemo/app/build.gradle b/Examples/OneSignalDemo/app/build.gradle index 75755cbfd2..49a7f1b040 100644 --- a/Examples/OneSignalDemo/app/build.gradle +++ b/Examples/OneSignalDemo/app/build.gradle @@ -5,7 +5,7 @@ plugins { android { compileSdkVersion 33 defaultConfig { - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -33,7 +33,7 @@ android { } huawei { dimension "default" - minSdkVersion 19 + minSdkVersion 21 applicationId "com.onesignal.sdktest" } } diff --git a/OneSignalSDK/build.gradle b/OneSignalSDK/build.gradle index 25ec6c0eb2..6ce6d76119 100644 --- a/OneSignalSDK/build.gradle +++ b/OneSignalSDK/build.gradle @@ -6,7 +6,7 @@ buildscript { buildVersions = [ compileSdkVersion: 34, targetSdkVersion: 34, - minSdkVersion: 19 + minSdkVersion: 21 ] androidGradlePluginVersion = '7.2.0' googleServicesGradlePluginVersion = '4.3.10' diff --git a/OneSignalSDK/onesignal/core/build.gradle b/OneSignalSDK/onesignal/core/build.gradle index b7987587c9..ee4183f6ec 100644 --- a/OneSignalSDK/onesignal/core/build.gradle +++ b/OneSignalSDK/onesignal/core/build.gradle @@ -88,6 +88,8 @@ dependencies { testImplementation("io.kotest:kotest-assertions-core:$kotestVersion") testImplementation("io.kotest:kotest-property:$kotestVersion") testImplementation("org.robolectric:robolectric:4.8.1") + // kotest-extensions-android allows Robolectric to work with Kotest via @RobolectricTest + testImplementation("br.com.colman:kotest-extensions-android:0.1.1") testImplementation("androidx.test:core-ktx:1.4.0") testImplementation("androidx.test:core:1.4.0") testImplementation("io.mockk:mockk:1.13.2") diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/ApplicationServiceTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/ApplicationServiceTests.kt index f9509c93aa..39ae8251ce 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/ApplicationServiceTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/ApplicationServiceTests.kt @@ -3,12 +3,12 @@ package com.onesignal.core.internal.application import android.app.Activity import android.content.Context import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.common.threading.WaiterWithValue import com.onesignal.common.threading.suspendifyOnThread import com.onesignal.core.internal.application.impl.ApplicationService import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.spyk diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/database/OSDatabaseTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/database/OSDatabaseTests.kt index 88ee9a08d9..edea19dd43 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/database/OSDatabaseTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/database/OSDatabaseTests.kt @@ -2,12 +2,12 @@ package com.onesignal.core.internal.database import android.content.ContentValues import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.core.internal.database.impl.OSDatabase import com.onesignal.core.internal.database.impl.OneSignalDbContract import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.session.internal.outcomes.impl.OutcomeTableProvider -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.mockk diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/preferences/PreferencesServiceTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/preferences/PreferencesServiceTests.kt index 6eab29d57c..52b07f8423 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/preferences/PreferencesServiceTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/preferences/PreferencesServiceTests.kt @@ -2,12 +2,12 @@ package com.onesignal.core.internal.preferences import android.content.Context import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.core.internal.preferences.impl.PreferencesService import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper import com.onesignal.mocks.MockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.assertions.throwables.shouldThrowUnit import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/selftest/JSONObjectEnvTest.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/selftest/JSONObjectEnvTest.kt index a0849c7811..1e64f28d31 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/selftest/JSONObjectEnvTest.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/selftest/JSONObjectEnvTest.kt @@ -1,7 +1,7 @@ package com.onesignal.selftest +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.common.toMap -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.core.spec.style.funSpec import io.kotest.matchers.shouldBe diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/session/internal/outcomes/OutcomeEventsRepositoryTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/session/internal/outcomes/OutcomeEventsRepositoryTests.kt index a25d4ac01d..e7fad98ac3 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/session/internal/outcomes/OutcomeEventsRepositoryTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/session/internal/outcomes/OutcomeEventsRepositoryTests.kt @@ -1,5 +1,6 @@ package com.onesignal.session.internal.outcomes +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.DatabaseMockHelper @@ -12,7 +13,6 @@ import com.onesignal.session.internal.outcomes.impl.OutcomeEventsRepository import com.onesignal.session.internal.outcomes.impl.OutcomeEventsTable import com.onesignal.session.internal.outcomes.impl.OutcomeSource import com.onesignal.session.internal.outcomes.impl.OutcomeSourceBody -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/LoginUserOperationExecutorTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/LoginUserOperationExecutorTests.kt index 25118c53bf..92db84b767 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/LoginUserOperationExecutorTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/LoginUserOperationExecutorTests.kt @@ -1,12 +1,12 @@ package com.onesignal.user.internal.operations +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.common.exceptions.BackendException import com.onesignal.core.internal.operations.ExecutionResponse import com.onesignal.core.internal.operations.ExecutionResult import com.onesignal.core.internal.operations.Operation import com.onesignal.mocks.AndroidMockHelper import com.onesignal.mocks.MockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import com.onesignal.user.internal.backend.CreateUserResponse import com.onesignal.user.internal.backend.IUserBackendService import com.onesignal.user.internal.backend.IdentityConstants diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/SubscriptionOperationExecutorTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/SubscriptionOperationExecutorTests.kt index e7153eda09..1b235738b8 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/SubscriptionOperationExecutorTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/operations/SubscriptionOperationExecutorTests.kt @@ -1,11 +1,11 @@ package com.onesignal.user.internal.operations +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.common.exceptions.BackendException import com.onesignal.core.internal.operations.ExecutionResult import com.onesignal.core.internal.operations.Operation import com.onesignal.mocks.AndroidMockHelper import com.onesignal.mocks.MockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import com.onesignal.user.internal.backend.ISubscriptionBackendService import com.onesignal.user.internal.backend.IdentityConstants import com.onesignal.user.internal.backend.SubscriptionObjectType diff --git a/OneSignalSDK/onesignal/in-app-messages/build.gradle b/OneSignalSDK/onesignal/in-app-messages/build.gradle index 04b6ab3a46..b2543d1297 100644 --- a/OneSignalSDK/onesignal/in-app-messages/build.gradle +++ b/OneSignalSDK/onesignal/in-app-messages/build.gradle @@ -88,6 +88,8 @@ dependencies { testImplementation("io.kotest:kotest-assertions-core:$kotestVersion") testImplementation("io.kotest:kotest-property:$kotestVersion") testImplementation("org.robolectric:robolectric:4.8.1") + // kotest-extensions-android allows Robolectric to work with Kotest via @RobolectricTest + testImplementation("br.com.colman:kotest-extensions-android:0.1.1") testImplementation("androidx.test:core-ktx:1.4.0") testImplementation("androidx.test:core:1.4.0") testImplementation("io.mockk:mockk:1.13.2") diff --git a/OneSignalSDK/onesignal/in-app-messages/src/test/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandlerTests.kt b/OneSignalSDK/onesignal/in-app-messages/src/test/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandlerTests.kt index a2db28ecce..b7e1967e70 100644 --- a/OneSignalSDK/onesignal/in-app-messages/src/test/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandlerTests.kt +++ b/OneSignalSDK/onesignal/in-app-messages/src/test/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandlerTests.kt @@ -1,6 +1,7 @@ package com.onesignal.inAppMessages.internal.preview import android.app.Activity +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.inAppMessages.internal.display.IInAppDisplayer @@ -9,7 +10,6 @@ import com.onesignal.mocks.MockHelper import com.onesignal.notifications.internal.INotificationActivityOpener import com.onesignal.notifications.internal.display.INotificationDisplayer import com.onesignal.notifications.internal.lifecycle.INotificationLifecycleService -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.coEvery diff --git a/OneSignalSDK/onesignal/location/build.gradle b/OneSignalSDK/onesignal/location/build.gradle index 8e029e151d..22b8c754cd 100644 --- a/OneSignalSDK/onesignal/location/build.gradle +++ b/OneSignalSDK/onesignal/location/build.gradle @@ -87,6 +87,8 @@ dependencies { testImplementation("io.kotest:kotest-assertions-core:$kotestVersion") testImplementation("io.kotest:kotest-property:$kotestVersion") testImplementation("org.robolectric:robolectric:4.8.1") + // kotest-extensions-android allows Robolectric to work with Kotest via @RobolectricTest + testImplementation("br.com.colman:kotest-extensions-android:0.1.1") testImplementation("androidx.test:core-ktx:1.4.0") testImplementation("androidx.test:core:1.4.0") testImplementation("io.mockk:mockk:1.13.2") diff --git a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/background/LocationBackgroundServiceTests.kt b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/background/LocationBackgroundServiceTests.kt index 64b35d7b76..09852888f0 100644 --- a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/background/LocationBackgroundServiceTests.kt +++ b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/background/LocationBackgroundServiceTests.kt @@ -3,6 +3,7 @@ package com.onesignal.location.internal.background import android.Manifest import android.app.Application import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.location.ILocationManager @@ -11,7 +12,6 @@ import com.onesignal.location.internal.common.LocationConstants import com.onesignal.location.internal.preferences.ILocationPreferencesService import com.onesignal.mocks.AndroidMockHelper import com.onesignal.mocks.MockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.every diff --git a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/controller/GmsLocationControllerTests.kt b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/controller/GmsLocationControllerTests.kt index fa390ba7c1..8ccc114419 100644 --- a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/controller/GmsLocationControllerTests.kt +++ b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/controller/GmsLocationControllerTests.kt @@ -1,6 +1,7 @@ package com.onesignal.location.internal.controller import android.location.Location +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.location.internal.controller.impl.GmsLocationController @@ -8,7 +9,6 @@ import com.onesignal.location.mocks.FusedLocationApiWrapperMock import com.onesignal.location.shadows.ShadowGoogleApiClient import com.onesignal.location.shadows.ShadowGoogleApiClientBuilder import com.onesignal.mocks.AndroidMockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe diff --git a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/permissions/LocationPermissionControllerTests.kt b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/permissions/LocationPermissionControllerTests.kt index bff20cb741..770e5d6f6d 100644 --- a/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/permissions/LocationPermissionControllerTests.kt +++ b/OneSignalSDK/onesignal/location/src/test/java/com/onesignal/location/internal/permissions/LocationPermissionControllerTests.kt @@ -1,10 +1,10 @@ package com.onesignal.location.internal.permissions +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.core.internal.permissions.IRequestPermissionService import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.longs.shouldBeGreaterThan import io.kotest.matchers.shouldBe diff --git a/OneSignalSDK/onesignal/notifications/build.gradle b/OneSignalSDK/onesignal/notifications/build.gradle index e7282436ac..dbe68239ed 100644 --- a/OneSignalSDK/onesignal/notifications/build.gradle +++ b/OneSignalSDK/onesignal/notifications/build.gradle @@ -100,6 +100,8 @@ dependencies { testImplementation("io.kotest:kotest-assertions-core:$kotestVersion") testImplementation("io.kotest:kotest-property:$kotestVersion") testImplementation("org.robolectric:robolectric:4.8.1") + // kotest-extensions-android allows Robolectric to work with Kotest via @RobolectricTest + testImplementation("br.com.colman:kotest-extensions-android:0.1.1") testImplementation("androidx.test:core-ktx:1.4.0") testImplementation("androidx.test:core:1.4.0") testImplementation("io.mockk:mockk:1.13.2") diff --git a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/channels/NotificationChannelManagerTests.kt b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/channels/NotificationChannelManagerTests.kt index 93db723e4a..6636094989 100644 --- a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/channels/NotificationChannelManagerTests.kt +++ b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/channels/NotificationChannelManagerTests.kt @@ -5,6 +5,7 @@ import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper @@ -12,7 +13,6 @@ import com.onesignal.mocks.MockHelper import com.onesignal.notifications.internal.channels.impl.NotificationChannelManager import com.onesignal.notifications.internal.common.NotificationGenerationJob import com.onesignal.notifications.shadows.ShadowRoboNotificationManager -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe diff --git a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/generation/NotificationGenerationProcessorTests.kt b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/generation/NotificationGenerationProcessorTests.kt index 627116792a..c7471deb43 100644 --- a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/generation/NotificationGenerationProcessorTests.kt +++ b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/generation/NotificationGenerationProcessorTests.kt @@ -2,6 +2,7 @@ package com.onesignal.notifications.internal.generation import android.content.Context import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper @@ -13,7 +14,6 @@ import com.onesignal.notifications.internal.display.INotificationDisplayer import com.onesignal.notifications.internal.generation.impl.NotificationGenerationProcessor import com.onesignal.notifications.internal.lifecycle.INotificationLifecycleService import com.onesignal.notifications.internal.summary.INotificationSummaryManager -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.coEvery diff --git a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/limiting/NotificationLimitManagerTests.kt b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/limiting/NotificationLimitManagerTests.kt index 7e31d2f02d..e3a1919be3 100644 --- a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/limiting/NotificationLimitManagerTests.kt +++ b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/limiting/NotificationLimitManagerTests.kt @@ -4,13 +4,13 @@ import android.content.Context import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.test.core.app.ApplicationProvider +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper import com.onesignal.notifications.internal.data.INotificationRepository import com.onesignal.notifications.internal.limiting.impl.NotificationLimitManager import com.onesignal.notifications.internal.summary.INotificationSummaryManager -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.mockk.coEvery import io.mockk.coVerify diff --git a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/summary/NotificationSummaryManagerTests.kt b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/summary/NotificationSummaryManagerTests.kt index d630c4b20a..75bf2aa479 100644 --- a/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/summary/NotificationSummaryManagerTests.kt +++ b/OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/summary/NotificationSummaryManagerTests.kt @@ -1,5 +1,6 @@ package com.onesignal.notifications.internal.summary +import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging import com.onesignal.mocks.AndroidMockHelper @@ -9,7 +10,6 @@ import com.onesignal.notifications.internal.display.ISummaryNotificationDisplaye import com.onesignal.notifications.internal.restoration.INotificationRestoreProcessor import com.onesignal.notifications.internal.summary.impl.NotificationSummaryManager import com.onesignal.notifications.shadows.ShadowRoboNotificationManager -import com.onesignal.testhelpers.extensions.RobolectricTest import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.coEvery diff --git a/OneSignalSDK/onesignal/testhelpers/build.gradle b/OneSignalSDK/onesignal/testhelpers/build.gradle index 6e7b7bb75b..82f7c6e736 100644 --- a/OneSignalSDK/onesignal/testhelpers/build.gradle +++ b/OneSignalSDK/onesignal/testhelpers/build.gradle @@ -38,14 +38,8 @@ android { dependencies { implementation(project(':OneSignal:core')) - // Only use for RobolectricExtension.kt, - // to bridge Robolectric's JUnit4 usage to Kotest's Junit 5 - implementation("junit:junit:4.13.2") - implementation("io.kotest:kotest-runner-junit5:$kotestVersion") implementation("io.kotest:kotest-runner-junit5-jvm:$kotestVersion") - implementation("org.robolectric:robolectric:4.8.1") - implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") implementation("io.mockk:mockk:1.13.2") implementation("androidx.test:core-ktx:1.5.0") } diff --git a/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/ContainedRobolectricRunner.kt b/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/ContainedRobolectricRunner.kt deleted file mode 100644 index ab8d352e2c..0000000000 --- a/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/ContainedRobolectricRunner.kt +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Code taken from https://github.com/kotest/kotest-extensions-robolectric with no changes. - * - * LICENSE: https://github.com/kotest/kotest-extensions-robolectric/blob/master/LICENSE - */ -package com.onesignal.testhelpers.extensions - -import org.junit.runners.model.FrameworkMethod -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config -import org.robolectric.internal.bytecode.InstrumentationConfiguration -import org.robolectric.pluginapi.config.ConfigurationStrategy -import org.robolectric.plugins.ConfigConfigurer -import java.lang.reflect.Method - -class ContainedRobolectricRunner( - private val config: Config?, -) : RobolectricTestRunner(PlaceholderTest::class.java, injector) { - private val placeHolderMethod: FrameworkMethod = children[0] - val sdkEnvironment = - getSandbox(placeHolderMethod).also { - configureSandbox(it, placeHolderMethod) - } - private val bootStrapMethod = - sdkEnvironment.bootstrappedClass(testClass.javaClass) - .getMethod(PlaceholderTest::bootStrapMethod.name) - - fun containedBefore() { - Thread.currentThread().contextClassLoader = sdkEnvironment.robolectricClassLoader - super.beforeTest(sdkEnvironment, placeHolderMethod, bootStrapMethod) - } - - fun containedAfter() { - super.afterTest(placeHolderMethod, bootStrapMethod) - super.finallyAfterTest(placeHolderMethod) - Thread.currentThread().contextClassLoader = ContainedRobolectricRunner::class.java.classLoader - } - - override fun createClassLoaderConfig(method: FrameworkMethod?): InstrumentationConfiguration { - return InstrumentationConfiguration.Builder(super.createClassLoaderConfig(method)) - .doNotAcquirePackage("io.kotest") - .build() - } - - override fun getConfig(method: Method?): Config { - val defaultConfiguration = - injector.getInstance(ConfigurationStrategy::class.java) - .getConfig(testClass.javaClass, method) - - if (config != null) { - val configConfigurer = injector.getInstance(ConfigConfigurer::class.java) - return configConfigurer.merge(defaultConfiguration[Config::class.java], config) - } - - return super.getConfig(method) - } - - class PlaceholderTest { - @org.junit.Test - fun testPlaceholder() { - } - - fun bootStrapMethod() { - } - } - - companion object { - private val injector = defaultInjector().build() - } -} diff --git a/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/RobolectricExtension.kt b/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/RobolectricExtension.kt deleted file mode 100644 index e6ea8cf0a0..0000000000 --- a/OneSignalSDK/onesignal/testhelpers/src/main/java/com/onesignal/testhelpers/extensions/RobolectricExtension.kt +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Code taken from https://github.com/kotest/kotest-extensions-robolectric with a - * fix in the intercept method. - * - * LICENSE: https://github.com/kotest/kotest-extensions-robolectric/blob/master/LICENSE - */ -package com.onesignal.testhelpers.extensions - -import android.app.Application -import io.kotest.common.runBlocking -import io.kotest.core.extensions.ConstructorExtension -import io.kotest.core.extensions.TestCaseExtension -import io.kotest.core.spec.AutoScan -import io.kotest.core.spec.Spec -import io.kotest.core.test.TestCase -import io.kotest.core.test.TestResult -import org.robolectric.annotation.Config -import java.util.concurrent.Callable -import kotlin.reflect.KClass -import kotlin.reflect.full.findAnnotation -import kotlin.time.Duration - -/** - * We override TestCaseExtension to configure the Robolectric environment because TestCase intercept - * occurs on the same thread the test is run. This is unfortunate because it is run for every test, - * rather than every spec. But the SpecExtension intercept is run on a different thread. - */ -@AutoScan -class RobolectricExtension : ConstructorExtension, TestCaseExtension { - private fun Class<*>.getParentClass(): List> { - if (superclass == null) return listOf() - return listOf(superclass) + superclass.getParentClass() - } - - private fun KClass<*>.getConfig(): Config { - val configAnnotations = - listOf(this.java).plus(this.java.getParentClass()) - .mapNotNull { it.kotlin.findAnnotation() } - .asSequence() - - val configAnnotation = configAnnotations.firstOrNull() - - if (configAnnotation != null) { - return Config.Builder(configAnnotation).build() - } - - val robolectricTestAnnotations = - listOf(this.java).plus(this.java.getParentClass()) - .mapNotNull { it.kotlin.findAnnotation() } - .asSequence() - - val application: KClass? = - robolectricTestAnnotations - .firstOrNull { it.application != KotestDefaultApplication::class }?.application - val sdk: Int? = robolectricTestAnnotations.firstOrNull { it.sdk != -1 }?.takeUnless { it.sdk == -1 }?.sdk - - return Config.Builder() - .also { builder -> - if (application != null) { - builder.setApplication(application.java) - } - - if (sdk != null) { - builder.setSdk(sdk) - } - }.build() - } - - override fun instantiate(clazz: KClass): Spec? { - clazz.findAnnotation() ?: return null - - return ContainedRobolectricRunner(clazz.getConfig()) - .sdkEnvironment.bootstrappedClass(clazz.java).newInstance() - } - - override suspend fun intercept( - testCase: TestCase, - execute: suspend (TestCase) -> TestResult, - ): TestResult { - return try { - runTest(testCase, execute) - } catch (t: Throwable) { - // Without this the whole test class will be silently be skipped - // if something throws - TestResult.Error(Duration.ZERO, t) - } - } - - private suspend fun runTest( - testCase: TestCase, - execute: suspend (TestCase) -> TestResult, - ): TestResult { - // FIXED: Updated code based on https://github.com/kotest/kotest/issues/2717 - val hasRobolectricAnnotation = - testCase.spec::class.annotations.any { annotation -> - annotation.annotationClass.qualifiedName == RobolectricTest::class.qualifiedName - } - - return if (hasRobolectricAnnotation) { - runTestRobolectric(testCase, execute) - } else { - execute(testCase) - } - } - - private suspend fun runTestRobolectric( - testCase: TestCase, - execute: suspend (TestCase) -> TestResult, - ): TestResult { - val containedRobolectricRunner = - ContainedRobolectricRunner(testCase.spec::class.getConfig()) - // sdkEnvironment.runOnMainThread is important to ensure Robolectric's - // looper state doesn't carry over to the next test class. - return containedRobolectricRunner.sdkEnvironment.runOnMainThread( - Callable { - containedRobolectricRunner.containedBefore() - val result = runBlocking { execute(testCase) } - containedRobolectricRunner.containedAfter() - result - }, - ) - } -} - -internal class KotestDefaultApplication : Application() - -annotation class RobolectricTest( - val application: KClass = KotestDefaultApplication::class, - val sdk: Int = -1, -)