From b0adee871656a210cb5829d71075b6eaab8cc3b3 Mon Sep 17 00:00:00 2001 From: bart Date: Wed, 8 Apr 2026 10:02:51 +0200 Subject: [PATCH] Added test to keep canonical root at the correct location --- .../java/com/winlator/core/WineUtilsTest.kt | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 app/src/test/java/com/winlator/core/WineUtilsTest.kt diff --git a/app/src/test/java/com/winlator/core/WineUtilsTest.kt b/app/src/test/java/com/winlator/core/WineUtilsTest.kt new file mode 100644 index 0000000000..06ce2a2f2b --- /dev/null +++ b/app/src/test/java/com/winlator/core/WineUtilsTest.kt @@ -0,0 +1,65 @@ +package com.winlator.core + +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import com.winlator.container.Container +import com.winlator.xenvironment.ImageFs +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.mockkStatic +import io.mockk.runs +import io.mockk.unmockkAll +import io.mockk.verify +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import java.io.File +import kotlin.io.path.createTempDirectory + +@RunWith(RobolectricTestRunner::class) +class WineUtilsTest { + private lateinit var context: Context + private lateinit var container: Container + private lateinit var rootDir: File + + @Before + fun setUp() { + context = ApplicationProvider.getApplicationContext() + container = mockk(relaxed = true) + rootDir = createTempDirectory(prefix = "wine-utils-test").toFile() + File(rootDir, ".wine/dosdevices").mkdirs() + } + + @After + fun tearDown() { + unmockkAll() + rootDir.deleteRecursively() + } + + @Test + fun createDosdevicesSymlinks_usesCanonicalImageFsRootForZDrive() { + val imageFs = mockk() + val nonCanonicalRoot = File(rootDir, "imagefs/../imagefs-real") + val canonicalRoot = nonCanonicalRoot.absoluteFile.canonicalPath + val expectedDosdevicesPath = File(rootDir, ".wine/dosdevices").path + + every { container.rootDir } returns rootDir + every { container.drives } returns "D:/downloads;E:/storage" + every { container.drivesIterator() } returns emptyList>() + + mockkStatic(ImageFs::class) + every { ImageFs.find(context) } returns imageFs + every { imageFs.rootDir } returns nonCanonicalRoot + + mockkStatic(FileUtils::class) + every { FileUtils.symlink(any(), any()) } just runs + + WineUtils.createDosdevicesSymlinks(context, container) + + verify { FileUtils.symlink("../drive_c", "$expectedDosdevicesPath/c:") } + verify { FileUtils.symlink(canonicalRoot, "$expectedDosdevicesPath/z:") } + } +}