Auto-format all files with ktfmt

This commit is contained in:
Torsten Grote committed 2026-02-26 17:12:13 -03:00
1 parent 553dc04eda
commit cdf58c6ffb
328 files changed
+27233 -28139

No files matched your search

@@ -1,72 +1,72 @@
package org.fdroid.database
import org.fdroid.test.TestUtils.getRandomString
import org.junit.Test
import kotlin.random.Random
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
import org.fdroid.test.TestUtils.getRandomString
import org.junit.Test
internal class AppPrefsTest {
@Test
fun testDefaults() {
val prefs = AppPrefs(getRandomString())
assertFalse(prefs.ignoreAllUpdates)
for (i in 1..1337L) assertFalse(prefs.shouldIgnoreUpdate(i))
assertEquals(emptyList(), prefs.releaseChannels)
}
@Test
fun testDefaults() {
val prefs = AppPrefs(getRandomString())
assertFalse(prefs.ignoreAllUpdates)
for (i in 1..1337L) assertFalse(prefs.shouldIgnoreUpdate(i))
assertEquals(emptyList(), prefs.releaseChannels)
}
@Test
fun testIgnoreVersionCodeUpdate() {
val ignoredCode = Random.nextLong(1, Long.MAX_VALUE - 1)
val prefs = AppPrefs(getRandomString(), ignoredCode)
assertFalse(prefs.ignoreAllUpdates)
assertTrue(prefs.shouldIgnoreUpdate(ignoredCode - 1))
assertTrue(prefs.shouldIgnoreUpdate(ignoredCode))
assertFalse(prefs.shouldIgnoreUpdate(ignoredCode + 1))
@Test
fun testIgnoreVersionCodeUpdate() {
val ignoredCode = Random.nextLong(1, Long.MAX_VALUE - 1)
val prefs = AppPrefs(getRandomString(), ignoredCode)
assertFalse(prefs.ignoreAllUpdates)
assertTrue(prefs.shouldIgnoreUpdate(ignoredCode - 1))
assertTrue(prefs.shouldIgnoreUpdate(ignoredCode))
assertFalse(prefs.shouldIgnoreUpdate(ignoredCode + 1))
// after toggling, it is not ignored anymore
assertFalse(prefs.toggleIgnoreVersionCodeUpdate(ignoredCode)
.shouldIgnoreUpdate(ignoredCode))
}
// after toggling, it is not ignored anymore
assertFalse(prefs.toggleIgnoreVersionCodeUpdate(ignoredCode).shouldIgnoreUpdate(ignoredCode))
}
@Test
fun testIgnoreAllUpdates() {
val prefs = AppPrefs(getRandomString()).toggleIgnoreAllUpdates()
assertTrue(prefs.ignoreAllUpdates)
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
@Test
fun testIgnoreAllUpdates() {
val prefs = AppPrefs(getRandomString()).toggleIgnoreAllUpdates()
assertTrue(prefs.ignoreAllUpdates)
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
assertTrue(prefs.shouldIgnoreUpdate(Random.nextLong()))
// after toggling, all are not ignored anymore
val toggled = prefs.toggleIgnoreAllUpdates()
assertFalse(toggled.ignoreAllUpdates)
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
}
// after toggling, all are not ignored anymore
val toggled = prefs.toggleIgnoreAllUpdates()
assertFalse(toggled.ignoreAllUpdates)
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
assertFalse(toggled.shouldIgnoreUpdate(Random.nextLong(1, Long.MAX_VALUE - 1)))
}
@Test
fun testReleaseChannels() {
// no release channels initially
val prefs = AppPrefs(getRandomString())
assertEquals(emptyList(), prefs.releaseChannels)
@Test
fun testReleaseChannels() {
// no release channels initially
val prefs = AppPrefs(getRandomString())
assertEquals(emptyList(), prefs.releaseChannels)
// A gets toggled and is then in channels
val a = prefs.toggleReleaseChannel("A")
assertEquals(listOf("A"), a.releaseChannels)
// A gets toggled and is then in channels
val a = prefs.toggleReleaseChannel("A")
assertEquals(listOf("A"), a.releaseChannels)
// toggling it off returns empty list again
assertEquals(emptyList(), a.toggleReleaseChannel("A").releaseChannels)
// toggling it off returns empty list again
assertEquals(emptyList(), a.toggleReleaseChannel("A").releaseChannels)
// toggling A and B returns both
val ab = prefs.toggleReleaseChannel("A").toggleReleaseChannel("B")
assertEquals(setOf("A", "B"), ab.releaseChannels.toSet())
// toggling both off returns empty list again
assertEquals(emptyList(),
ab.toggleReleaseChannel("A").toggleReleaseChannel("B").releaseChannels)
}
// toggling A and B returns both
val ab = prefs.toggleReleaseChannel("A").toggleReleaseChannel("B")
assertEquals(setOf("A", "B"), ab.releaseChannels.toSet())
// toggling both off returns empty list again
assertEquals(
emptyList(),
ab.toggleReleaseChannel("A").toggleReleaseChannel("B").releaseChannels,
)
}
}
@@ -1,41 +1,40 @@
package org.fdroid.database
import org.fdroid.test.TestRepoUtils.getRandomLocalizedFileV2
import org.fdroid.test.TestUtils.getRandomList
import org.fdroid.test.TestUtils.getRandomString
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
import org.fdroid.test.TestRepoUtils.getRandomLocalizedFileV2
import org.fdroid.test.TestUtils.getRandomList
import org.fdroid.test.TestUtils.getRandomString
internal class ConvertersTest {
@Test
fun testListConversion() {
val list = getRandomList { getRandomString() }
@Test
fun testListConversion() {
val list = getRandomList { getRandomString() }
val str = Converters.listStringToString(list)
val convertedList = Converters.fromStringToListString(str)
assertEquals(list, convertedList)
}
val str = Converters.listStringToString(list)
val convertedList = Converters.fromStringToListString(str)
assertEquals(list, convertedList)
}
@Test
fun testEmptyListConversion() {
val list = emptyList<String>()
@Test
fun testEmptyListConversion() {
val list = emptyList<String>()
val str = Converters.listStringToString(list)
assertNull(str)
assertNull(Converters.listStringToString(null))
val convertedList = Converters.fromStringToListString(str)
assertEquals(list, convertedList)
}
val str = Converters.listStringToString(list)
assertNull(str)
assertNull(Converters.listStringToString(null))
val convertedList = Converters.fromStringToListString(str)
assertEquals(list, convertedList)
}
@Test
fun testFileV2Conversion() {
val file = getRandomLocalizedFileV2()
val str = Converters.localizedFileV2toString(file)
val convertedFile = Converters.fromStringToLocalizedFileV2(str)
assertEquals(file, convertedFile)
}
@Test
fun testFileV2Conversion() {
val file = getRandomLocalizedFileV2()
val str = Converters.localizedFileV2toString(file)
val convertedFile = Converters.fromStringToLocalizedFileV2(str)
assertEquals(file, convertedFile)
}
}
@@ -3,49 +3,44 @@ package org.fdroid.database
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.mockk.every
import io.mockk.mockk
import kotlin.test.assertFailsWith
import kotlinx.serialization.SerializationException
import org.fdroid.CompatibilityChecker
import org.fdroid.index.v2.FileV2
import org.fdroid.index.v2.RepoV2
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertFailsWith
@RunWith(AndroidJUnit4::class)
internal class DbV2StreamReceiverTest {
private val db: FDroidDatabaseInt = mockk()
private val compatChecker: CompatibilityChecker = mockk()
private val dbV2StreamReceiver = DbV2StreamReceiver(db, 42L, compatChecker)
private val db: FDroidDatabaseInt = mockk()
private val compatChecker: CompatibilityChecker = mockk()
private val dbV2StreamReceiver = DbV2StreamReceiver(db, 42L, compatChecker)
@Test
fun testFileV2Verified() {
// proper icon file passes
val repoV2 = RepoV2(
icon = mapOf("en" to FileV2(name = "/foo", sha256 = "bar", size = 23L)),
address = "http://example.org",
timestamp = 42L,
)
every { db.getRepositoryDao() } returns mockk(relaxed = true)
dbV2StreamReceiver.receive(repoV2, 42L)
@Test
fun testFileV2Verified() {
// proper icon file passes
val repoV2 =
RepoV2(
icon = mapOf("en" to FileV2(name = "/foo", sha256 = "bar", size = 23L)),
address = "http://example.org",
timestamp = 42L,
)
every { db.getRepositoryDao() } returns mockk(relaxed = true)
dbV2StreamReceiver.receive(repoV2, 42L)
// icon file without leading / does not pass
val repoV2NoSlash =
repoV2.copy(icon = mapOf("en" to FileV2(name = "foo", sha256 = "bar", size = 23L)))
assertFailsWith<SerializationException> {
dbV2StreamReceiver.receive(repoV2NoSlash, 42L)
}
// icon file without leading / does not pass
val repoV2NoSlash =
repoV2.copy(icon = mapOf("en" to FileV2(name = "foo", sha256 = "bar", size = 23L)))
assertFailsWith<SerializationException> { dbV2StreamReceiver.receive(repoV2NoSlash, 42L) }
// icon file without sha256 hash fails
val repoNoSha256 = repoV2.copy(icon = mapOf("en" to FileV2(name = "/foo", size = 23L)))
assertFailsWith<SerializationException> {
dbV2StreamReceiver.receive(repoNoSha256, 42L)
}
// icon file without sha256 hash fails
val repoNoSha256 = repoV2.copy(icon = mapOf("en" to FileV2(name = "/foo", size = 23L)))
assertFailsWith<SerializationException> { dbV2StreamReceiver.receive(repoNoSha256, 42L) }
// icon file without size fails
val repoNoSize = repoV2.copy(icon = mapOf("en" to FileV2(name = "/foo", sha256 = "bar")))
assertFailsWith<SerializationException> {
dbV2StreamReceiver.receive(repoNoSize, 42L)
}
}
// icon file without size fails
val repoNoSize = repoV2.copy(icon = mapOf("en" to FileV2(name = "/foo", sha256 = "bar")))
assertFailsWith<SerializationException> { dbV2StreamReceiver.receive(repoNoSize, 42L) }
}
}
@@ -1,32 +1,34 @@
package org.fdroid.download
import android.net.Uri
import java.io.File
import org.fdroid.IndexFile
import org.fdroid.database.Repository
import java.io.File
internal class TestDownloadFactory(private val httpManager: HttpManager) : DownloaderFactory() {
override fun create(
repo: Repository,
uri: Uri,
indexFile: IndexFile,
destFile: File,
): Downloader = HttpDownloaderV2(
httpManager = httpManager,
request = DownloadRequest(indexFile, repo.getMirrors()),
destFile = destFile
override fun create(
repo: Repository,
uri: Uri,
indexFile: IndexFile,
destFile: File,
): Downloader =
HttpDownloaderV2(
httpManager = httpManager,
request = DownloadRequest(indexFile, repo.getMirrors()),
destFile = destFile,
)
override fun create(
repo: Repository,
mirrors: List<Mirror>,
uri: Uri,
indexFile: IndexFile,
destFile: File,
tryFirst: Mirror?,
): Downloader = HttpDownloaderV2(
httpManager = httpManager,
request = DownloadRequest(indexFile, repo.getMirrors()),
destFile = destFile
override fun create(
repo: Repository,
mirrors: List<Mirror>,
uri: Uri,
indexFile: IndexFile,
destFile: File,
tryFirst: Mirror?,
): Downloader =
HttpDownloaderV2(
httpManager = httpManager,
request = DownloadRequest(indexFile, repo.getMirrors()),
destFile = destFile,
)
}
@@ -8,6 +8,12 @@ import io.mockk.MockKException
import io.mockk.every
import io.mockk.mockk
import io.mockk.slot
import java.util.concurrent.Callable
import kotlin.test.assertEquals
import kotlin.test.assertIs
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import org.fdroid.CompatibilityChecker
@@ -27,133 +33,122 @@ import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import java.util.concurrent.Callable
import kotlin.test.assertEquals
import kotlin.test.assertIs
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertTrue
@RunWith(AndroidJUnit4::class)
internal class RepoAdderIntegrationTest {
@get:Rule
var folder: TemporaryFolder = TemporaryFolder()
@get:Rule var folder: TemporaryFolder = TemporaryFolder()
private val context = InstrumentationRegistry.getInstrumentation().targetContext
private val db = mockk<FDroidDatabaseInt>()
private val repoDao = mockk<RepositoryDaoInt>()
private val tempFileProvider = TempFileProvider { folder.newFile() }
private val httpManager = HttpManager("test")
private val downloaderFactory = TestDownloadFactory(httpManager)
private val compatibilityChecker = mockk<CompatibilityChecker>()
private val context = InstrumentationRegistry.getInstrumentation().targetContext
private val db = mockk<FDroidDatabaseInt>()
private val repoDao = mockk<RepositoryDaoInt>()
private val tempFileProvider = TempFileProvider { folder.newFile() }
private val httpManager = HttpManager("test")
private val downloaderFactory = TestDownloadFactory(httpManager)
private val compatibilityChecker = mockk<CompatibilityChecker>()
private val repoAdder: RepoAdder
private val repoAdder: RepoAdder
init {
every { db.getRepositoryDao() } returns repoDao
repoAdder = RepoAdder(
context = context,
db = db,
tempFileProvider = tempFileProvider,
downloaderFactory = downloaderFactory,
httpManager = httpManager,
compatibilityChecker = compatibilityChecker,
)
init {
every { db.getRepositoryDao() } returns repoDao
repoAdder =
RepoAdder(
context = context,
db = db,
tempFileProvider = tempFileProvider,
downloaderFactory = downloaderFactory,
httpManager = httpManager,
compatibilityChecker = compatibilityChecker,
)
}
@Before
fun optIn() {
assumeTrue(false) // don't run integration tests with real repos all the time
}
@Test
fun testFedilabV1() = runTest {
// repo not in DB
every { repoDao.getRepository(any<String>()) } returns null
repoAdder.fetchRepository(
url =
"https://fdroid.fedilab.app/repo/" +
"?fingerprint=11F0A69910A4280E2CD3CCC3146337D006BE539B18E1A9FEACE15FF757A94FEB",
proxy = null,
)
repoAdder.addRepoState.test {
assertEquals(None, awaitItem())
val firstFetching = awaitItem()
assertTrue(firstFetching is Fetching)
assertNull(firstFetching.receivedRepo)
assertTrue(firstFetching.apps.isEmpty())
val secondFetching = awaitItem()
assertTrue(secondFetching is Fetching, "$secondFetching")
val repo = secondFetching.receivedRepo
assertNotNull(repo)
assertEquals("https://fdroid.fedilab.app/repo", repo.address)
println(repo.getName(LocaleListCompat.getDefault()) ?: "null")
println(repo.certificate)
assertEquals(1, (awaitItem() as Fetching).apps.size)
assertEquals(2, (awaitItem() as Fetching).apps.size)
assertEquals(3, (awaitItem() as Fetching).apps.size)
assertEquals(4, (awaitItem() as Fetching).apps.size)
assertEquals(5, (awaitItem() as Fetching).apps.size)
assertTrue((awaitItem() as Fetching).done)
}
@Before
fun optIn() {
assumeTrue(false) // don't run integration tests with real repos all the time
val state = repoAdder.addRepoState.value
assertTrue(state is Fetching, state.toString())
assertTrue(state.apps.isNotEmpty())
state.apps.forEach { app -> println(" ${app.packageName} ${app.summary}") }
val runSlot = slot<Callable<Any>>()
every { db.runInTransaction(capture(runSlot)) } answers { runSlot.captured.call() }
val newRepo: Repository = mockk()
every { newRepo.formatVersion } returns IndexFormatVersion.TWO
every { repoDao.insert(any<NewRepository>()) } returns 42L
every { repoDao.getRepository(42L) } returns newRepo
repoAdder.addFetchedRepository()
repoAdder.addRepoState.test {
val addedState = awaitItem()
assertTrue(addedState is Added, addedState.toString())
assertEquals(newRepo, addedState.repo)
// we are not mocking all the actual repo adding,
// so just assert that this fails due to mocking
assertIs<IndexUpdateResult.Error>(addedState.updateResult)
assertIs<MockKException>(addedState.updateResult.e)
}
}
@Test
fun testFedilabV1() = runTest {
// repo not in DB
every { repoDao.getRepository(any<String>()) } returns null
@Test
fun testIzzy() = runBlocking {
// repo not in DB
every { repoDao.getRepository(any<String>()) } returns null
repoAdder.fetchRepository(
url = "https://fdroid.fedilab.app/repo/" +
"?fingerprint=11F0A69910A4280E2CD3CCC3146337D006BE539B18E1A9FEACE15FF757A94FEB",
proxy = null
)
repoAdder.addRepoState.test {
assertEquals(None, awaitItem())
val firstFetching = awaitItem()
assertTrue(firstFetching is Fetching)
assertNull(firstFetching.receivedRepo)
assertTrue(firstFetching.apps.isEmpty())
repoAdder.fetchRepositoryInt(
url =
"https://apt.izzysoft.de/fdroid/repo" +
"?fingerprint=3BF0D6ABFEAE2F401707B6D966BE743BF0EEE49C2561B9BA39073711F628937A"
)
val state = repoAdder.addRepoState.value
assertTrue(state is Fetching, state.toString())
assertTrue(state.apps.isNotEmpty())
val secondFetching = awaitItem()
assertTrue(secondFetching is Fetching, "$secondFetching")
val repo = secondFetching.receivedRepo
assertNotNull(repo)
assertEquals("https://fdroid.fedilab.app/repo", repo.address)
println(repo.getName(LocaleListCompat.getDefault()) ?: "null")
println(repo.certificate)
assertEquals(1, (awaitItem() as Fetching).apps.size)
assertEquals(2, (awaitItem() as Fetching).apps.size)
assertEquals(3, (awaitItem() as Fetching).apps.size)
assertEquals(4, (awaitItem() as Fetching).apps.size)
assertEquals(5, (awaitItem() as Fetching).apps.size)
assertTrue((awaitItem() as Fetching).done)
}
val state = repoAdder.addRepoState.value
assertTrue(state is Fetching, state.toString())
assertTrue(state.apps.isNotEmpty())
state.apps.forEach { app ->
println(" ${app.packageName} ${app.summary}")
}
val runSlot = slot<Callable<Any>>()
every { db.runInTransaction(capture(runSlot)) } answers {
runSlot.captured.call()
}
val newRepo: Repository = mockk()
every { newRepo.formatVersion } returns IndexFormatVersion.TWO
every { repoDao.insert(any<NewRepository>()) } returns 42L
every { repoDao.getRepository(42L) } returns newRepo
repoAdder.addFetchedRepository()
repoAdder.addRepoState.test {
val addedState = awaitItem()
assertTrue(addedState is Added, addedState.toString())
assertEquals(newRepo, addedState.repo)
// we are not mocking all the actual repo adding,
// so just assert that this fails due to mocking
assertIs<IndexUpdateResult.Error>(addedState.updateResult)
assertIs<MockKException>(addedState.updateResult.e)
}
}
@Test
fun testIzzy() = runBlocking {
// repo not in DB
every { repoDao.getRepository(any<String>()) } returns null
repoAdder.fetchRepositoryInt(
url = "https://apt.izzysoft.de/fdroid/repo" +
"?fingerprint=3BF0D6ABFEAE2F401707B6D966BE743BF0EEE49C2561B9BA39073711F628937A"
)
val state = repoAdder.addRepoState.value
assertTrue(state is Fetching, state.toString())
assertTrue(state.apps.isNotEmpty())
println(state.receivedRepo?.getName(LocaleListCompat.getDefault()) ?: "null")
println(state.receivedRepo?.certificate)
state.apps.forEach { app ->
println(" ${app.packageName} ${app.summary}")
}
}
@Test
fun testIzzyWrongFingerprint() = runBlocking {
repoAdder.fetchRepositoryInt("https://apt.izzysoft.de/fdroid/repo?fingerprint=fooBar")
val state = repoAdder.addRepoState.value
assertTrue(state is AddRepoError, state.toString())
assertEquals(state.errorType, INVALID_FINGERPRINT, state.errorType.name)
}
println(state.receivedRepo?.getName(LocaleListCompat.getDefault()) ?: "null")
println(state.receivedRepo?.certificate)
state.apps.forEach { app -> println(" ${app.packageName} ${app.summary}") }
}
@Test
fun testIzzyWrongFingerprint() = runBlocking {
repoAdder.fetchRepositoryInt("https://apt.izzysoft.de/fdroid/repo?fingerprint=fooBar")
val state = repoAdder.addRepoState.value
assertTrue(state is AddRepoError, state.toString())
assertEquals(state.errorType, INVALID_FINGERPRINT, state.errorType.name)
}
}
File diff suppressed because it is too large. Load diff
@@ -2,227 +2,228 @@ package org.fdroid.repo
import android.net.Uri
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNull
import kotlin.test.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
internal class RepoUriGetterTest {
@Test
fun testTrailingSlash() {
val uri = RepoUriGetter.getUri("http://example.org/fdroid/repo/")
assertEquals("http://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testTrailingSlash() {
val uri = RepoUriGetter.getUri("http://example.org/fdroid/repo/")
assertEquals("http://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testWithoutTrailingSlash() {
val uri = RepoUriGetter.getUri("http://example.org/fdroid/repo")
assertEquals("http://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testWithoutTrailingSlash() {
val uri = RepoUriGetter.getUri("http://example.org/fdroid/repo")
assertEquals("http://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testFingerprint() {
val uri = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar&test=42")
assertEquals("https://example.org/repo", uri.uri.toString())
assertEquals("foobar", uri.fingerprint)
}
@Test
fun testFingerprint() {
val uri = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar&test=42")
assertEquals("https://example.org/repo", uri.uri.toString())
assertEquals("foobar", uri.fingerprint)
}
@Test
fun testFingerprintWithTrailingWhitespace() {
val uri1 = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar ")
assertEquals("https://example.org/repo", uri1.uri.toString())
assertEquals("foobar", uri1.fingerprint)
@Test
fun testFingerprintWithTrailingWhitespace() {
val uri1 = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar ")
assertEquals("https://example.org/repo", uri1.uri.toString())
assertEquals("foobar", uri1.fingerprint)
val uri2 = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar ")
assertEquals("https://example.org/repo", uri2.uri.toString())
assertEquals("foobar", uri2.fingerprint)
}
val uri2 = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar ")
assertEquals("https://example.org/repo", uri2.uri.toString())
assertEquals("foobar", uri2.fingerprint)
}
@Test
fun testHash() {
val uri = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar&test=42#hash")
assertEquals("https://example.org/repo", uri.uri.toString())
assertEquals("foobar", uri.fingerprint)
}
@Test
fun testHash() {
val uri = RepoUriGetter.getUri("https://example.org/repo?fingerprint=foobar&test=42#hash")
assertEquals("https://example.org/repo", uri.uri.toString())
assertEquals("foobar", uri.fingerprint)
}
@Test
fun testAddFdroidSlashRepo() {
val uri = RepoUriGetter.getUri("https://example.org")
assertEquals("https://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testAddFdroidSlashRepo() {
val uri = RepoUriGetter.getUri("https://example.org")
assertEquals("https://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testLeaveSingleRepo() {
val uri = RepoUriGetter.getUri("https://example.org/repo")
assertEquals("https://example.org/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testLeaveSingleRepo() {
val uri = RepoUriGetter.getUri("https://example.org/repo")
assertEquals("https://example.org/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testAddsMissingRepo() {
val uri = RepoUriGetter.getUri("https://example.org/fdroid/")
assertEquals("https://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testAddsMissingRepo() {
val uri = RepoUriGetter.getUri("https://example.org/fdroid/")
assertEquals("https://example.org/fdroid/repo", uri.uri.toString())
assertNull(uri.fingerprint)
}
@Test
fun testFDroidLink() {
val uri1 = RepoUriGetter.getUri(
"https://fdroid.link/index.html#https://f-droid.org/repo?" +
"fingerprint=43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab"
)
assertEquals("https://f-droid.org/repo", uri1.uri.toString())
assertEquals(
"43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab",
uri1.fingerprint
)
@Test
fun testFDroidLink() {
val uri1 =
RepoUriGetter.getUri(
"https://fdroid.link/index.html#https://f-droid.org/repo?" +
"fingerprint=43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab"
)
assertEquals("https://f-droid.org/repo", uri1.uri.toString())
assertEquals(
"43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab",
uri1.fingerprint,
)
val uri2 = RepoUriGetter.getUri("https://fdroid.link#https://f-droid.org/repo")
assertEquals("https://f-droid.org/repo", uri2.uri.toString())
assertNull(uri2.fingerprint)
val uri2 = RepoUriGetter.getUri("https://fdroid.link#https://f-droid.org/repo")
assertEquals("https://f-droid.org/repo", uri2.uri.toString())
assertNull(uri2.fingerprint)
val uri3 = RepoUriGetter.getUri("https://fdroid.link/#http://f-droid.org/repo")
assertEquals("http://f-droid.org/repo", uri3.uri.toString())
assertNull(uri3.fingerprint)
val uri3 = RepoUriGetter.getUri("https://fdroid.link/#http://f-droid.org/repo")
assertEquals("http://f-droid.org/repo", uri3.uri.toString())
assertNull(uri3.fingerprint)
val uri4 = RepoUriGetter.getUri("https://fdroid.link/")
// we don't care what it is as long as it doesn't crash
assertNull(uri4.fingerprint)
val uri4 = RepoUriGetter.getUri("https://fdroid.link/")
// we don't care what it is as long as it doesn't crash
assertNull(uri4.fingerprint)
val uri5 = RepoUriGetter.getUri("https://fdroid.link/#foo")
// we don't care what it is as long as it doesn't crash
assertNull(uri5.fingerprint)
val uri5 = RepoUriGetter.getUri("https://fdroid.link/#foo")
// we don't care what it is as long as it doesn't crash
assertNull(uri5.fingerprint)
val uri6 = RepoUriGetter.getUri("https://fdroid.link/#invalid://foo.bar")
// we don't care what it is as long as it doesn't crash
assertNull(uri6.fingerprint)
}
val uri6 = RepoUriGetter.getUri("https://fdroid.link/#invalid://foo.bar")
// we don't care what it is as long as it doesn't crash
assertNull(uri6.fingerprint)
}
@Test
fun testAddScheme() {
val uri1 = RepoUriGetter.getUri("example.com/repo")
assertEquals("https://example.com/repo", uri1.uri.toString())
assertNull(uri1.fingerprint)
@Test
fun testAddScheme() {
val uri1 = RepoUriGetter.getUri("example.com/repo")
assertEquals("https://example.com/repo", uri1.uri.toString())
assertNull(uri1.fingerprint)
val uri2 = RepoUriGetter.getUri(
"example.com/repo?" +
"fingerprint=43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab"
)
assertEquals("https://example.com/repo", uri2.uri.toString())
assertEquals(
"43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab",
uri2.fingerprint
)
}
val uri2 =
RepoUriGetter.getUri(
"example.com/repo?" +
"fingerprint=43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab"
)
assertEquals("https://example.com/repo", uri2.uri.toString())
assertEquals(
"43238d512c1e5eb2d6569f4a3afbf5523418b82e0a3ed1552770abb9a9c9ccab",
uri2.fingerprint,
)
}
@Test
fun testFDroidRepoUriScheme() {
val uri1 = RepoUriGetter.getUri(
"fdroidrepos://grobox.de/fdroid/repo?fingerprint=" +
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c"
)
assertEquals("https://grobox.de/fdroid/repo", uri1.uri.toString())
assertEquals(
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c",
uri1.fingerprint,
)
@Test
fun testFDroidRepoUriScheme() {
val uri1 =
RepoUriGetter.getUri(
"fdroidrepos://grobox.de/fdroid/repo?fingerprint=" +
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c"
)
assertEquals("https://grobox.de/fdroid/repo", uri1.uri.toString())
assertEquals(
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c",
uri1.fingerprint,
)
val uri2 = RepoUriGetter.getUri("fdroidrepo://grobox.de/fdroid/repo")
assertEquals("http://grobox.de/fdroid/repo", uri2.uri.toString())
assertNull(uri2.fingerprint)
val uri2 = RepoUriGetter.getUri("fdroidrepo://grobox.de/fdroid/repo")
assertEquals("http://grobox.de/fdroid/repo", uri2.uri.toString())
assertNull(uri2.fingerprint)
val uri3 = RepoUriGetter.getUri(
"FDROIDREPOS://grobox.de/fdroid/repo?fingerprint=" +
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c"
)
assertEquals("https://grobox.de/fdroid/repo", uri3.uri.toString())
assertEquals(
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c",
uri3.fingerprint,
)
val uri3 =
RepoUriGetter.getUri(
"FDROIDREPOS://grobox.de/fdroid/repo?fingerprint=" +
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c"
)
assertEquals("https://grobox.de/fdroid/repo", uri3.uri.toString())
assertEquals(
"28e14fb3b280bce8ff1e0f8e82726ff46923662cecff2a0689108ce19e8b347c",
uri3.fingerprint,
)
val uri4 = RepoUriGetter.getUri("fdroidREPO://grobox.de/fdroid/repo")
assertEquals("http://grobox.de/fdroid/repo", uri4.uri.toString())
assertNull(uri4.fingerprint)
}
val uri4 = RepoUriGetter.getUri("fdroidREPO://grobox.de/fdroid/repo")
assertEquals("http://grobox.de/fdroid/repo", uri4.uri.toString())
assertNull(uri4.fingerprint)
}
@Test
fun testUsernamePassword() {
val uri1 = RepoUriGetter.getUri(
"https://username:password@example.org/repo?fingerprint=foobar&test=42"
)
assertEquals("https://example.org/repo", uri1.uri.toString())
assertEquals("foobar", uri1.fingerprint)
assertEquals("username", uri1.username)
assertEquals("password", uri1.password)
@Test
fun testUsernamePassword() {
val uri1 =
RepoUriGetter.getUri("https://username:password@example.org/repo?fingerprint=foobar&test=42")
assertEquals("https://example.org/repo", uri1.uri.toString())
assertEquals("foobar", uri1.fingerprint)
assertEquals("username", uri1.username)
assertEquals("password", uri1.password)
// no password
val uri2 =
RepoUriGetter.getUri("https://username@example.org/repo?fingerprint=foobar&test=42")
assertEquals("https://example.org/repo", uri2.uri.toString())
assertEquals("foobar", uri2.fingerprint)
assertEquals("username", uri2.username)
assertNull(uri2.password)
// no password
val uri2 = RepoUriGetter.getUri("https://username@example.org/repo?fingerprint=foobar&test=42")
assertEquals("https://example.org/repo", uri2.uri.toString())
assertEquals("foobar", uri2.fingerprint)
assertEquals("username", uri2.username)
assertNull(uri2.password)
// empty host
val uri3 = RepoUriGetter.getUri("https://foo:bar@/repo?fingerprint=foobar&test=42")
assertEquals("https:///repo", uri3.uri.toString())
assertEquals("foobar", uri3.fingerprint)
assertEquals("foo", uri3.username)
assertEquals("bar", uri3.password)
// empty host
val uri3 = RepoUriGetter.getUri("https://foo:bar@/repo?fingerprint=foobar&test=42")
assertEquals("https:///repo", uri3.uri.toString())
assertEquals("foobar", uri3.fingerprint)
assertEquals("foo", uri3.username)
assertEquals("bar", uri3.password)
// empty everything doesn't crash
RepoUriGetter.getUri(":@/")
RepoUriGetter.getUri(":@")
RepoUriGetter.getUri("@")
RepoUriGetter.getUri("")
}
// empty everything doesn't crash
RepoUriGetter.getUri(":@/")
RepoUriGetter.getUri(":@")
RepoUriGetter.getUri("@")
RepoUriGetter.getUri("")
}
@Test
fun testNonHierarchicalUri() {
RepoUriGetter.getUri("mailto:nobody@google.com") // should not crash
}
@Test
fun testNonHierarchicalUri() {
RepoUriGetter.getUri("mailto:nobody@google.com") // should not crash
}
@Test
fun testSwapUri() {
val uri =
RepoUriGetter.getUri(
"http://192.168.3.159:8888/fdroid/repo?FINGERPRINT=" +
"BA29D02E303B2604D00C91189600E868B26FA0B248DC39D75C5C0F4349CA5FA9" +
"&SWAP=1&BSSID=44:FE:3B:7F:7F:EE"
)
assertEquals("http://192.168.3.159:8888/fdroid/repo", uri.uri.toString())
assertEquals(
"ba29d02e303b2604d00c91189600e868b26fa0b248dc39d75c5c0f4349ca5fa9",
uri.fingerprint,
)
}
@Test
fun testSwapUri() {
val uri =
RepoUriGetter.getUri(
"http://192.168.3.159:8888/fdroid/repo?FINGERPRINT=" +
"BA29D02E303B2604D00C91189600E868B26FA0B248DC39D75C5C0F4349CA5FA9" +
"&SWAP=1&BSSID=44:FE:3B:7F:7F:EE"
)
assertEquals("http://192.168.3.159:8888/fdroid/repo", uri.uri.toString())
assertEquals(
"ba29d02e303b2604d00c91189600e868b26fa0b248dc39d75c5c0f4349ca5fa9",
uri.fingerprint,
)
}
@Test
fun testIsSwapUri() {
val uri1 = Uri.parse(
"http://192.168.3.159:8888/fdroid/repo?FINGERPRINT=" +
"BA29D02E303B2604D00C91189600E868B26FA0B248DC39D75C5C0F4349CA5FA9" +
"&SWAP=1&BSSID=44:FE:3B:7F:7F:EE"
)
assertTrue(RepoUriGetter.isSwapUri(uri1))
@Test
fun testIsSwapUri() {
val uri1 =
Uri.parse(
"http://192.168.3.159:8888/fdroid/repo?FINGERPRINT=" +
"BA29D02E303B2604D00C91189600E868B26FA0B248DC39D75C5C0F4349CA5FA9" +
"&SWAP=1&BSSID=44:FE:3B:7F:7F:EE"
)
assertTrue(RepoUriGetter.isSwapUri(uri1))
val uri2 = Uri.parse(
"http://192.168.3.159:8888/fdroid/repo?" +
"swap=1&BSSID=44:FE:3B:7F:7F:EE"
)
assertTrue(RepoUriGetter.isSwapUri(uri2))
val uri2 =
Uri.parse("http://192.168.3.159:8888/fdroid/repo?" + "swap=1&BSSID=44:FE:3B:7F:7F:EE")
assertTrue(RepoUriGetter.isSwapUri(uri2))
val uri3 = Uri.parse("http://192.168.3.159:8888/fdroid/repo?BSSID=44:FE:3B:7F:7F:EE")
assertFalse(RepoUriGetter.isSwapUri(uri3))
val uri3 = Uri.parse("http://192.168.3.159:8888/fdroid/repo?BSSID=44:FE:3B:7F:7F:EE")
assertFalse(RepoUriGetter.isSwapUri(uri3))
val uri4 = Uri.parse("mailto:nobody@google.com")
assertFalse(RepoUriGetter.isSwapUri(uri4))
}
val uri4 = Uri.parse("mailto:nobody@google.com")
assertFalse(RepoUriGetter.isSwapUri(uri4))
}
}