11package software.aws.toolkits.jetbrains.services.amazonq.lsp.util
22
33import com.intellij.openapi.vfs.VirtualFile
4+ import com.intellij.openapi.vfs.VirtualFileManager
45import com.intellij.testFramework.LightVirtualFile
56import com.intellij.testFramework.fixtures.BasePlatformTestCase
7+ import io.mockk.every
8+ import io.mockk.mockk
69import org.junit.Test
710
811class FileUriUtilTest : BasePlatformTestCase () {
@@ -17,6 +20,13 @@ class FileUriUtilTest : BasePlatformTestCase() {
1720 assertEquals(" file:///path/to/file.txt" , uri)
1821 }
1922
23+ @Test
24+ fun `test unix directory path` () {
25+ val virtualFile = createMockVirtualFile(" /path/to/directory/" )
26+ val uri = FileUriUtil .toUriString(virtualFile)
27+ assertEquals(" file:///path/to/directory" , uri)
28+ }
29+
2030 @Test
2131 fun `test path with spaces` () {
2232 val virtualFile = createMockVirtualFile(" /path/with spaces/file.txt" )
@@ -31,6 +41,13 @@ class FileUriUtilTest : BasePlatformTestCase() {
3141 assertEquals(" file:///C:/path/to/file.txt" , uri)
3242 }
3343
44+ @Test
45+ fun `test windows directory path` () {
46+ val virtualFile = createMockVirtualFile(" C:\\ path\\ to\\ directory\\ " )
47+ val uri = FileUriUtil .toUriString(virtualFile)
48+ assertEquals(" file:///C:/path/to/directory" , uri)
49+ }
50+
3451 @Test
3552 fun `test root path` () {
3653 val virtualFile = createMockVirtualFile(" /" )
@@ -50,15 +67,104 @@ class FileUriUtilTest : BasePlatformTestCase() {
5067 val longPath = " /a" .repeat(256 ) + " /file.txt"
5168 val virtualFile = createMockVirtualFile(longPath)
5269 val uri = FileUriUtil .toUriString(virtualFile)
53- assertTrue(uri.startsWith(" file:///" ))
54- assertTrue(uri.endsWith(" /file.txt" ))
70+ if (uri != null ) {
71+ assertTrue(uri.startsWith(" file:///" ))
72+ assertTrue(uri.endsWith(" /file.txt" ))
73+ }
5574 }
5675
5776 @Test
5877 fun `test relative path` () {
5978 val virtualFile = createMockVirtualFile(" ./relative/path/file.txt" )
6079 val uri = FileUriUtil .toUriString(virtualFile)
61- assertTrue(uri.contains(" file.txt" ))
62- assertTrue(uri.startsWith(" file:///" ))
80+ if (uri != null ) {
81+ assertTrue(uri.contains(" file.txt" ))
82+ assertTrue(uri.startsWith(" file:///" ))
83+ }
84+ }
85+
86+ @Test
87+ fun `test jar protocol conversion` () {
88+
89+ val virtualFile = mockk<VirtualFile > {
90+ every { fileSystem } returns mockk {
91+ every { protocol } returns " jar"
92+ }
93+ every { url } returns " jar:file:///path/to/archive.jar!/com/example/Test.class"
94+ every { isDirectory } returns false
95+ }
96+
97+ val result = FileUriUtil .toUriString(virtualFile)
98+ assertEquals(" jar:file:///path/to/archive.jar!/com/example/Test.class" , result)
99+ }
100+
101+ @Test
102+ fun `test jrt protocol conversion` () {
103+ val virtualFile = mockk<VirtualFile > {
104+ every { fileSystem } returns mockk {
105+ every { protocol } returns " jrt"
106+ }
107+ every { url } returns " jrt://java.base/java/lang/String.class"
108+ every { isDirectory } returns false
109+ }
110+
111+ val result = FileUriUtil .toUriString(virtualFile)
112+ assertEquals(" jrt://java.base/java/lang/String.class" , result)
113+ }
114+
115+ @Test
116+ fun `test invalid jar url returns null` () {
117+ val virtualFile = mockk<VirtualFile > {
118+ every { fileSystem } returns mockk {
119+ every { protocol } returns " jar"
120+ }
121+ every { url } returns " invalid:url:format"
122+ every { isDirectory } returns false
123+ }
124+
125+ val result = FileUriUtil .toUriString(virtualFile)
126+ assertNull(result)
127+ }
128+
129+ @Test
130+ fun `test jar protocol with directory` () {
131+ val virtualFile = mockk<VirtualFile > {
132+ every { fileSystem } returns mockk {
133+ every { protocol } returns " jar"
134+ }
135+ every { url } returns " jar:file:///path/to/archive.jar!/com/example/"
136+ every { isDirectory } returns true
137+ }
138+
139+ val result = FileUriUtil .toUriString(virtualFile)
140+ assertEquals(" jar:file:///path/to/archive.jar!/com/example" , result)
141+ }
142+
143+ @Test
144+ fun `test null url in jar protocol` () {
145+ val virtualFile = mockk<VirtualFile > {
146+ every { fileSystem } returns mockk {
147+ every { protocol } returns " jar"
148+ }
149+ every { url } returns " "
150+ every { isDirectory } returns false
151+ }
152+
153+ val result = FileUriUtil .toUriString(virtualFile)
154+ assertNull(result)
155+ }
156+
157+ @Test
158+ fun `test empty url in jar protocol` () {
159+ val virtualFile = mockk<VirtualFile > {
160+ every { fileSystem } returns mockk {
161+ every { protocol } returns " jar"
162+ }
163+ every { url } returns " "
164+ every { isDirectory } returns false
165+ }
166+
167+ val result = FileUriUtil .toUriString(virtualFile)
168+ assertNull(result)
63169 }
64170}
0 commit comments