From 35f450e4449a5b9c28edad0f89839db5d4128653 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Mon, 18 Jul 2022 12:56:56 +0300 Subject: [PATCH] Fix android tests --- app/src/androidTest/assets/manga/header.json | 2 +- .../org/koitharu/kotatsu/Instrumentation.kt | 9 +++++++++ .../java/org/koitharu/kotatsu/SampleData.kt | 9 +++------ .../kotatsu/core/os/ShortcutsUpdaterTest.kt | 17 +++++++++++++---- .../settings/backup/AppBackupAgentTest.kt | 2 +- .../kotatsu/core/os/ShortcutsUpdater.kt | 4 ++-- 6 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 app/src/androidTest/java/org/koitharu/kotatsu/Instrumentation.kt diff --git a/app/src/androidTest/assets/manga/header.json b/app/src/androidTest/assets/manga/header.json index 1ebbee769..dc56dbf8e 100644 --- a/app/src/androidTest/assets/manga/header.json +++ b/app/src/androidTest/assets/manga/header.json @@ -29,7 +29,7 @@ } ], "state": "FINISHED", - "largeCoverUrl": null, + "largeCoverUrl": "https://staticrm.rmr.rocks/uploads/pics/01/12/559_o.jpg", "description": null, "source": "READMANGA_RU" } \ No newline at end of file diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/Instrumentation.kt b/app/src/androidTest/java/org/koitharu/kotatsu/Instrumentation.kt new file mode 100644 index 000000000..b9ef582c1 --- /dev/null +++ b/app/src/androidTest/java/org/koitharu/kotatsu/Instrumentation.kt @@ -0,0 +1,9 @@ +package org.koitharu.kotatsu + +import android.app.Instrumentation +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +suspend fun Instrumentation.awaitForIdle() = suspendCoroutine { cont -> + waitForIdle { cont.resume(Unit) } +} \ No newline at end of file diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/SampleData.kt b/app/src/androidTest/java/org/koitharu/kotatsu/SampleData.kt index 5c592cba5..b7d4ad7e3 100644 --- a/app/src/androidTest/java/org/koitharu/kotatsu/SampleData.kt +++ b/app/src/androidTest/java/org/koitharu/kotatsu/SampleData.kt @@ -17,18 +17,15 @@ object SampleData { .add(KotlinJsonAdapterFactory()) .build() - val manga: Manga - get() = loadAsset("manga/header.json", Manga::class) + val manga: Manga = loadAsset("manga/header.json", Manga::class) - val mangaDetails: Manga - get() = loadAsset("manga/full.json", Manga::class) + val mangaDetails: Manga = loadAsset("manga/full.json", Manga::class) val tag = mangaDetails.tags.elementAt(2) val chapter = checkNotNull(mangaDetails.chapters)[2] - val favouriteCategory: FavouriteCategory - get() = loadAsset("categories/simple.json", FavouriteCategory::class) + val favouriteCategory: FavouriteCategory = loadAsset("categories/simple.json", FavouriteCategory::class) fun loadAsset(name: String, cls: KClass): T { val assets = InstrumentationRegistry.getInstrumentation().context.assets diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/core/os/ShortcutsUpdaterTest.kt b/app/src/androidTest/java/org/koitharu/kotatsu/core/os/ShortcutsUpdaterTest.kt index 1dd8925de..8b68552da 100644 --- a/app/src/androidTest/java/org/koitharu/kotatsu/core/os/ShortcutsUpdaterTest.kt +++ b/app/src/androidTest/java/org/koitharu/kotatsu/core/os/ShortcutsUpdaterTest.kt @@ -5,7 +5,6 @@ import android.content.pm.ShortcutManager import androidx.core.content.getSystemService import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry -import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -13,6 +12,7 @@ import org.junit.runner.RunWith import org.koin.test.KoinTest import org.koin.test.inject import org.koitharu.kotatsu.SampleData +import org.koitharu.kotatsu.awaitForIdle import org.koitharu.kotatsu.core.db.MangaDatabase import org.koitharu.kotatsu.history.domain.HistoryRepository import kotlin.test.assertEquals @@ -32,7 +32,7 @@ class ShortcutsUpdaterTest : KoinTest { @Test fun testUpdateShortcuts() = runTest { - shortcutsUpdater.await() + awaitUpdate() assertTrue(getShortcuts().isEmpty()) historyRepository.addOrUpdate( manga = SampleData.manga, @@ -41,8 +41,7 @@ class ShortcutsUpdaterTest : KoinTest { scroll = 2, percent = 0.3f ) - delay(1000) - shortcutsUpdater.await() + awaitUpdate() val shortcuts = getShortcuts() assertEquals(1, shortcuts.size) @@ -53,4 +52,14 @@ class ShortcutsUpdaterTest : KoinTest { val manager = checkNotNull(context.getSystemService()) return manager.dynamicShortcuts.filterNot { it.id == "com.squareup.leakcanary.dynamic_shortcut" } } + + private suspend fun awaitUpdate() { + val instrumentation = InstrumentationRegistry.getInstrumentation() + while (true) { + instrumentation.awaitForIdle() + if (shortcutsUpdater.await()) { + return + } + } + } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt b/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt index afd61d83a..1d0ca5498 100644 --- a/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt +++ b/app/src/androidTest/java/org/koitharu/kotatsu/settings/backup/AppBackupAgentTest.kt @@ -44,7 +44,7 @@ class AppBackupAgentTest : KoinTest { scroll = 40, percent = 0.2f, ) - val history = checkNotNull(historyRepository.getOne(SampleData.mangaDetails)) + val history = checkNotNull(historyRepository.getOne(SampleData.manga)) val agent = AppBackupAgent() val backup = agent.createBackupFile(get(), backupRepository) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/os/ShortcutsUpdater.kt b/app/src/main/java/org/koitharu/kotatsu/core/os/ShortcutsUpdater.kt index 424e312a9..dd18378af 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/os/ShortcutsUpdater.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/os/ShortcutsUpdater.kt @@ -52,8 +52,8 @@ class ShortcutsUpdater( } @VisibleForTesting - suspend fun await() { - shortcutsUpdateJob?.join() + suspend fun await(): Boolean { + return shortcutsUpdateJob?.join() != null } private suspend fun updateShortcutsImpl() {