diff --git a/android-compose-app/build.gradle.kts b/android-compose-app/build.gradle.kts index f1010669..8a3bfff6 100644 --- a/android-compose-app/build.gradle.kts +++ b/android-compose-app/build.gradle.kts @@ -62,7 +62,10 @@ android { compose = true } packagingOptions.resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}") - testOptions.execution = "ANDROIDX_TEST_ORCHESTRATOR" + testOptions{ + execution = "ANDROIDX_TEST_ORCHESTRATOR" + emulatorControl.enable = true + } } dependencies { @@ -80,6 +83,7 @@ dependencies { implementation(platform(libs.firebase.bom)) implementation(libs.firebase.analytics) implementation(libs.firebase.crashlytics) + implementation(libs.androidx.tracing) debugImplementation(libs.leakCanary.android) debugImplementation(libs.leakCanary.android.process) implementation(libs.leakCanary.plumber.android) @@ -91,6 +95,7 @@ dependencies { androidTestImplementation(libs.androidx.test.runner) androidTestUtil(libs.androidx.test.orchestrator) androidTestImplementation(libs.espresso.core) + androidTestImplementation(libs.espresso.device) androidTestImplementation(compose.desktop.uiTestJUnit4) androidTestImplementation(libs.turbine) androidTestImplementation(libs.leakCanary.android.instrumentation) diff --git a/android-compose-app/src/androidTest/java/com/softartdev/notedelight/ui/RotationTest.kt b/android-compose-app/src/androidTest/java/com/softartdev/notedelight/ui/RotationTest.kt new file mode 100644 index 00000000..a16e1cf1 --- /dev/null +++ b/android-compose-app/src/androidTest/java/com/softartdev/notedelight/ui/RotationTest.kt @@ -0,0 +1,67 @@ +package com.softartdev.notedelight.ui + +import android.content.Context +import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.core.app.ApplicationProvider +import androidx.test.espresso.IdlingRegistry +import androidx.test.espresso.device.DeviceInteraction.Companion.setScreenOrientation +import androidx.test.espresso.device.EspressoDevice.Companion.onDevice +import androidx.test.espresso.device.action.ScreenOrientation +import androidx.test.espresso.device.rules.ScreenOrientationRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import com.softartdev.notedelight.ComposeIdlingRes +import com.softartdev.notedelight.MainActivity +import com.softartdev.notedelight.shared.R +import com.softartdev.notedelight.shared.base.IdlingRes +import leakcanary.DetectLeaksAfterTestSuccess +import leakcanary.TestDescriptionHolder +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.RuleChain +import org.junit.runner.RunWith + +@LargeTest +@RunWith(AndroidJUnit4::class) +class RotationTest { + + private val composeTestRule = createAndroidComposeRule() + + @get:Rule + val rules: RuleChain = RuleChain.outerRule(TestDescriptionHolder) + .around(DetectLeaksAfterTestSuccess()) + .around(ScreenOrientationRule(ScreenOrientation.PORTRAIT)) + .around(composeTestRule) + + private val context = ApplicationProvider.getApplicationContext() + + @Before + fun registerIdlingResource() { + IdlingRegistry.getInstance().register(IdlingRes.countingIdlingResource) + composeTestRule.registerIdlingResource(ComposeIdlingRes) + } + + @After + fun unregisterIdlingResource() { + composeTestRule.unregisterIdlingResource(ComposeIdlingRes) + IdlingRegistry.getInstance().unregister(IdlingRes.countingIdlingResource) + } + + @Test + fun rotationTest() { + composeTestRule + .onNodeWithContentDescription(label = context.getString(R.string.create_note)) + .assertIsDisplayed() + + onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) + + composeTestRule + .onNodeWithContentDescription(label = context.getString(R.string.create_note)) + .assertIsDisplayed() + + onDevice().setScreenOrientation(ScreenOrientation.PORTRAIT) + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ef4bc730..a55983f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,7 @@ org.gradle.parallel=true org.gradle.daemon=true org.gradle.configureondemand=true org.gradle.caching=true +org.gradle.configuration-cache=true kotlin.code.style=official #kotlin.native.binary.memoryModel=experimental @@ -17,5 +18,6 @@ org.jetbrains.compose.experimental.uikit.enabled=true android.useAndroidX=true android.nonTransitiveRClass=true android.nonFinalResIds=true +android.experimental.androidTest.enableEmulatorControl=true xcodeproj=iosApp/iosApp.xcworkspace \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f063582e..8a503d44 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,6 +28,7 @@ androidxCoreSplashscreen = "1.0.1" androidxLegacySupport = "1.0.0" androidxPreference = "1.2.1" androidxMultidex = "2.0.1" +androidxTracing = "1.2.0" androidxLifecycle = "2.7.0" androidxArch = "2.2.0" androidxTestExt = "1.1.5" @@ -95,6 +96,7 @@ androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", versi androidx-legacy-support = { module = "androidx.legacy:legacy-support-v4", version.ref = "androidxLegacySupport" } androidx-preference = { module = "androidx.preference:preference", version.ref = "androidxPreference" } androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "androidxMultidex" } +androidx-tracing = { module = "androidx.tracing:tracing", version.ref = "androidxTracing" } androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidxLifecycle" } androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidxLifecycle" } @@ -104,7 +106,6 @@ androidx-arch-core-runtime = { module = "androidx.arch.core:core-runtime", versi androidx-arch-core-testing = { module = "androidx.arch.core:core-testing", version.ref = "androidxArch" } androidx-test-ext-junit = { module = "androidx.test.ext:junit", version.ref = "androidxTestExt" } - androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidxTest" } androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidxTest" } androidx-test-orchestrator = { module = "androidx.test:orchestrator", version.ref = "androidxTestOrchestrator" } @@ -131,6 +132,7 @@ appdirs = { module = "net.harawata:appdirs", version.ref = "appdirs" } espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" } espresso-contrib = { module = "androidx.test.espresso:espresso-contrib", version.ref = "espresso" } +espresso-device = { module = "androidx.test.espresso:espresso-device", version = "1.0.0-alpha08" } espresso-idling-resource = { module = "androidx.test.espresso:espresso-idling-resource", version.ref = "espresso" } desugar = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar" } diff --git a/iosApp/Podfile.lock b/iosApp/Podfile.lock index bf075764..319cf613 100644 --- a/iosApp/Podfile.lock +++ b/iosApp/Podfile.lock @@ -24,4 +24,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 0dc93a6f6109335ea8cd3f91d2c87cc8c99f04a3 -COCOAPODS: 1.12.1 +COCOAPODS: 1.15.2 diff --git a/iosApp/Pods/Manifest.lock b/iosApp/Pods/Manifest.lock index bf075764..319cf613 100644 --- a/iosApp/Pods/Manifest.lock +++ b/iosApp/Pods/Manifest.lock @@ -24,4 +24,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 0dc93a6f6109335ea8cd3f91d2c87cc8c99f04a3 -COCOAPODS: 1.12.1 +COCOAPODS: 1.15.2 diff --git a/iosApp/Pods/Pods.xcodeproj/project.pbxproj b/iosApp/Pods/Pods.xcodeproj/project.pbxproj index af0454e5..5456a567 100644 --- a/iosApp/Pods/Pods.xcodeproj/project.pbxproj +++ b/iosApp/Pods/Pods.xcodeproj/project.pbxproj @@ -328,8 +328,8 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1300; - LastUpgradeCheck = 1300; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 12.0"; diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh index 94102de6..79bf656a 100755 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh @@ -18,7 +18,7 @@ echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" BCSYMBOLMAP_DIR="BCSymbolMaps"