VersionCheckerUtilsKtTest

This commit is contained in:
Milos Kozak 2020-01-11 11:52:33 +01:00
parent ccf93d2191
commit e192be28d5
2 changed files with 109 additions and 90 deletions

View file

@ -59,7 +59,7 @@ class VersionCheckerUtils @Inject constructor() {
aapsLogger.debug(LTag.CORE, "Github master version no checked. No connectivity") aapsLogger.debug(LTag.CORE, "Github master version no checked. No connectivity")
@Suppress("SameParameterValue") @Suppress("SameParameterValue")
private fun compareWithCurrentVersion(newVersion: String?, currentVersion: String) { fun compareWithCurrentVersion(newVersion: String?, currentVersion: String) {
val newVersionElements = newVersion.toNumberList() val newVersionElements = newVersion.toNumberList()
val currentVersionElements = currentVersion.toNumberList() val currentVersionElements = currentVersion.toNumberList()
@ -129,7 +129,7 @@ class VersionCheckerUtils @Inject constructor() {
private fun String?.toNumberList() = private fun String?.toNumberList() =
this?.numericVersionPart().takeIf { !it.isNullOrBlank() }?.split(".")?.map { it.toInt() } this?.numericVersionPart().takeIf { !it.isNullOrBlank() }?.split(".")?.map { it.toInt() }
private fun findVersion(file: String?): String? { fun findVersion(file: String?): String? {
val regex = "(.*)version(.*)\"(((\\d+)\\.)+(\\d+))\"(.*)".toRegex() val regex = "(.*)version(.*)\"(((\\d+)\\.)+(\\d+))\"(.*)".toRegex()
return file?.lines()?.filter { regex.matches(it) }?.mapNotNull { regex.matchEntire(it)?.groupValues?.getOrNull(3) }?.firstOrNull() return file?.lines()?.filter { regex.matches(it) }?.mapNotNull { regex.matchEntire(it)?.groupValues?.getOrNull(3) }?.firstOrNull()
} }

View file

@ -1,85 +1,109 @@
package info.nightscout.androidaps.plugins.constraints.versionChecker package info.nightscout.androidaps.plugins.constraints.versionChecker
import android.content.Context
import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.MainApp
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.L import info.nightscout.androidaps.logging.L
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.utils.SP import info.nightscout.androidaps.utils.SP
import info.nightscout.androidaps.utils.resources.ResourceHelper
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers
import org.mockito.Mockito.* import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.any
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.times
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoRule
import org.powermock.api.mockito.PowerMockito import org.powermock.api.mockito.PowerMockito
import org.powermock.core.classloader.annotations.PrepareForTest import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.modules.junit4.PowerMockRunner
@RunWith(PowerMockRunner::class)
class VersionCheckerUtilsKtTest { class VersionCheckerUtilsKtTest {
@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Test lateinit var versionCheckerUtils: VersionCheckerUtils
fun `should keep 2 digit version`() {
assertEquals("1.2", "1.2".numericVersionPart()) @Mock lateinit var aapsLogger: AAPSLogger
@Mock lateinit var sp: info.nightscout.androidaps.utils.sharedPreferences.SP
@Mock lateinit var resourceHelper: ResourceHelper
@Mock lateinit var rxBusWrapper: RxBusWrapper
@Mock lateinit var context: Context
@Before fun setup() {
versionCheckerUtils = VersionCheckerUtils()
} }
@Test /*
fun `should keep 3 digit version`() { @Test
assertEquals("1.2.3", "1.2.3".numericVersionPart()) fun `should keep 2 digit version`() {
} assertEquals("1.2", "1.2".numericVersionPart())
}
@Test @Test
fun `should keep 4 digit version`() { fun `should keep 3 digit version`() {
assertEquals("1.2.3.4", "1.2.3.4".numericVersionPart()) assertEquals("1.2.3", "1.2.3".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version RC`() { fun `should keep 4 digit version`() {
assertEquals("1.2", "1.2-RC1".numericVersionPart()) assertEquals("1.2.3.4", "1.2.3.4".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version RC old format`() { fun `should strip 2 digit version RC`() {
assertEquals("1.2", "1.2RC1".numericVersionPart()) assertEquals("1.2", "1.2-RC1".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version RC without digit`() { fun `should strip 2 digit version RC old format`() {
assertEquals("1.2", "1.2-RC".numericVersionPart()) assertEquals("1.2", "1.2RC1".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version dev`() { fun `should strip 2 digit version RC without digit`() {
assertEquals("1.2", "1.2-dev".numericVersionPart()) assertEquals("1.2", "1.2-RC".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version dev old format 1`() { fun `should strip 2 digit version dev`() {
assertEquals("1.2", "1.2dev".numericVersionPart()) assertEquals("1.2", "1.2-dev".numericVersionPart())
} }
@Test @Test
fun `should strip 2 digit version dev old format 2`() { fun `should strip 2 digit version dev old format 1`() {
assertEquals("1.2", "1.2dev-a3".numericVersionPart()) assertEquals("1.2", "1.2dev".numericVersionPart())
} }
@Test @Test
fun `should strip 3 digit version RC`() { fun `should strip 2 digit version dev old format 2`() {
assertEquals("1.2.3", "1.2.3-RC1".numericVersionPart()) assertEquals("1.2", "1.2dev-a3".numericVersionPart())
} }
@Test @Test
fun `should strip 4 digit version RC`() { fun `should strip 3 digit version RC`() {
assertEquals("1.2.3.4", "1.2.3.4-RC5".numericVersionPart()) assertEquals("1.2.3", "1.2.3-RC1".numericVersionPart())
} }
@Test @Test
fun `should strip even with dot`() { fun `should strip 4 digit version RC`() {
assertEquals("1.2", "1.2.RC5".numericVersionPart()) assertEquals("1.2.3.4", "1.2.3.4-RC5".numericVersionPart())
} }
@Test
fun `should strip even with dot`() {
assertEquals("1.2", "1.2.RC5".numericVersionPart())
}
*/
@Test @Test
fun findVersionMatchesRegularVersion() { fun findVersionMatchesRegularVersion() {
val buildGradle = """blabla val buildGradle = """blabla
@ -89,11 +113,10 @@ class VersionCheckerUtilsKtTest {
| version = "2.2.2" | version = "2.2.2"
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
val detectedVersion: String? = findVersion(buildGradle) val detectedVersion: String? = versionCheckerUtils.findVersion(buildGradle)
assertEquals("2.2.2", detectedVersion) assertEquals("2.2.2", detectedVersion)
} }
// In case we merge a "x.x.x-dev" into master, don't see it as update. // In case we merge a "x.x.x-dev" into master, don't see it as update.
@Test @Test
fun `should return null on non-digit versions on master`() { fun `should return null on non-digit versions on master`() {
@ -104,31 +127,32 @@ class VersionCheckerUtilsKtTest {
| version = "2.2.2-nefarious-underground-mod" | version = "2.2.2-nefarious-underground-mod"
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
val detectedVersion: String? = findVersion(buildGradle) val detectedVersion: String? = versionCheckerUtils.findVersion(buildGradle)
assertEquals(null, detectedVersion) assertEquals(null, detectedVersion)
} }
@Test @Test
fun findVersionMatchesDoesNotMatchErrorResponse() { fun findVersionMatchesDoesNotMatchErrorResponse() {
val buildGradle = """<html><body>Balls! No build.gradle here. Move along</body><html>""" val buildGradle = """<html><body>Balls! No build.gradle here. Move along</body><html>"""
val detectedVersion: String? = findVersion(buildGradle) val detectedVersion: String? = versionCheckerUtils.findVersion(buildGradle)
assertEquals(null, detectedVersion) assertEquals(null, detectedVersion)
} }
@Test /*
fun testVersionStrip() { @Test
assertEquals("2.2.2", "2.2.2".versionStrip()) fun testVersionStrip() {
assertEquals("2.2.2", "2.2.2-dev".versionStrip()) assertEquals("2.2.2", "2.2.2".versionStrip())
assertEquals("2.2.2", "2.2.2dev".versionStrip()) assertEquals("2.2.2", "2.2.2-dev".versionStrip())
assertEquals("2.2.2", """"2.2.2"""".versionStrip()) assertEquals("2.2.2", "2.2.2dev".versionStrip())
} assertEquals("2.2.2", """"2.2.2"""".versionStrip())
}
*/
@Test @Test
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `should find update1`() { fun `should find update1`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.2.1") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.2.1")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -145,7 +169,7 @@ class VersionCheckerUtilsKtTest {
fun `should find update2`() { fun `should find update2`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.2.1-dev") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.2.1-dev")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -161,7 +185,7 @@ class VersionCheckerUtilsKtTest {
fun `should find update3`() { fun `should find update3`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.1") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2.3", currentVersion = "2.1")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -177,7 +201,7 @@ class VersionCheckerUtilsKtTest {
fun `should find update4`() { fun `should find update4`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2", currentVersion = "2.1.1") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2", currentVersion = "2.1.1")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -192,7 +216,7 @@ class VersionCheckerUtilsKtTest {
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `should find update5`() { fun `should find update5`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2.1", currentVersion = "2.2-dev") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2.1", currentVersion = "2.2-dev")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -207,7 +231,7 @@ class VersionCheckerUtilsKtTest {
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `should find update6`() { fun `should find update6`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.2.1", currentVersion = "2.2dev") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.2.1", currentVersion = "2.2dev")
//verify(bus, times(1)).post(any()) //verify(bus, times(1)).post(any())
@ -222,7 +246,7 @@ class VersionCheckerUtilsKtTest {
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `should not find update on fourth version digit`() { fun `should not find update on fourth version digit`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.5.0", currentVersion = "2.5.0.1") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.5.0", currentVersion = "2.5.0.1")
//verify(bus, times(0)).post(any()) //verify(bus, times(0)).post(any())
@ -233,9 +257,9 @@ class VersionCheckerUtilsKtTest {
@Test @Test
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `should not find update on personal version with same number` (){ fun `should not find update on personal version with same number`() {
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(newVersion = "2.5.0", currentVersion = "2.5.0-myversion") versionCheckerUtils.compareWithCurrentVersion(newVersion = "2.5.0", currentVersion = "2.5.0-myversion")
//verify(bus, times(0)).post(any()) //verify(bus, times(0)).post(any())
@ -244,7 +268,6 @@ class VersionCheckerUtilsKtTest {
PowerMockito.verifyNoMoreInteractions(SP::class.java) PowerMockito.verifyNoMoreInteractions(SP::class.java)
} }
@Test @Test
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `find same version`() { fun `find same version`() {
@ -256,7 +279,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "2.2.2") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "2.2.2")
//verify(bus, times(0)).post(any()) //verify(bus, times(0)).post(any())
@ -276,7 +299,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "2.2.2") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "2.2.2")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -285,7 +308,6 @@ class VersionCheckerUtilsKtTest {
PowerMockito.verifyNoMoreInteractions(SP::class.java) PowerMockito.verifyNoMoreInteractions(SP::class.java)
} }
@Test @Test
@PrepareForTest(MainApp::class, L::class, SP::class) @PrepareForTest(MainApp::class, L::class, SP::class)
fun `find higher version with longer number`() { fun `find higher version with longer number`() {
@ -297,7 +319,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "2.2.2") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "2.2.2")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -317,7 +339,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "3.0-RC04") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "3.0-RC04")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -337,7 +359,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "3.0RC04") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "3.0RC04")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -357,7 +379,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "3.RC04") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "3.RC04")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -377,7 +399,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "3.0.RC04") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "3.0.RC04")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -397,7 +419,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "3.7.9") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "3.7.9")
PowerMockito.verifyStatic(SP::class.java, times(1)) PowerMockito.verifyStatic(SP::class.java, times(1))
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong()) SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
@ -417,7 +439,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "2.3") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "2.3")
//verify(bus, times(0)).post(any()) //verify(bus, times(0)).post(any())
@ -437,7 +459,7 @@ class VersionCheckerUtilsKtTest {
| appName = "Aaoeu" | appName = "Aaoeu"
""".trimMargin() """.trimMargin()
prepareMainApp() prepareMainApp()
compareWithCurrentVersion(findVersion(buildGradle), currentVersion = "2.3-RC") versionCheckerUtils.compareWithCurrentVersion(versionCheckerUtils.findVersion(buildGradle), currentVersion = "2.3-RC")
//verify(bus, times(0)).post(any()) //verify(bus, times(0)).post(any())
@ -446,9 +468,6 @@ class VersionCheckerUtilsKtTest {
PowerMockito.verifyNoMoreInteractions(SP::class.java) PowerMockito.verifyNoMoreInteractions(SP::class.java)
} }
@Test @Test
@PrepareForTest(System::class) @PrepareForTest(System::class)
fun `set time`() { fun `set time`() {