diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ac532a1d7cf3efc768aefe4244c53aba42387d91..4ef254b4bac148296dc97fdcc50dd650dbebb4dd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -158,11 +158,11 @@ dependencies { implementation(libs.commonutils) -// testImplementation("junit:junit:4.13.2") + testImplementation("junit:junit:4.13.2") // androidTestImplementation("androidx.test.ext:junit:1.1.5") // androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") // androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01")) // androidTestImplementation("androidx.compose.ui:ui-test-junit4") -// debugImplementation("androidx.compose.ui:ui-tooling") -// debugImplementation("androidx.compose.ui:ui-test-manifest") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") } \ No newline at end of file diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/model/app/AppVersion.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/model/app/AppVersion.kt index 80e89e4112f64b99b8bced3f2592f01dfdb12fed..aaa951c0ac14d6fa232cf8541a004350cc8ec296 100644 --- a/app/src/main/java/net/novagamestudios/kaffeekasse/model/app/AppVersion.kt +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/model/app/AppVersion.kt @@ -8,6 +8,7 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import net.novagamestudios.common_utils.format import net.novagamestudios.kaffeekasse.BuildConfig @@ -38,11 +39,11 @@ data class AppVersion( override fun toString(): String = listOfNotNull( "$major.$minor.$patch", - if (type == Type.Stable) null else "$type$iteration" + if (type == Type.Stable) null else "$type${iteration format "%02d"}" ).joinToString("-") companion object { - private val Regex by lazy { """(\d+)\.(\d+)\.(\d+)(-(\w+)(\d+))?""".toRegex() } + private val Regex by lazy { """(\d+)\.(\d+)\.(\d+)(-([A-Za-z]+)(\d+)?)?""".toRegex() } operator fun invoke(string: String): AppVersion? { val match = Regex.matchEntire(string) ?: return null diff --git a/app/src/test/kotlin/net/novagamestudios/kaffeekasse/model/app/AppVersionTest.kt b/app/src/test/kotlin/net/novagamestudios/kaffeekasse/model/app/AppVersionTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..59d656917531ae81a99075537dbab6915ea73f4c --- /dev/null +++ b/app/src/test/kotlin/net/novagamestudios/kaffeekasse/model/app/AppVersionTest.kt @@ -0,0 +1,92 @@ +package net.novagamestudios.kaffeekasse.model.app.net.novagamestudios.kaffeekasse.model.app + +import net.novagamestudios.kaffeekasse.model.app.AppVersion +import org.junit.Assert +import org.junit.Test + +class AppVersionTest { + @Test + fun stringParsingValid() { + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion("1.2.3")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 0), AppVersion("1.2.3-beta")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 1), AppVersion("1.2.3-beta1")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 1), AppVersion("1.2.3-beta01")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 0), AppVersion("1.2.3-alpha")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1), AppVersion("1.2.3-alpha1")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1), AppVersion("1.2.3-alpha01")) + } + @Test + fun stringParsingInvalid() { + Assert.assertNull(AppVersion("")) + Assert.assertNull(AppVersion("1.2")) + Assert.assertNull(AppVersion("1.2.3-")) + Assert.assertNull(AppVersion("1.2.3-1")) + Assert.assertNull(AppVersion("1.2.3-01")) + Assert.assertNull(AppVersion("1.2.3-unknown")) + Assert.assertNull(AppVersion("1.2.3-unknown1")) + Assert.assertNull(AppVersion("1.2.3-unknown01")) + } + @Test + fun stringFindingValid() { + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion.findIn("version 1.2.3 ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion.findIn("version 1.2.3-1")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion.findIn("version 1.2.3 -unknown")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion.findIn("version 1.2.3 -unknown1")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), AppVersion.findIn("version 1.2.3 -unknown01")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 0), AppVersion.findIn("version 1.2.3-beta ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 1), AppVersion.findIn("version 1.2.3-beta1 ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Beta, 1), AppVersion.findIn("version 1.2.3-beta01 ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 0), AppVersion.findIn("version 1.2.3-alpha ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1), AppVersion.findIn("version 1.2.3-alpha1 ")) + Assert.assertEquals(AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1), AppVersion.findIn("version 1.2.3-alpha01 ")) + } + @Test + fun stringFindingInvalid() { + Assert.assertNull(AppVersion.findIn("")) + Assert.assertNull(AppVersion.findIn("version 1.2 ")) + Assert.assertNull(AppVersion.findIn("version 1.2.3-unknown ")) + } + @Test + fun stringFormatting() { + Assert.assertEquals("1.2.3", AppVersion(1, 2, 3, AppVersion.Type.Stable, 0).toString()) + Assert.assertEquals("1.2.3-beta00", AppVersion(1, 2, 3, AppVersion.Type.Beta, 0).toString()) + Assert.assertEquals("1.2.3-beta01", AppVersion(1, 2, 3, AppVersion.Type.Beta, 1).toString()) + Assert.assertEquals("1.2.3-alpha00", AppVersion(1, 2, 3, AppVersion.Type.Alpha, 0).toString()) + Assert.assertEquals("1.2.3-alpha01", AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1).toString()) + } + @Test + fun comparison() { + val list = listOf( + AppVersion(1, 2, 3, AppVersion.Type.Alpha, 0), + AppVersion(1, 2, 3, AppVersion.Type.Alpha, 1), + AppVersion(1, 2, 3, AppVersion.Type.Beta, 0), + AppVersion(1, 2, 3, AppVersion.Type.Beta, 1), + AppVersion(1, 2, 3, AppVersion.Type.Stable, 0), + AppVersion(1, 2, 4, AppVersion.Type.Stable, 0), + AppVersion(1, 3, 3, AppVersion.Type.Stable, 0), + AppVersion(2, 2, 3, AppVersion.Type.Stable, 0), + ) + for (i in list.indices) { + for (j in list.indices) { + if (i < j) { + assert(list[i] < list[j]) + assert(list[j] > list[i]) + assert(list[i] <= list[j]) + assert(list[j] >= list[i]) + } else if (i == j) { + assert(list[i] == list[j]) + assert(list[j] == list[i]) + assert(list[i] <= list[j]) + assert(list[j] <= list[i]) + assert(list[i] >= list[j]) + assert(list[j] >= list[i]) + } else { + assert(list[i] > list[j]) + assert(list[j] < list[i]) + assert(list[i] >= list[j]) + assert(list[j] <= list[i]) + } + } + } + } +} \ No newline at end of file