/* * 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() } }