77 lines
2.5 KiB
Kotlin
77 lines
2.5 KiB
Kotlin
/*
|
|
* SPDX-FileCopyrightText: 2026 Aurora OSS
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
package com.aurora.apkdownloader
|
|
|
|
import com.google.common.truth.Truth.assertThat
|
|
import java.util.zip.ZipFile
|
|
import kotlin.io.path.createDirectories
|
|
import kotlin.io.path.exists
|
|
import kotlin.io.path.writeText
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.junit.rules.TemporaryFolder
|
|
|
|
class SplitApkArchiveWriterTest {
|
|
@get:Rule
|
|
val temporaryFolder = TemporaryFolder()
|
|
|
|
@Test
|
|
fun `writes apks archive for multiple apk files`() {
|
|
val appDir = temporaryFolder.newFolder().toPath()
|
|
val base = appDir.resolve("base.apk").also { it.writeText("base") }
|
|
val split = appDir.resolve("config.arm64_v8a.apk").also { it.writeText("split") }
|
|
|
|
val archive = SplitApkArchiveWriter().write(
|
|
packageName = "org.mozilla.firefox",
|
|
versionCode = 123,
|
|
appDir = appDir,
|
|
files = listOf(base, split)
|
|
)
|
|
|
|
assertThat(archive).isNotNull()
|
|
assertThat(archive!!.exists()).isTrue()
|
|
ZipFile(archive.toFile()).use { zip ->
|
|
assertThat(zip.getEntry("base.apk")).isNotNull()
|
|
assertThat(zip.getEntry("config.arm64_v8a.apk")).isNotNull()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `preserves shared library relative paths`() {
|
|
val appDir = temporaryFolder.newFolder().toPath()
|
|
val base = appDir.resolve("base.apk").also { it.writeText("base") }
|
|
val libDir = appDir.resolve("libraries/com.example.lib").also { it.createDirectories() }
|
|
val lib = libDir.resolve("base.apk").also { it.writeText("lib") }
|
|
|
|
val archive = SplitApkArchiveWriter().write(
|
|
packageName = "com.example.app",
|
|
versionCode = 123,
|
|
appDir = appDir,
|
|
files = listOf(base, lib)
|
|
)
|
|
|
|
ZipFile(archive!!.toFile()).use { zip ->
|
|
assertThat(zip.getEntry("base.apk")).isNotNull()
|
|
assertThat(zip.getEntry("libraries/com.example.lib/base.apk")).isNotNull()
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `does not write archive for a single apk file`() {
|
|
val appDir = temporaryFolder.newFolder().toPath()
|
|
val base = appDir.resolve("base.apk").also { it.writeText("base") }
|
|
|
|
val archive = SplitApkArchiveWriter().write(
|
|
packageName = "org.mozilla.firefox",
|
|
versionCode = 123,
|
|
appDir = appDir,
|
|
files = listOf(base)
|
|
)
|
|
|
|
assertThat(archive).isNull()
|
|
}
|
|
}
|