From 195911c7653797eeb10d7066c66b438fcc9c161b Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 9 Oct 2024 14:20:20 -0300 Subject: [PATCH] Fixing Kotlin style issues ahead of ktlint upgrade --- .../repo/RepoManagerAddAllIntegrationTest.kt | 1 - .../org/fdroid/fdroid/compose/ComposeUtils.kt | 3 +- .../fdroid/views/IpfsGatewayAddActivity.kt | 42 +++++------ .../views/IpfsGatewaySettingsActivity.kt | 22 +++--- .../fdroid/views/repos/RepoPreviewScreen.kt | 16 +++-- .../fdroid/fdroid/work/RepoUpdateWorker.kt | 4 +- .../java/org/fdroid/database/AppTest.kt | 1 + .../fdroid/database/DbUpdateCheckerTest.kt | 4 +- .../FtsCaseInsensitiveMigrationTest.kt | 71 +++++++++++++------ .../org/fdroid/database/IndexV2DiffTest.kt | 4 +- .../database/RepoCertNonNullMigrationTest.kt | 12 ++-- .../src/main/java/org/fdroid/database/App.kt | 20 +++--- .../main/java/org/fdroid/database/AppDao.kt | 3 +- .../fdroid/database/FDroidDatabaseHolder.kt | 8 +-- .../java/org/fdroid/database/RepositoryDao.kt | 33 ++++++--- .../main/java/org/fdroid/database/Version.kt | 10 ++- .../java/org/fdroid/repo/RepoAdderTest.kt | 20 ++++-- .../kotlin/org/fdroid/BestLocaleTest.kt | 6 +- .../kotlin/org/fdroid/UpdateChecker.kt | 3 +- .../fdroid/index/v1/IndexV1StreamProcessor.kt | 12 ++-- .../index/v2/IndexV2DiffStreamProcessor.kt | 6 +- .../index/v2/IndexV2FullStreamProcessor.kt | 4 +- .../index/v1/IndexV1StreamProcessorTest.kt | 51 ++++++++----- .../v2/IndexV2FullStreamProcessorTest.kt | 12 ++-- .../fdroid/index/v2/ReflectionDifferTest.kt | 38 +++++----- .../kotlin/org/fdroid/index/IndexParser.kt | 4 +- .../org/fdroid/index/IndexConverterTest.kt | 10 +-- .../kotlin/org/fdroid/index/v1/IndexV1Test.kt | 14 ++-- .../kotlin/org/fdroid/index/v2/EntryTest.kt | 10 +-- .../v2/IndexV2DiffStreamProcessorTest.kt | 14 ++-- .../kotlin/org/fdroid/index/v2/IndexV2Test.kt | 12 ++-- .../main/kotlin/org/fdroid/test/DiffUtils.kt | 5 +- .../main/kotlin/org/fdroid/test/TestDataV1.kt | 50 ++++++------- .../main/kotlin/org/fdroid/test/TestDataV2.kt | 42 +++++------ 34 files changed, 336 insertions(+), 231 deletions(-) diff --git a/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt b/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt index ab5344d43..15adaec8c 100644 --- a/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt +++ b/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt @@ -166,5 +166,4 @@ internal class RepoManagerAddAllIntegrationTest { log.info(" final: $item") return item } - } diff --git a/app/src/main/java/org/fdroid/fdroid/compose/ComposeUtils.kt b/app/src/main/java/org/fdroid/fdroid/compose/ComposeUtils.kt index f287d7b41..4615a588f 100644 --- a/app/src/main/java/org/fdroid/fdroid/compose/ComposeUtils.kt +++ b/app/src/main/java/org/fdroid/fdroid/compose/ComposeUtils.kt @@ -62,7 +62,8 @@ object ComposeUtils { // set caption style to match MDC caption = it.caption.copy( color = colorResource(id = R.color.fdroid_caption), - fontSize = 12.sp) + fontSize = 12.sp, + ) ) } ?: MaterialTheme.typography, shapes = shapes ?: MaterialTheme.shapes diff --git a/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewayAddActivity.kt b/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewayAddActivity.kt index a1d20a21b..1c0c527de 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewayAddActivity.kt +++ b/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewayAddActivity.kt @@ -51,7 +51,8 @@ class IpfsGatewayAddActivity : AppCompatActivity() { setContent { FDroidContent { - IpfsGatewayAddScreen(onBackClicked = { onBackPressedDispatcher.onBackPressed() }, + IpfsGatewayAddScreen( + onBackClicked = { onBackPressedDispatcher.onBackPressed() }, onAddUserGateway = { url -> // don't allow adding default gateways to the user gateways list if (!Preferences.DEFAULT_IPFS_GATEWAYS.contains(url)) { @@ -63,7 +64,8 @@ class IpfsGatewayAddActivity : AppCompatActivity() { } } finish() - }) + }, + ) } } } @@ -78,24 +80,24 @@ fun IpfsGatewayAddScreen( val focusRequester = remember { FocusRequester() } var errorMsg by remember { mutableStateOf("") } - Scaffold(topBar = { - TopAppBar( - elevation = 4.dp, - backgroundColor = MaterialTheme.colors.primarySurface, - navigationIcon = { - IconButton(onClick = onBackClicked) { - Icon(Icons.Filled.ArrowBack, stringResource(R.string.back)) - } - }, - title = { - Text( - text = stringResource(R.string.ipfsgw_add_title), - modifier = Modifier.alpha(ContentAlpha.high), - ) - }, - ) - } - + Scaffold( + topBar = { + TopAppBar( + elevation = 4.dp, + backgroundColor = MaterialTheme.colors.primarySurface, + navigationIcon = { + IconButton(onClick = onBackClicked) { + Icon(Icons.Filled.ArrowBack, stringResource(R.string.back)) + } + }, + title = { + Text( + text = stringResource(R.string.ipfsgw_add_title), + modifier = Modifier.alpha(ContentAlpha.high), + ) + }, + ) + }, ) { paddingValues -> Column( verticalArrangement = Arrangement.spacedBy(16.dp), diff --git a/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewaySettingsActivity.kt b/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewaySettingsActivity.kt index f69184083..bf9bc33ef 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewaySettingsActivity.kt +++ b/app/src/main/java/org/fdroid/fdroid/views/IpfsGatewaySettingsActivity.kt @@ -59,8 +59,10 @@ class IpfsGatewaySettingsActivity : AppCompatActivity() { setContent { FDroidContent { - IpfsGatewaySettingsScreen(prefs = prefs, - onBackClicked = { onBackPressedDispatcher.onBackPressed() }) + IpfsGatewaySettingsScreen( + prefs = prefs, + onBackClicked = { onBackPressedDispatcher.onBackPressed() }, + ) } } } @@ -95,13 +97,16 @@ fun IpfsGatewaySettingsScreen( floatingActionButton = { // it doesn't seam to be supported to disable FABs, so just hide it for now. if (ipfsEnabled) { - FloatingActionButton(onClick = { - context.startActivity(Intent(context, IpfsGatewayAddActivity::class.java)) - }) { + FloatingActionButton( + onClick = { + context.startActivity(Intent(context, IpfsGatewayAddActivity::class.java)) + }, + ) { Icon(Icons.Filled.Add, stringResource(id = R.string.ipfsgw_add_add)) } } - }) { paddingValues -> + }, + ) { paddingValues -> Box( modifier = Modifier .padding(paddingValues) @@ -219,7 +224,9 @@ fun UserGatewaysSettings( userGateways = newGateways prefs.ipfsGwUserList = newGateways - }, enabled = ipfsEnabled, modifier = Modifier.align(Alignment.CenterVertically) + }, + enabled = ipfsEnabled, + modifier = Modifier.align(Alignment.CenterVertically), ) { Icon( Icons.Default.DeleteForever, @@ -234,7 +241,6 @@ fun UserGatewaysSettings( @Composable @Preview fun IpfsGatewaySettingsScreenPreview() { - val prefs = object : IPreferencesIpfs { override fun isIpfsEnabled(): Boolean = true override fun setIpfsEnabled(enabled: Boolean) = throw NotImplementedError() diff --git a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoPreviewScreen.kt b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoPreviewScreen.kt index a3d30fe5a..e251783e5 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/repos/RepoPreviewScreen.kt +++ b/app/src/main/java/org/fdroid/fdroid/views/repos/RepoPreviewScreen.kt @@ -121,14 +121,18 @@ fun RepoPreviewHeader( val buttonAction: () -> Unit = when (val res = state.fetchResult) { is IsNewRepository, is IsNewRepoAndNewMirror, is IsNewMirror -> onAddRepo // unfortunately we need to duplicate these functions - is IsExistingRepository -> { -> - val repoId = res.existingRepoId - RepoDetailsActivity.launch(context, repoId) + is IsExistingRepository -> { + { + val repoId = res.existingRepoId + RepoDetailsActivity.launch(context, repoId) + } } - is IsExistingMirror -> { -> - val repoId = res.existingRepoId - RepoDetailsActivity.launch(context, repoId) + is IsExistingMirror -> { + { + val repoId = res.existingRepoId + RepoDetailsActivity.launch(context, repoId) + } } else -> error("Unexpected fetch state: ${state.fetchResult}") diff --git a/app/src/main/java/org/fdroid/fdroid/work/RepoUpdateWorker.kt b/app/src/main/java/org/fdroid/fdroid/work/RepoUpdateWorker.kt index 77c0e3dd9..fd2c65015 100644 --- a/app/src/main/java/org/fdroid/fdroid/work/RepoUpdateWorker.kt +++ b/app/src/main/java/org/fdroid/fdroid/work/RepoUpdateWorker.kt @@ -101,7 +101,9 @@ class RepoUpdateWorker( .setConstraints(constraints) .build() workManager.enqueueUniquePeriodicWork( - UNIQUE_WORK_NAME_AUTO_UPDATE, UPDATE, workRequest + UNIQUE_WORK_NAME_AUTO_UPDATE, + UPDATE, + workRequest, ) } else { Log.w(TAG, "Not scheduling job due to settings!") diff --git a/libs/database/src/dbTest/java/org/fdroid/database/AppTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/AppTest.kt index 056e8fc45..f4b41d9b7 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/AppTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/AppTest.kt @@ -14,6 +14,7 @@ internal abstract class AppTest : DbTest() { protected val name1 = mapOf("en-US" to "1") protected val name2 = mapOf("en-US" to "2") protected val name3 = mapOf("en-US" to "3") + // it is important for testing that the icons are sharing at least one locale protected val icons1 = mapOf("en-US" to getRandomFileV2(), "bar" to getRandomFileV2()) protected val icons2 = mapOf("en-US" to getRandomFileV2(), "42" to getRandomFileV2()) diff --git a/libs/database/src/dbTest/java/org/fdroid/database/DbUpdateCheckerTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/DbUpdateCheckerTest.kt index 345ae454e..5b1edf429 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/DbUpdateCheckerTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/DbUpdateCheckerTest.kt @@ -32,7 +32,7 @@ internal class DbUpdateCheckerTest : AppTest() { private val compatChecker: (PackageVersionV2) -> Boolean = { true } private val packageInfo = PackageInfo().apply { - packageName = TestDataMinV2.packageName + packageName = TestDataMinV2.PACKAGE_NAME versionCode = 0 } @@ -219,7 +219,7 @@ internal class DbUpdateCheckerTest : AppTest() { val appVersions = updateChecker.getUpdatableApps() assertEquals(1, appVersions.size) assertEquals(0, appVersions[0].installedVersionCode) - assertEquals(TestDataMinV2.packageName, appVersions[0].packageName) + assertEquals(TestDataMinV2.PACKAGE_NAME, appVersions[0].packageName) assertEquals(TestDataMinV2.version.file.sha256, appVersions[0].update.version.versionId) } diff --git a/libs/database/src/dbTest/java/org/fdroid/database/FtsCaseInsensitiveMigrationTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/FtsCaseInsensitiveMigrationTest.kt index d0b785e49..33b5d02c9 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/FtsCaseInsensitiveMigrationTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/FtsCaseInsensitiveMigrationTest.kt @@ -40,12 +40,10 @@ internal class FtsCaseInsensitiveMigrationTest { private val repo = ContentValues().apply { put("repoId", 1) - put("name", Converters.localizedTextV2toString(mapOf( - "de" to "a", "en-US" to "b"))) + put("name", Converters.localizedTextV2toString(mapOf("de" to "a", "en-US" to "b"))) put("address", getRandomString()) put("certificate", "abcdef") - put("description", Converters.localizedTextV2toString(mapOf( - "de" to "aa", "en-US" to "bb"))) + put("description", Converters.localizedTextV2toString(mapOf("de" to "aa", "en-US" to "bb"))) put("version", Random.nextLong()) put("timestamp", Random.nextLong()) } @@ -59,14 +57,29 @@ internal class FtsCaseInsensitiveMigrationTest { private val oeffiMetadata = ContentValues().apply { put("packageName", "de.schildbach.oeffi") put("repoId", 1) - put("name", Converters.localizedTextV2toString(mapOf( - "de" to "Öffi", "en-US" to "Offi"))) - put("description", Converters.localizedTextV2toString(mapOf( - "de" to "Öffentlicher Nahverkehr", "en-US" to "Public Transport"))) + put( + "name", Converters.localizedTextV2toString( + mapOf( + "de" to "Öffi", "en-US" to "Offi" + ) + ) + ) + put( + "description", Converters.localizedTextV2toString( + mapOf( + "de" to "Öffentlicher Nahverkehr", "en-US" to "Public Transport" + ) + ) + ) put("license", "GPL-3.0") - put("summary", Converters.localizedTextV2toString(mapOf( - "de" to "Der König des Fahrplandschungels!", - "en-US" to " King of public transit planning!"))) + put( + "summary", Converters.localizedTextV2toString( + mapOf( + "de" to "Der König des Fahrplandschungels!", + "en-US" to " King of public transit planning!" + ) + ) + ) put("localizedName", "Öffi") put("localizedSummary", "Der König des Fahrplandschungels!") put("added", Random.nextLong()) @@ -89,17 +102,34 @@ internal class FtsCaseInsensitiveMigrationTest { private val transportrMetadata = ContentValues().apply { put("packageName", "de.grobox.liberario") put("repoId", 1) - put("name", Converters.localizedTextV2toString(mapOf( - "de" to "Transportr", "en-US" to "Transportr"))) - put("description", Converters.localizedTextV2toString(mapOf( - "de" to "Öffentlicher Nahverkehr", "en-US" to "Public Transport"))) + put( + "name", Converters.localizedTextV2toString( + mapOf( + "de" to "Transportr", "en-US" to "Transportr" + ) + ) + ) + put( + "description", Converters.localizedTextV2toString( + mapOf( + "de" to "Öffentlicher Nahverkehr", "en-US" to "Public Transport" + ) + ) + ) put("license", "GPL-3.0") - put("summary", Converters.localizedTextV2toString(mapOf( - "de" to "Freier Assistent für den öffentlichen Nahverkehr ohne Werbung und Tracking", - "en-US" to "Free Public Transport Assistant without Ads or Tracking"))) + put( + "summary", Converters.localizedTextV2toString( + mapOf( + "de" to "Freier Assistent für den öffentlichen Nahverkehr ohne Werbung", + "en-US" to "Free Public Transport Assistant without Ads or Tracking" + ) + ) + ) put("localizedName", "Transportr") - put("localizedSummary", - "Freier Assistent für den öffentlichen Nahverkehr ohne Werbung und Tracking") + put( + "localizedSummary", + "Freier Assistent für den öffentlichen Nahverkehr ohne Werbung und Tracking" + ) put("added", Random.nextLong()) put("lastUpdated", Random.nextLong()) put("isCompatible", true) @@ -119,7 +149,6 @@ internal class FtsCaseInsensitiveMigrationTest { @Test fun testMigration() = runBlocking { - helper.createDatabase(TEST_DB, 5).use { db -> // Database has schema version 5. Insert some data using SQL queries. // We can't use DAO classes because they expect the latest schema. diff --git a/libs/database/src/dbTest/java/org/fdroid/database/IndexV2DiffTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/IndexV2DiffTest.kt index 397a0fcf5..1aa044317 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/IndexV2DiffTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/IndexV2DiffTest.kt @@ -282,8 +282,8 @@ internal class IndexV2DiffTest : DbTest() { diff = diffRepoIdJson, endIndex = TestDataMidV2.index.copy( packages = mapOf( - TestDataMidV2.packageName1 to TestDataMidV2.app1, - TestDataMidV2.packageName2 to fdroidPackage, + TestDataMidV2.PACKAGE_NAME_1 to TestDataMidV2.app1, + TestDataMidV2.PACKAGE_NAME_2 to fdroidPackage, ) ), ) diff --git a/libs/database/src/dbTest/java/org/fdroid/database/RepoCertNonNullMigrationTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/RepoCertNonNullMigrationTest.kt index d49eea2fb..f3411efae 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/RepoCertNonNullMigrationTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/RepoCertNonNullMigrationTest.kt @@ -41,7 +41,8 @@ internal class RepoCertNonNullMigrationTest { put("address", "https://example.org/repo") put("certificate", "0123") put("timestamp", -1) - }) + }, + ) db.insert( RepositoryPreferences.TABLE, SQLiteDatabase.CONFLICT_FAIL, @@ -49,7 +50,8 @@ internal class RepoCertNonNullMigrationTest { put("repoId", repoId1) put("enabled", true) put("weight", Long.MAX_VALUE) - }) + }, + ) val repoId2 = db.insert( CoreRepository.TABLE, SQLiteDatabase.CONFLICT_FAIL, @@ -58,7 +60,8 @@ internal class RepoCertNonNullMigrationTest { put("description", localizedTextV2toString(mapOf("en-US" to "no cert desc"))) put("address", "https://example.com/repo") put("timestamp", -1) - }) + }, + ) db.insert( RepositoryPreferences.TABLE, SQLiteDatabase.CONFLICT_FAIL, @@ -66,7 +69,8 @@ internal class RepoCertNonNullMigrationTest { put("repoId", repoId2) put("enabled", true) put("weight", Long.MAX_VALUE - 2) - }) + }, + ) } // Re-open the database with version 2, auto-migrations are applied automatically diff --git a/libs/database/src/main/java/org/fdroid/database/App.kt b/libs/database/src/main/java/org/fdroid/database/App.kt index a44b047d7..09171c200 100644 --- a/libs/database/src/main/java/org/fdroid/database/App.kt +++ b/libs/database/src/main/java/org/fdroid/database/App.kt @@ -186,12 +186,14 @@ public data class App internal constructor( localizedFileLists?.iterator()?.forEach { file -> if (file.repoId != metadata.repoId || file.type != type) return@forEach val list = map.getOrPut(file.locale) { ArrayList() } as ArrayList - list.add(FileV2( - name = file.name, - sha256 = file.sha256, - size = file.size, - ipfsCidV1 = file.ipfsCidV1, - )) + list.add( + FileV2( + name = file.name, + sha256 = file.sha256, + size = file.size, + ipfsCidV1 = file.ipfsCidV1, + ) + ) } return map.ifEmpty { null } } @@ -418,8 +420,10 @@ internal fun List.toLocalizedFileV2(): LocalizedFileV2? = associate { fil // We can't restrict this query further (e.g. only from enabled repos or max weight), // because we are using this via @Relation on packageName for specific repos. // When filtering the result for only the repoId we are interested in, we'd get no icons. -@DatabaseView(viewName = LocalizedIcon.TABLE, - value = "SELECT * FROM ${LocalizedFile.TABLE} WHERE type='icon'") +@DatabaseView( + viewName = LocalizedIcon.TABLE, + value = "SELECT * FROM ${LocalizedFile.TABLE} WHERE type='icon'", +) internal data class LocalizedIcon( val repoId: Long, val packageName: String, diff --git a/libs/database/src/main/java/org/fdroid/database/AppDao.kt b/libs/database/src/main/java/org/fdroid/database/AppDao.kt index a5ada080a..0884b38e1 100644 --- a/libs/database/src/main/java/org/fdroid/database/AppDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/AppDao.kt @@ -130,7 +130,8 @@ public interface AppDao { } public enum class AppListSortOrder { - LAST_UPDATED, NAME + LAST_UPDATED, + NAME, } /** diff --git a/libs/database/src/main/java/org/fdroid/database/FDroidDatabaseHolder.kt b/libs/database/src/main/java/org/fdroid/database/FDroidDatabaseHolder.kt index bbb15f422..658778f4e 100644 --- a/libs/database/src/main/java/org/fdroid/database/FDroidDatabaseHolder.kt +++ b/libs/database/src/main/java/org/fdroid/database/FDroidDatabaseHolder.kt @@ -32,7 +32,7 @@ public object FDroidDatabaseHolder { // Singleton prevents multiple instances of database opening at the same time. @Volatile @GuardedBy("lock") - private var INSTANCE: FDroidDatabaseInt? = null + private var instance: FDroidDatabaseInt? = null private val lock = Object() internal val TAG = FDroidDatabase::class.simpleName @@ -52,7 +52,7 @@ public object FDroidDatabaseHolder { ): FDroidDatabase { // if the INSTANCE is not null, then return it, // if it is, then create the database - return INSTANCE ?: synchronized(lock) { + return instance ?: synchronized(lock) { val builder = Room.databaseBuilder( context.applicationContext, FDroidDatabaseInt::class.java, @@ -66,7 +66,7 @@ public object FDroidDatabaseHolder { if (fixture != null) addCallback(FixtureCallback(fixture)) } val instance = builder.build() - INSTANCE = instance + this.instance = instance // return instance instance } @@ -79,7 +79,7 @@ public object FDroidDatabaseHolder { GlobalScope.launch(dispatcher) { val database: FDroidDatabase synchronized(lock) { - database = INSTANCE ?: error("DB not yet initialized") + database = instance ?: error("DB not yet initialized") } fixture.prePopulateDb(database) Log.d(TAG, "Loaded fixtures") diff --git a/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt b/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt index da14e125c..7ba36397a 100644 --- a/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt @@ -182,7 +182,8 @@ internal interface RepositoryDaoInt : RepositoryDao { address: String, username: String? = null, password: String? = null, - certificate: String = "6789" // just used for testing + // just used for testing + certificate: String = "6789", ): Long { val repo = CoreRepository( name = mapOf("en-US" to address), @@ -234,9 +235,11 @@ internal interface RepositoryDaoInt : RepositoryDao { * Returns a non-archive repository with the given [certificate], if it exists in the DB. */ @Transaction - @Query("""SELECT * FROM ${CoreRepository.TABLE} + @Query( + """SELECT * FROM ${CoreRepository.TABLE} WHERE certificate = :certificate AND address NOT LIKE "%/archive" COLLATE NOCASE - LIMIT 1""") + LIMIT 1""" + ) fun getRepository(certificate: String): Repository? @Transaction @@ -261,9 +264,11 @@ internal interface RepositoryDaoInt : RepositoryDao { fun getRepositoryPreferences(repoId: Long): RepositoryPreferences? @RewriteQueriesToDropUnusedColumns - @Query("""SELECT * FROM ${Category.TABLE} + @Query( + """SELECT * FROM ${Category.TABLE} JOIN ${RepositoryPreferences.TABLE} AS pref USING (repoId) - WHERE pref.enabled = 1 GROUP BY id HAVING MAX(pref.weight)""") + WHERE pref.enabled = 1 GROUP BY id HAVING MAX(pref.weight)""" + ) override fun getLiveCategories(): LiveData> /** @@ -365,16 +370,22 @@ internal interface RepositoryDaoInt : RepositoryDao { @Query("UPDATE ${AppPrefs.TABLE} SET preferredRepoId = NULL WHERE preferredRepoId = :repoId") fun resetPreferredRepoInAppPrefs(repoId: Long) - @Query("""UPDATE ${RepositoryPreferences.TABLE} SET userMirrors = :mirrors - WHERE repoId = :repoId""") + @Query( + """UPDATE ${RepositoryPreferences.TABLE} SET userMirrors = :mirrors + WHERE repoId = :repoId""" + ) override fun updateUserMirrors(repoId: Long, mirrors: List) - @Query("""UPDATE ${RepositoryPreferences.TABLE} SET username = :username, password = :password - WHERE repoId = :repoId""") + @Query( + """UPDATE ${RepositoryPreferences.TABLE} SET username = :username, password = :password + WHERE repoId = :repoId""" + ) override fun updateUsernameAndPassword(repoId: Long, username: String?, password: String?) - @Query("""UPDATE ${RepositoryPreferences.TABLE} SET disabledMirrors = :disabledMirrors - WHERE repoId = :repoId""") + @Query( + """UPDATE ${RepositoryPreferences.TABLE} SET disabledMirrors = :disabledMirrors + WHERE repoId = :repoId""" + ) override fun updateDisabledMirrors(repoId: Long, disabledMirrors: List) /** diff --git a/libs/database/src/main/java/org/fdroid/database/Version.kt b/libs/database/src/main/java/org/fdroid/database/Version.kt index f72459b27..20735d7cb 100644 --- a/libs/database/src/main/java/org/fdroid/database/Version.kt +++ b/libs/database/src/main/java/org/fdroid/database/Version.kt @@ -147,9 +147,11 @@ internal fun ManifestV2.toManifest() = AppManifest( features = features.map { it.name }, ) -@DatabaseView(viewName = HighestVersion.TABLE, +@DatabaseView( + viewName = HighestVersion.TABLE, value = """SELECT repoId, packageName, antiFeatures FROM ${Version.TABLE} - GROUP BY repoId, packageName HAVING MAX(manifest_versionCode)""") + GROUP BY repoId, packageName HAVING MAX(manifest_versionCode)""", +) internal class HighestVersion( val repoId: Long, val packageName: String, @@ -230,7 +232,9 @@ private fun VersionedString.map( wantedType: VersionedStringType, factory: () -> T, ): T? { - return if (repoId != v.repoId || packageName != v.packageName || versionId != v.versionId || + return if (repoId != v.repoId || + packageName != v.packageName || + versionId != v.versionId || type != wantedType ) null else factory() diff --git a/libs/database/src/test/java/org/fdroid/repo/RepoAdderTest.kt b/libs/database/src/test/java/org/fdroid/repo/RepoAdderTest.kt index 21e95fc20..1a678a649 100644 --- a/libs/database/src/test/java/org/fdroid/repo/RepoAdderTest.kt +++ b/libs/database/src/test/java/org/fdroid/repo/RepoAdderTest.kt @@ -433,7 +433,8 @@ internal class RepoAdderTest { coEvery { httpManager.getDigestInputStream(match { it.indexFile.name == "../index-min-v2.json" && - it.mirrors.size == 1 && it.mirrors[0].baseUrl == urlTrimmed + it.mirrors.size == 1 && + it.mirrors[0].baseUrl == urlTrimmed }) } returns indexStream every { @@ -550,7 +551,8 @@ internal class RepoAdderTest { coEvery { httpManager.getDigestInputStream(match { it.indexFile.name == "../index-min-v2.json" && - it.mirrors.size == 1 && it.mirrors[0].baseUrl == repoAddress + it.mirrors.size == 1 && + it.mirrors[0].baseUrl == repoAddress }) } returns indexStream every { @@ -610,7 +612,8 @@ internal class RepoAdderTest { coEvery { httpManager.getDigestInputStream(match { it.indexFile.name == "/index-v2.json" && - it.mirrors.size == 1 && it.mirrors[0].baseUrl == "https://example.org/repo" + it.mirrors.size == 1 && + it.mirrors[0].baseUrl == "https://example.org/repo" }) } returns indexStream every { @@ -776,7 +779,8 @@ internal class RepoAdderTest { coEvery { httpManager.getDigestInputStream(match { it.indexFile.name == "../index-min-v2.json" && - it.mirrors.size == 1 && it.mirrors[0].baseUrl == urlTrimmed + it.mirrors.size == 1 && + it.mirrors[0].baseUrl == urlTrimmed }) } returns indexStream every { @@ -803,7 +807,8 @@ internal class RepoAdderTest { it.address == TestDataMinV2.repo.address && it.formatVersion == IndexFormatVersion.TWO && it.name.getBestLocale(localeList) == repoName && - it.username == username && it.password == password // this is the important bit + it.username == username && + it.password == password // this is the important bit }) } returns 42L every { repoDao.updateUserMirrors(42L, listOf(urlTrimmed)) } just Runs @@ -850,7 +855,8 @@ internal class RepoAdderTest { coEvery { httpManager.getDigestInputStream(match { it.indexFile.name == "../index-min-v2.json" && - it.mirrors.size == 1 && it.mirrors[0].baseUrl == urlTrimmed + it.mirrors.size == 1 && + it.mirrors[0].baseUrl == urlTrimmed }) } returns indexStream every { @@ -895,7 +901,7 @@ internal class RepoAdderTest { val state3 = awaitItem() assertIs(state3) assertEquals(TestDataMinV2.packages.size, state3.apps.size) - assertEquals(TestDataMinV2.packageName, state3.apps[0].packageName) + assertEquals(TestDataMinV2.PACKAGE_NAME, state3.apps[0].packageName) assertFalse(state3.done) // final result diff --git a/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/BestLocaleTest.kt b/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/BestLocaleTest.kt index 45b45d94a..e75ce41fa 100644 --- a/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/BestLocaleTest.kt +++ b/libs/index/src/androidInstrumentedTest/kotlin/org/fdroid/BestLocaleTest.kt @@ -74,10 +74,12 @@ internal class BestLocaleTest { // handle stripped script (Hans/Hant) assertEquals( "zh-TW", - getMap("en-US", + getMap( + "en-US", "zh-CN", "zh-HK", - "zh-TW").getBestLocale(getLocaleList("zh-Hant-TW,zh-Hans-CN")), + "zh-TW", + ).getBestLocale(getLocaleList("zh-Hant-TW,zh-Hans-CN")), ) assertEquals( "zh-CN", diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt index 38455b460..dbee9c3f3 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt @@ -99,7 +99,8 @@ public class UpdateChecker( versions.iterator().forEach versions@{ version -> // if the installed version has a known vulnerability, we return it as well if (includeKnownVulnerabilities && - version.versionCode == installedVersionCode && version.hasKnownVulnerability + version.versionCode == installedVersionCode && + version.hasKnownVulnerability ) return version // if version code is not higher than installed skip package as list is sorted if (version.versionCode <= installedVersionCode) return null diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1StreamProcessor.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1StreamProcessor.kt index 84911d587..140946bbd 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1StreamProcessor.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1StreamProcessor.kt @@ -87,10 +87,10 @@ public class IndexV1StreamProcessor( private fun deserializeRepo(decoder: JsonDecoder, index: Int) { require(index == descriptor.getElementIndex("repo")) val repo = decoder.decodeSerializableValue(RepoV1.serializer()) - if (lastTimestamp >= repo.timestamp) { - throw OldIndexException(lastTimestamp == repo.timestamp, - "Old repo ${repo.address} ${repo.timestamp}") - } + if (lastTimestamp >= repo.timestamp) throw OldIndexException( + isSameTimestamp = lastTimestamp == repo.timestamp, + msg = "Old repo ${repo.address} ${repo.timestamp}", + ) val repoV2 = repo.toRepoV2( locale = DEFAULT_LOCALE, antiFeatures = emptyMap(), @@ -165,7 +165,9 @@ public class IndexV1StreamProcessor( val packageIndex = compositeDecoder.decodeElementIndex(descriptor) if (packageIndex == DECODE_DONE) break val packageVersionV1 = decoder.decodeSerializableElement( - descriptor, index + 1, PackageV1.serializer() + descriptor = descriptor, + index = index + 1, + deserializer = PackageV1.serializer(), ) val versionCode = packageVersionV1.versionCode ?: 0 val suggestedVersionCode = diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessor.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessor.kt index 207949dea..c501d51b0 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessor.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessor.kt @@ -49,11 +49,13 @@ public class IndexV2DiffStreamProcessor( val index = decoder.decodeElementIndex(descriptor) if (index == packagesIndex) diffPackages(decoder, index) } + packagesIndex -> { diffPackages(decoder, startIndex) val index = decoder.decodeElementIndex(descriptor) if (index == repoIndex) diffRepo(version, decoder, index) } + else -> error("Unexpected startIndex: $startIndex") } var currentIndex = 0 @@ -89,7 +91,9 @@ public class IndexV2DiffStreamProcessor( val packageName = decoder.decodeStringElement(descriptor, index) decoder.decodeElementIndex(descriptor) val packageV2 = decoder.decodeSerializableElement( - descriptor, index + 1, JsonElement.serializer() + descriptor = descriptor, + index = index + 1, + deserializer = JsonElement.serializer(), ) if (packageV2 is JsonNull) { // delete app and existing metadata diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessor.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessor.kt index 92d8814f5..12c3bd45b 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessor.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessor.kt @@ -88,7 +88,9 @@ public class IndexV2FullStreamProcessor( val packageName = decoder.decodeStringElement(descriptor, index) decoder.decodeElementIndex(descriptor) val packageV2 = decoder.decodeSerializableElement( - descriptor, index + 1, PackageV2.serializer() + descriptor = descriptor, + index = index + 1, + deserializer = PackageV2.serializer(), ) indexStreamReceiver.receive(packageName, packageV2) } diff --git a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v1/IndexV1StreamProcessorTest.kt b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v1/IndexV1StreamProcessorTest.kt index f3fc18f3c..c49d66212 100644 --- a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v1/IndexV1StreamProcessorTest.kt +++ b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v1/IndexV1StreamProcessorTest.kt @@ -1,7 +1,7 @@ package org.fdroid.index.v1 import kotlinx.serialization.SerializationException -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.index.v2.AntiFeatureV2 import org.fdroid.index.v2.CategoryV2 import org.fdroid.index.v2.IndexV2 @@ -29,34 +29,43 @@ internal class IndexV1StreamProcessorTest { @Test fun testEmpty() { - testStreamProcessing("$assetPath/index-empty-v1.json", TestDataEmptyV2.index.v1compat()) + testStreamProcessing("$ASSET_PATH/index-empty-v1.json", TestDataEmptyV2.index.v1compat()) } @Test(expected = OldIndexException::class) fun testEmptyEqualTimestamp() { - testStreamProcessing("$assetPath/index-empty-v1.json", - TestDataEmptyV2.index.v1compat(), TestDataEmptyV2.index.repo.timestamp) + testStreamProcessing( + "$ASSET_PATH/index-empty-v1.json", + TestDataEmptyV2.index.v1compat(), + TestDataEmptyV2.index.repo.timestamp, + ) } @Test(expected = OldIndexException::class) fun testEmptyHigherTimestamp() { - testStreamProcessing("$assetPath/index-empty-v1.json", - TestDataEmptyV2.index.v1compat(), TestDataEmptyV2.index.repo.timestamp + 1) + testStreamProcessing( + "$ASSET_PATH/index-empty-v1.json", + TestDataEmptyV2.index.v1compat(), + TestDataEmptyV2.index.repo.timestamp + 1, + ) } @Test fun testMin() { - testStreamProcessing("$assetPath/index-min-v1.json", TestDataMinV2.index.v1compat()) + testStreamProcessing( + "$ASSET_PATH/index-min-v1.json", + TestDataMinV2.index.v1compat(), + ) } @Test fun testMid() { - testStreamProcessing("$assetPath/index-mid-v1.json", TestDataMidV2.indexCompat) + testStreamProcessing("$ASSET_PATH/index-mid-v1.json", TestDataMidV2.indexCompat) } @Test fun testMax() { - testStreamProcessing("$assetPath/index-max-v1.json", TestDataMaxV2.indexCompat) + testStreamProcessing("$ASSET_PATH/index-max-v1.json", TestDataMaxV2.indexCompat) } @Test @@ -73,16 +82,20 @@ internal class IndexV1StreamProcessorTest { // empty repo dict assertFailsWith { - testStreamError("""{ + testStreamError( + """{ "repo": {} - }""".trimIndent()) + }""".trimIndent() + ) }.also { assertContains(it.message!!, "timestamp") } // timestamp not a number assertFailsWith { - testStreamError("""{ + testStreamError( + """{ "repo": { "timestamp": "string" } - }""".trimIndent()) + }""".trimIndent() + ) }.also { assertContains(it.message!!, "numeric literal") } // remember valid repo for further tests @@ -99,21 +112,25 @@ internal class IndexV1StreamProcessorTest { // apps is dict assertFailsWith { - testStreamError("""{ + testStreamError( + """{ $validRepo, "requests": {"install": [], "uninstall": []}, "apps": {} - }""".trimIndent()) + }""".trimIndent() + ) }.also { assertContains(it.message!!, "apps") } // packages is list assertFailsWith { - testStreamError("""{ + testStreamError( + """{ $validRepo, "requests": {"install": [], "uninstall": []}, "apps": [], "packages": [] - }""".trimIndent()) + }""".trimIndent() + ) }.also { assertContains(it.message!!, "packages") } } diff --git a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessorTest.kt b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessorTest.kt index 2a76c135f..dfad218ac 100644 --- a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessorTest.kt +++ b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/IndexV2FullStreamProcessorTest.kt @@ -2,7 +2,7 @@ package org.fdroid.index.v2 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.SerializationException -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.test.TestDataEmptyV2 import org.fdroid.test.TestDataMaxV2 import org.fdroid.test.TestDataMidV2 @@ -27,27 +27,27 @@ internal class IndexV2FullStreamProcessorTest { @Test fun testEmpty() { - testStreamProcessing("$assetPath/index-empty-v2.json", TestDataEmptyV2.index, 0) + testStreamProcessing("$ASSET_PATH/index-empty-v2.json", TestDataEmptyV2.index, 0) } @Test fun testMin() { - testStreamProcessing("$assetPath/index-min-v2.json", TestDataMinV2.index, 1) + testStreamProcessing("$ASSET_PATH/index-min-v2.json", TestDataMinV2.index, 1) } @Test fun testMinReordered() { - testStreamProcessing("$assetPath/index-min-reordered-v2.json", TestDataMinV2.index, 1) + testStreamProcessing("$ASSET_PATH/index-min-reordered-v2.json", TestDataMinV2.index, 1) } @Test fun testMid() { - testStreamProcessing("$assetPath/index-mid-v2.json", TestDataMidV2.index, 2) + testStreamProcessing("$ASSET_PATH/index-mid-v2.json", TestDataMidV2.index, 2) } @Test fun testMax() { - testStreamProcessing("$assetPath/index-max-v2.json", TestDataMaxV2.index, 3) + testStreamProcessing("$ASSET_PATH/index-max-v2.json", TestDataMaxV2.index, 3) } @Test diff --git a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/ReflectionDifferTest.kt b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/ReflectionDifferTest.kt index 2e9b7460c..1dac1bf14 100644 --- a/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/ReflectionDifferTest.kt +++ b/libs/index/src/androidUnitTest/kotlin/org/fdroid/index/v2/ReflectionDifferTest.kt @@ -8,7 +8,7 @@ import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.jsonObject import org.fdroid.index.IndexParser import org.fdroid.index.IndexParser.json -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.index.parseV2 import org.fdroid.test.DiffUtils.clean import org.fdroid.test.DiffUtils.cleanMetadata @@ -27,44 +27,44 @@ internal class ReflectionDifferTest { @Test fun testEmptyToMin() = testDiff( - diffPath = "$assetPath/diff-empty-min/23.json", - startPath = "$assetPath/index-empty-v2.json", - endPath = "$assetPath/index-min-v2.json", + diffPath = "$ASSET_PATH/diff-empty-min/23.json", + startPath = "$ASSET_PATH/index-empty-v2.json", + endPath = "$ASSET_PATH/index-min-v2.json", ) @Test fun testEmptyToMid() = testDiff( - diffPath = "$assetPath/diff-empty-mid/23.json", - startPath = "$assetPath/index-empty-v2.json", - endPath = "$assetPath/index-mid-v2.json", + diffPath = "$ASSET_PATH/diff-empty-mid/23.json", + startPath = "$ASSET_PATH/index-empty-v2.json", + endPath = "$ASSET_PATH/index-mid-v2.json", ) @Test fun testEmptyToMax() = testDiff( - diffPath = "$assetPath/diff-empty-max/23.json", - startPath = "$assetPath/index-empty-v2.json", - endPath = "$assetPath/index-max-v2.json", + diffPath = "$ASSET_PATH/diff-empty-max/23.json", + startPath = "$ASSET_PATH/index-empty-v2.json", + endPath = "$ASSET_PATH/index-max-v2.json", ) @Test fun testMinToMid() = testDiff( - diffPath = "$assetPath/diff-empty-mid/42.json", - startPath = "$assetPath/index-min-v2.json", - endPath = "$assetPath/index-mid-v2.json", + diffPath = "$ASSET_PATH/diff-empty-mid/42.json", + startPath = "$ASSET_PATH/index-min-v2.json", + endPath = "$ASSET_PATH/index-mid-v2.json", ) @Test fun testMinToMax() = testDiff( - diffPath = "$assetPath/diff-empty-max/42.json", - startPath = "$assetPath/index-min-v2.json", - endPath = "$assetPath/index-max-v2.json", + diffPath = "$ASSET_PATH/diff-empty-max/42.json", + startPath = "$ASSET_PATH/index-min-v2.json", + endPath = "$ASSET_PATH/index-max-v2.json", ) @Test fun testMidToMax() = testDiff( - diffPath = "$assetPath/diff-empty-max/1337.json", - startPath = "$assetPath/index-mid-v2.json", - endPath = "$assetPath/index-max-v2.json", + diffPath = "$ASSET_PATH/diff-empty-max/1337.json", + startPath = "$ASSET_PATH/index-mid-v2.json", + endPath = "$ASSET_PATH/index-max-v2.json", ) @Test diff --git a/libs/index/src/commonMain/kotlin/org/fdroid/index/IndexParser.kt b/libs/index/src/commonMain/kotlin/org/fdroid/index/IndexParser.kt index b17e43ab3..a330905dc 100644 --- a/libs/index/src/commonMain/kotlin/org/fdroid/index/IndexParser.kt +++ b/libs/index/src/commonMain/kotlin/org/fdroid/index/IndexParser.kt @@ -9,7 +9,7 @@ import org.fdroid.index.v2.IndexV2 public object IndexParser { @Volatile - private var JSON: Json? = null + private var jsonInstance: Json? = null /** * Initializing [Json] is expensive, so using this method is preferable as it keeps returning @@ -18,7 +18,7 @@ public object IndexParser { public val json: Json @JvmStatic get() { - return JSON ?: synchronized(this) { + return jsonInstance ?: synchronized(this) { Json { ignoreUnknownKeys = true } diff --git a/libs/index/src/commonTest/kotlin/org/fdroid/index/IndexConverterTest.kt b/libs/index/src/commonTest/kotlin/org/fdroid/index/IndexConverterTest.kt index 6a5133d6a..306f6081a 100644 --- a/libs/index/src/commonTest/kotlin/org/fdroid/index/IndexConverterTest.kt +++ b/libs/index/src/commonTest/kotlin/org/fdroid/index/IndexConverterTest.kt @@ -12,28 +12,28 @@ import org.fdroid.test.v1compat import kotlin.test.Test import kotlin.test.assertEquals -internal const val assetPath = "../sharedTest/src/main/assets" +internal const val ASSET_PATH = "../sharedTest/src/main/assets" internal class IndexConverterTest { @Test fun testEmpty() { - testConversation("$assetPath/index-empty-v1.json", TestDataEmptyV2.index.v1compat()) + testConversation("$ASSET_PATH/index-empty-v1.json", TestDataEmptyV2.index.v1compat()) } @Test fun testMin() { - testConversation("$assetPath/index-min-v1.json", TestDataMinV2.index.v1compat()) + testConversation("$ASSET_PATH/index-min-v1.json", TestDataMinV2.index.v1compat()) } @Test fun testMid() { - testConversation("$assetPath/index-mid-v1.json", TestDataMidV2.indexCompat) + testConversation("$ASSET_PATH/index-mid-v1.json", TestDataMidV2.indexCompat) } @Test fun testMax() { - testConversation("$assetPath/index-max-v1.json", TestDataMaxV2.indexCompat) + testConversation("$ASSET_PATH/index-max-v1.json", TestDataMaxV2.indexCompat) } private fun testConversation(file: String, expectedIndex: IndexV2) { diff --git a/libs/index/src/commonTest/kotlin/org/fdroid/index/v1/IndexV1Test.kt b/libs/index/src/commonTest/kotlin/org/fdroid/index/v1/IndexV1Test.kt index e13647038..ac40596f1 100644 --- a/libs/index/src/commonTest/kotlin/org/fdroid/index/v1/IndexV1Test.kt +++ b/libs/index/src/commonTest/kotlin/org/fdroid/index/v1/IndexV1Test.kt @@ -3,7 +3,7 @@ package org.fdroid.index.v1 import com.goncalossilva.resources.Resource import kotlinx.serialization.SerializationException import org.fdroid.index.IndexParser.parseV1 -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.test.TestDataEmptyV1 import org.fdroid.test.TestDataMaxV1 import org.fdroid.test.TestDataMidV1 @@ -17,7 +17,7 @@ internal class IndexV1Test { @Test fun testIndexEmptyV1() { - val indexRes = Resource("$assetPath/index-empty-v1.json") + val indexRes = Resource("$ASSET_PATH/index-empty-v1.json") val indexStr = indexRes.readText() val index = parseV1(indexStr) assertEquals(TestDataEmptyV1.index, index) @@ -25,7 +25,7 @@ internal class IndexV1Test { @Test fun testIndexMinV1() { - val indexRes = Resource("$assetPath/index-min-v1.json") + val indexRes = Resource("$ASSET_PATH/index-min-v1.json") val indexStr = indexRes.readText() val index = parseV1(indexStr) assertEquals(TestDataMinV1.index, index) @@ -33,7 +33,7 @@ internal class IndexV1Test { @Test fun testIndexMidV1() { - val indexRes = Resource("$assetPath/index-mid-v1.json") + val indexRes = Resource("$ASSET_PATH/index-mid-v1.json") val indexStr = indexRes.readText() val index = parseV1(indexStr) assertEquals(TestDataMidV1.index, index) @@ -41,7 +41,7 @@ internal class IndexV1Test { @Test fun testIndexMaxV1() { - val indexRes = Resource("$assetPath/index-max-v1.json") + val indexRes = Resource("$ASSET_PATH/index-max-v1.json") val indexStr = indexRes.readText() val index = parseV1(indexStr) assertEquals(TestDataMaxV1.index, index) @@ -108,14 +108,14 @@ internal class IndexV1Test { @Test fun testGuardianProjectV1() { - val indexRes = Resource("$assetPath/guardianproject_index-v1.json") + val indexRes = Resource("$ASSET_PATH/guardianproject_index-v1.json") val indexStr = indexRes.readText() parseV1(indexStr) } @Test fun testLocalizedV1() { - val indexRes = Resource("$assetPath/localized.json") + val indexRes = Resource("$ASSET_PATH/localized.json") val indexStr = indexRes.readText() parseV1(indexStr) } diff --git a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/EntryTest.kt b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/EntryTest.kt index a3d88dacc..a6d97f4ec 100644 --- a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/EntryTest.kt +++ b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/EntryTest.kt @@ -3,7 +3,7 @@ package org.fdroid.index.v2 import com.goncalossilva.resources.Resource import kotlinx.serialization.SerializationException import org.fdroid.index.IndexParser -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.test.TestDataEntry import org.junit.Test import kotlin.test.assertContains @@ -14,22 +14,22 @@ internal class EntryTest { @Test fun testEmpty() { - testEntryEquality("$assetPath/entry-empty-v2.json", TestDataEntry.empty) + testEntryEquality("$ASSET_PATH/entry-empty-v2.json", TestDataEntry.empty) } @Test fun testEmptyToMin() { - testEntryEquality("$assetPath/diff-empty-min/$DATA_FILE_NAME", TestDataEntry.emptyToMin) + testEntryEquality("$ASSET_PATH/diff-empty-min/$DATA_FILE_NAME", TestDataEntry.emptyToMin) } @Test fun testEmptyToMid() { - testEntryEquality("$assetPath/diff-empty-mid/$DATA_FILE_NAME", TestDataEntry.emptyToMid) + testEntryEquality("$ASSET_PATH/diff-empty-mid/$DATA_FILE_NAME", TestDataEntry.emptyToMid) } @Test fun testEmptyToMax() { - testEntryEquality("$assetPath/diff-empty-max/$DATA_FILE_NAME", TestDataEntry.emptyToMax) + testEntryEquality("$ASSET_PATH/diff-empty-max/$DATA_FILE_NAME", TestDataEntry.emptyToMax) } @Test diff --git a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessorTest.kt b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessorTest.kt index 1f146e417..ed39e06d8 100644 --- a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessorTest.kt +++ b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2DiffStreamProcessorTest.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.jsonObject import org.fdroid.index.IndexParser -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.junit.Test import java.io.ByteArrayInputStream import java.io.File @@ -17,22 +17,22 @@ import kotlin.test.fail internal class IndexV2DiffStreamProcessorTest { @Test - fun testEmptyToMin() = testDiff("$assetPath/diff-empty-min/23.json", 1) + fun testEmptyToMin() = testDiff("$ASSET_PATH/diff-empty-min/23.json", 1) @Test - fun testEmptyToMid() = testDiff("$assetPath/diff-empty-mid/23.json", 2) + fun testEmptyToMid() = testDiff("$ASSET_PATH/diff-empty-mid/23.json", 2) @Test - fun testEmptyToMax() = testDiff("$assetPath/diff-empty-max/23.json", 3) + fun testEmptyToMax() = testDiff("$ASSET_PATH/diff-empty-max/23.json", 3) @Test - fun testMinToMid() = testDiff("$assetPath/diff-empty-mid/42.json", 2) + fun testMinToMid() = testDiff("$ASSET_PATH/diff-empty-mid/42.json", 2) @Test - fun testMinToMax() = testDiff("$assetPath/diff-empty-max/42.json", 3) + fun testMinToMax() = testDiff("$ASSET_PATH/diff-empty-max/42.json", 3) @Test - fun testMidToMax() = testDiff("$assetPath/diff-empty-max/1337.json", 2) + fun testMidToMax() = testDiff("$ASSET_PATH/diff-empty-max/1337.json", 2) @Test fun testRemovePackage() { diff --git a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2Test.kt b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2Test.kt index 06bfd7601..fcdf8d8bd 100644 --- a/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2Test.kt +++ b/libs/index/src/commonTest/kotlin/org/fdroid/index/v2/IndexV2Test.kt @@ -3,7 +3,7 @@ package org.fdroid.index.v2 import com.goncalossilva.resources.Resource import kotlinx.serialization.SerializationException import org.fdroid.index.IndexParser.parseV2 -import org.fdroid.index.assetPath +import org.fdroid.index.ASSET_PATH import org.fdroid.test.TestDataEmptyV2 import org.fdroid.test.TestDataMaxV2 import org.fdroid.test.TestDataMidV2 @@ -17,27 +17,27 @@ internal class IndexV2Test { @Test fun testEmpty() { - testIndexEquality("$assetPath/index-empty-v2.json", TestDataEmptyV2.index) + testIndexEquality("$ASSET_PATH/index-empty-v2.json", TestDataEmptyV2.index) } @Test fun testMin() { - testIndexEquality("$assetPath/index-min-v2.json", TestDataMinV2.index) + testIndexEquality("$ASSET_PATH/index-min-v2.json", TestDataMinV2.index) } @Test fun testMinReordered() { - testIndexEquality("$assetPath/index-min-reordered-v2.json", TestDataMinV2.index) + testIndexEquality("$ASSET_PATH/index-min-reordered-v2.json", TestDataMinV2.index) } @Test fun testMid() { - testIndexEquality("$assetPath/index-mid-v2.json", TestDataMidV2.index) + testIndexEquality("$ASSET_PATH/index-mid-v2.json", TestDataMidV2.index) } @Test fun testMax() { - testIndexEquality("$assetPath/index-max-v2.json", TestDataMaxV2.index) + testIndexEquality("$ASSET_PATH/index-max-v2.json", TestDataMaxV2.index) } @Test diff --git a/libs/sharedTest/src/main/kotlin/org/fdroid/test/DiffUtils.kt b/libs/sharedTest/src/main/kotlin/org/fdroid/test/DiffUtils.kt index 8fa84a34f..6777b25ac 100644 --- a/libs/sharedTest/src/main/kotlin/org/fdroid/test/DiffUtils.kt +++ b/libs/sharedTest/src/main/kotlin/org/fdroid/test/DiffUtils.kt @@ -42,8 +42,9 @@ object DiffUtils { * Removes keys from a JSON object representing a [MetadataV2] which need special handling. */ fun JsonObject.cleanMetadata(): JsonObject { - val keysToFilter = listOf("icon", "featureGraphic", "promoGraphic", "tvBanner", - "screenshots") + val keysToFilter = listOf( + "icon", "featureGraphic", "promoGraphic", "tvBanner", "screenshots", + ) val newMap = filterKeys { it !in keysToFilter } return JsonObject(newMap) } diff --git a/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV1.kt b/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV1.kt index fed7a30bd..2e2f4d8ce 100644 --- a/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV1.kt +++ b/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV1.kt @@ -33,9 +33,9 @@ object TestDataMinV1 { description = "This is a repo with minimal data.", ) - const val packageName = "org.fdroid.min1" + const val PACKAGE_NAME = "org.fdroid.min1" val app = AppV1( - packageName = packageName, + packageName = PACKAGE_NAME, categories = emptyList(), antiFeatures = emptyList(), license = "", @@ -43,15 +43,15 @@ object TestDataMinV1 { val apps = listOf(app) val version = PackageV1( - packageName = packageName, - apkName = "${packageName}_23.apk", + packageName = PACKAGE_NAME, + apkName = "${PACKAGE_NAME}_23.apk", hash = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", hashType = "sha256", size = 1337, versionName = "0", ) val versions = listOf(version) - val packages = mapOf(packageName to versions) + val packages = mapOf(PACKAGE_NAME to versions) val index = IndexV1( repo = repo, @@ -74,11 +74,11 @@ object TestDataMidV1 { mirrors = listOf("https://mid-v1.com"), ) - const val packageName1 = TestDataMinV1.packageName - const val packageName2 = "org.fdroid.fdroid" + const val PACKAGE_NAME_1 = TestDataMinV1.PACKAGE_NAME + const val PACKAGE_NAME_2 = "org.fdroid.fdroid" val categories = listOf("Cat1", "Cat2", "Cat3") val app1 = TestDataMinV1.app.copy( - packageName = packageName1, + packageName = PACKAGE_NAME_1, categories = listOf(categories[0]), antiFeatures = listOf("AntiFeature"), summary = "App1 summary", @@ -192,9 +192,9 @@ object TestDataMidV1 { val version1_1 = TestDataMinV1.version.copy( added = 2342, - apkName = "${packageName1}_23_2.apk", + apkName = "${PACKAGE_NAME_1}_23_2.apk", size = 1338, - srcName = "${packageName1}_23_2.zip", + srcName = "${PACKAGE_NAME_1}_23_2.zip", usesPermission = listOf(PermissionV1("perm")), usesPermission23 = emptyList(), versionCode = 1, @@ -204,8 +204,8 @@ object TestDataMidV1 { antiFeatures = listOf("anti-feature"), ) val version1_2 = PackageV1( - packageName = packageName1, - apkName = "${packageName1}_42.apk", + packageName = PACKAGE_NAME_1, + apkName = "${PACKAGE_NAME_1}_42.apk", hash = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", hashType = "sha256", minSdkVersion = 21, @@ -215,7 +215,7 @@ object TestDataMidV1 { signer = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", features = listOf("new feature"), size = 1337, - srcName = "${packageName1}_42.zip", + srcName = "${PACKAGE_NAME_1}_42.zip", versionCode = 24, versionName = "24", ) @@ -396,8 +396,8 @@ object TestDataMidV1 { val versions1 = listOf(version1_1, version1_2) val versions2 = listOf(version2_1, version2_2, version2_3, version2_4, version2_5) val packages = mapOf( - packageName1 to versions1, - packageName2 to versions2, + PACKAGE_NAME_1 to versions1, + PACKAGE_NAME_2 to versions2, ) val index = IndexV1( @@ -422,9 +422,9 @@ object TestDataMaxV1 { mirrors = listOf("https://max-v1.com", "https://max-v1.org"), ) - const val packageName1 = TestDataMidV1.packageName1 - const val packageName2 = TestDataMidV1.packageName2 - const val packageName3 = "Haoheiseeshai2que2Che0ooSa6aikeemoo2ap9Aequoh4ju5chooYuPhiev8moo" + + const val PACKAGE_NAME_1 = TestDataMidV1.PACKAGE_NAME_1 + const val PACKAGE_NAME_2 = TestDataMidV1.PACKAGE_NAME_2 + const val PACKAGE_NAME_3 = "Haoheiseeshai2que2Che0ooSa6aikeemoo2ap9Aequoh4ju5chooYuPhiev8moo" + "dahlonu2oht5Eikahvushapeum5aefo6xig4aghahyaaNuezoo4eexee1Goo5Ung" + "ohGha6quaeghe8uCh9iex9Oowa9aiyohzoo2ij5miifiegaeth8nie9jae6raeph" + "oowishoor1Ien5vahGhahm7eidaiy2AeCaej9iexahyooshu2ic9tea1ool8tu4Y" @@ -468,7 +468,7 @@ object TestDataMaxV1 { ), ) val app3 = AppV1( - packageName = packageName3, + packageName = PACKAGE_NAME_3, categories = categories, antiFeatures = listOf("AntiFeature", "NonFreeNet", "NotNice", "VeryBad", "Dont,Show,This"), summary = "App3 summary", @@ -510,8 +510,10 @@ object TestDataMaxV1 { icon = "en ", video = "en ", phoneScreenshots = listOf("en phoneScreenshots", "en phoneScreenshots2"), - sevenInchScreenshots = listOf("en sevenInchScreenshots", - "en sevenInchScreenshots2"), + sevenInchScreenshots = listOf( + "en sevenInchScreenshots", + "en sevenInchScreenshots2", + ), tenInchScreenshots = listOf("en tenInchScreenshots", "en tenInchScreenshots2"), wearScreenshots = listOf("en wearScreenshots", "en wearScreenshots2"), tvScreenshots = listOf("en tvScreenshots", "en tvScreenshots2"), @@ -605,9 +607,9 @@ object TestDataMaxV1 { ) val versions3 = listOf(version3_1) val packages = mapOf( - packageName1 to versions1, - packageName2 to versions2, - packageName3 to versions3, + PACKAGE_NAME_1 to versions1, + PACKAGE_NAME_2 to versions2, + PACKAGE_NAME_3 to versions3, ) val index = IndexV1( diff --git a/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV2.kt b/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV2.kt index 01dea242a..2d4fc07f2 100644 --- a/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV2.kt +++ b/libs/sharedTest/src/main/kotlin/org/fdroid/test/TestDataV2.kt @@ -127,11 +127,11 @@ object TestDataMinV2 { description = mapOf(LOCALE to "This is a repo with minimal data."), ) - const val packageName = "org.fdroid.min1" + const val PACKAGE_NAME = "org.fdroid.min1" val version = PackageVersionV2( added = 0, file = FileV1( - name = "/${packageName}_23.apk", + name = "/${PACKAGE_NAME}_23.apk", sha256 = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", size = 1337, ), @@ -150,7 +150,7 @@ object TestDataMinV2 { version.file.sha256 to version, ), ) - val packages = mapOf(packageName to app) + val packages = mapOf(PACKAGE_NAME to app) val index = IndexV2( repo = repo, @@ -206,17 +206,17 @@ object TestDataMidV2 { ) val repoCompat = repo.v1compat() - const val packageName1 = TestDataMinV1.packageName - const val packageName2 = "org.fdroid.fdroid" + const val PACKAGE_NAME_1 = TestDataMinV1.PACKAGE_NAME + const val PACKAGE_NAME_2 = "org.fdroid.fdroid" val version1_1 = PackageVersionV2( added = 2342, file = FileV1( - name = "/${packageName1}_23_2.apk", + name = "/${PACKAGE_NAME_1}_23_2.apk", sha256 = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", size = 1338, ), src = FileV2( - name = "/${packageName1}_23_2.zip", + name = "/${PACKAGE_NAME_1}_23_2.zip", sha256 = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", size = 1338, ), @@ -233,7 +233,7 @@ object TestDataMidV2 { val version1_2 = PackageVersionV2( added = 0, file = FileV1( - name = "/${packageName1}_42.apk", + name = "/${PACKAGE_NAME_1}_42.apk", sha256 = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", size = 1337, ), @@ -253,7 +253,7 @@ object TestDataMidV2 { ), ), src = FileV2( - name = "/${packageName1}_42.zip", + name = "/${PACKAGE_NAME_1}_42.zip", sha256 = "824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf", size = 1338, ), @@ -687,7 +687,7 @@ object TestDataMidV2 { version2_5.file.sha256 to version2_5Compat, ), ) - val packages = mapOf(packageName1 to app1, packageName2 to app2) + val packages = mapOf(PACKAGE_NAME_1 to app1, PACKAGE_NAME_2 to app2) val index = IndexV2( repo = repo, @@ -696,8 +696,8 @@ object TestDataMidV2 { val indexCompat = index.copy( repo = repoCompat, packages = mapOf( - packageName1 to app1Compat, - packageName2 to app2Compat, + PACKAGE_NAME_1 to app1Compat, + PACKAGE_NAME_2 to app2Compat, ), ) } @@ -813,9 +813,9 @@ object TestDataMaxV2 { ), ) - const val packageName1 = TestDataMidV2.packageName1 - const val packageName2 = TestDataMidV2.packageName2 - const val packageName3 = "Haoheiseeshai2que2Che0ooSa6aikeemoo2ap9Aequoh4ju5chooYuPhiev8moo" + + const val PACKAGE_NAME_1 = TestDataMidV2.PACKAGE_NAME_1 + const val PACKAGE_NAME_2 = TestDataMidV2.PACKAGE_NAME_2 + const val PACKAGE_NAME_3 = "Haoheiseeshai2que2Che0ooSa6aikeemoo2ap9Aequoh4ju5chooYuPhiev8moo" + "dahlonu2oht5Eikahvushapeum5aefo6xig4aghahyaaNuezoo4eexee1Goo5Ung" + "ohGha6quaeghe8uCh9iex9Oowa9aiyohzoo2ij5miifiegaeth8nie9jae6raeph" + "oowishoor1Ien5vahGhahm7eidaiy2AeCaej9iexahyooshu2ic9tea1ool8tu4Y" @@ -1262,16 +1262,16 @@ object TestDataMaxV2 { val index = IndexV2( repo = repo, packages = mapOf( - TestDataMidV2.packageName1 to TestDataMidV2.app1, - TestDataMidV2.packageName2 to app2, - packageName3 to app3, + TestDataMidV2.PACKAGE_NAME_1 to TestDataMidV2.app1, + TestDataMidV2.PACKAGE_NAME_2 to app2, + PACKAGE_NAME_3 to app3, ), ) val indexCompat = index.v1compat().copy( packages = mapOf( - TestDataMidV2.packageName1 to TestDataMidV2.app1Compat, - TestDataMidV2.packageName2 to app2Compat, - packageName3 to app3Compat, + TestDataMidV2.PACKAGE_NAME_1 to TestDataMidV2.app1Compat, + TestDataMidV2.PACKAGE_NAME_2 to app2Compat, + PACKAGE_NAME_3 to app3Compat, ), ) }