Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(amazonq): add virtualFile -> URI util #5381

Open
wants to merge 19 commits into
base: feature/q-lsp
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.amazonq.lsp.util

import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VfsUtilCore
import java.net.URI

Check warning on line 9 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileUriUtil.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import java.net.URLEncoder

Check warning on line 10 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileUriUtil.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import java.nio.charset.StandardCharsets

Check warning on line 11 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileUriUtil.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive

object FileUriUtil {

fun toUriString(virtualFile: VirtualFile): String {
val file = VfsUtilCore.virtualToIoFile(virtualFile)
return VfsUtil.toUri(file).toString()

}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp.util

import com.intellij.openapi.vfs.JarFileSystem
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry
import com.intellij.rt.coverage.util.ErrorReporter.setPath
import com.intellij.testFramework.LightVirtualFile
import com.intellij.testFramework.fixtures.BasePlatformTestCase
import io.mockk.every
import io.mockk.mockk
import java.io.File
import org.junit.Test
import kotlin.test.assertEquals

class FileUriUtilTest : BasePlatformTestCase() {

private fun createMockVirtualFile(path: String): VirtualFile =
LightVirtualFile(path)


@Test
fun `test basic unix path`() {
val virtualFile = createMockVirtualFile("/path/to/file.txt")
val uri = FileUriUtil.toUriString(virtualFile)
assertEquals("file:///path/to/file.txt", uri)
}

@Test
fun `test path with spaces`() {
val virtualFile = createMockVirtualFile("/path/with spaces/file.txt")
val uri = FileUriUtil.toUriString(virtualFile)
assertEquals("file:///path/with%20spaces/file.txt", uri)
}

@Test
fun `test windows style path`() {
val virtualFile = createMockVirtualFile("C:\\path\\to\\file.txt")
val uri = FileUriUtil.toUriString(virtualFile)
assertEquals("file:///C:/path/to/file.txt", uri)
}

@Test
fun `test root path`() {
val virtualFile = createMockVirtualFile("/")
val uri = FileUriUtil.toUriString(virtualFile)
assertEquals("file:///", uri)
}

@Test
fun `test path with multiple separators`() {
val virtualFile = createMockVirtualFile("/path//to///file.txt")
val uri = FileUriUtil.toUriString(virtualFile)
assertEquals("file:///path/to/file.txt", uri)
}

@Test
fun `test very long path`() {
val longPath = "/a".repeat(256) + "/file.txt"
val virtualFile = createMockVirtualFile(longPath)
val uri = FileUriUtil.toUriString(virtualFile)
assertTrue(uri.startsWith("file:///"))
assertTrue(uri.endsWith("/file.txt"))
}

@Test
fun `test relative path`() {
val virtualFile = createMockVirtualFile("./relative/path/file.txt")
val uri = FileUriUtil.toUriString(virtualFile)
assertTrue(uri.contains("file.txt"))
assertTrue(uri.startsWith("file:///"))
}
}
Loading