package cc.unitmesh.devins.ui.compose.sketch import cc.unitmesh.devins.workspace.DefaultWorkspace import cc.unitmesh.devins.workspace.WorkspaceManager import kotlinx.coroutines.test.runTest import kotlin.test.AfterTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue class PathResolutionTest { @AfterTest fun cleanup() = runTest { WorkspaceManager.closeCurrentWorkspace() } @Test fun `should resolve relative path with workspace root`() = runTest { // Setup workspace val workspaceRoot = "/Users/test/project" WorkspaceManager.openWorkspace("Test Project", workspaceRoot) // Test relative path resolution val relativePath = "src/main/kotlin/Example.kt" val expectedAbsolute = "/Users/test/project/src/main/kotlin/Example.kt" // We can't directly call the private function, but we can verify the logic // by checking what the workspace provides assertTrue(WorkspaceManager.currentWorkspace?.rootPath == workspaceRoot) } @Test fun `should handle absolute paths without modification`() = runTest { val workspaceRoot = "/Users/test/project" WorkspaceManager.openWorkspace("Test Project", workspaceRoot) val absolutePath = "/absolute/path/to/file.kt" // Absolute paths should be returned as-is assertTrue(absolutePath.startsWith("/")) } @Test fun `should handle Windows absolute paths`() = runTest { val workspaceRoot = "C:/Users/test/project" WorkspaceManager.openWorkspace("Test Project", workspaceRoot) val windowsPath = "C:/some/other/path/file.kt" // Windows absolute paths should be returned as-is assertTrue(windowsPath.matches(Regex("^[A-Za-z]:.*"))) } @Test fun `should handle workspace root without trailing slash`() = runTest { val workspaceRoot = "/Users/test/project" WorkspaceManager.openWorkspace("Test Project", workspaceRoot) val relativePath = "src/Example.kt" // Should combine with separator val expected = "$workspaceRoot/$relativePath" assertEquals("/Users/test/project/src/Example.kt", expected) } @Test fun `should handle workspace root with trailing slash`() = runTest { val workspaceRoot = "/Users/test/project/" WorkspaceManager.openWorkspace("Test Project", workspaceRoot.trimEnd('/')) val relativePath = "src/Example.kt" // Should not add extra separator assertTrue(!workspaceRoot.contains("//")) } }