3
3
4
4
package software.aws.toolkits.jetbrains.services.amazonq.lsp.util
5
5
6
+ import com.intellij.openapi.module.Module
7
+ import com.intellij.openapi.module.ModuleManager
6
8
import com.intellij.openapi.project.Project
7
- import com.intellij.openapi.roots.ProjectRootManager
9
+ import com.intellij.openapi.roots.ModuleRootManager
8
10
import com.intellij.openapi.vfs.VirtualFile
9
11
import io.mockk.every
10
12
import io.mockk.mockk
13
+ import io.mockk.mockkStatic
11
14
import org.assertj.core.api.Assertions.assertThat
12
15
import org.junit.jupiter.api.Test
13
16
import java.net.URI
14
- import java.nio.file.Path
15
17
16
18
class WorkspaceFolderUtilTest {
17
19
18
20
@Test
19
- fun `createWorkspaceFolders returns empty list when no workspace folders ` () {
21
+ fun `createWorkspaceFolders returns empty list when project is default ` () {
20
22
val mockProject = mockk<Project >()
21
23
every { mockProject.isDefault } returns true
22
24
23
25
val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
24
26
25
- assertThat(result).isEqualTo(emptyList< VirtualFile >() )
27
+ assertThat(result).isEmpty( )
26
28
}
27
29
28
30
@Test
29
- fun `createWorkspaceFolders returns workspace folders for non-default project` () {
31
+ fun `createWorkspaceFolders returns workspace folders for non-default project with modules ` () {
30
32
val mockProject = mockk<Project >()
31
- val mockProjectRootManager = mockk<ProjectRootManager >()
33
+ val mockModuleManager = mockk<ModuleManager >()
34
+ val mockModule1 = mockk<Module >()
35
+ val mockModule2 = mockk<Module >()
36
+ val mockModuleRootManager1 = mockk<ModuleRootManager >()
37
+ val mockModuleRootManager2 = mockk<ModuleRootManager >()
38
+
32
39
val mockContentRoot1 = createMockVirtualFile(
33
40
URI (" file:///path/to/root1" ),
34
41
name = " root1"
@@ -38,58 +45,65 @@ class WorkspaceFolderUtilTest {
38
45
name = " root2"
39
46
)
40
47
48
+ mockkStatic(ModuleManager ::class , ModuleRootManager ::class )
49
+
41
50
every { mockProject.isDefault } returns false
42
- every { ProjectRootManager .getInstance(mockProject) } returns mockProjectRootManager
43
- every { mockProjectRootManager.contentRoots } returns arrayOf(mockContentRoot1, mockContentRoot2)
51
+ every { ModuleManager .getInstance(mockProject) } returns mockModuleManager
52
+ every { mockModuleManager.modules } returns arrayOf(mockModule1, mockModule2)
53
+ every { mockModule1.name } returns " module1"
54
+ every { mockModule2.name } returns " module2"
55
+ every { ModuleRootManager .getInstance(mockModule1) } returns mockModuleRootManager1
56
+ every { ModuleRootManager .getInstance(mockModule2) } returns mockModuleRootManager2
57
+ every { mockModuleRootManager1.contentRoots } returns arrayOf(mockContentRoot1)
58
+ every { mockModuleRootManager2.contentRoots } returns arrayOf(mockContentRoot2)
44
59
45
60
val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
46
61
47
62
assertThat(result).hasSize(2 )
48
63
assertThat(result[0 ].uri).isEqualTo(normalizeFileUri(" file:///path/to/root1" ))
49
64
assertThat(result[1 ].uri).isEqualTo(normalizeFileUri(" file:///path/to/root2" ))
50
- assertThat(result[0 ].name).isEqualTo(" root1 " )
51
- assertThat(result[1 ].name).isEqualTo(" root2 " )
65
+ assertThat(result[0 ].name).isEqualTo(" module1 " )
66
+ assertThat(result[1 ].name).isEqualTo(" module2 " )
52
67
}
53
68
54
69
@Test
55
- fun `createWorkspaceFolders returns empty list when project has no content roots` () {
70
+ fun `createWorkspaceFolders handles modules with no content roots` () {
56
71
val mockProject = mockk<Project >()
57
- val mockProjectRootManager = mockk<ProjectRootManager >()
72
+ val mockModuleManager = mockk<ModuleManager >()
73
+ val mockModule = mockk<Module >()
74
+ val mockModuleRootManager = mockk<ModuleRootManager >()
75
+
76
+ mockkStatic(ModuleManager ::class , ModuleRootManager ::class )
58
77
59
78
every { mockProject.isDefault } returns false
60
- every { ProjectRootManager .getInstance(mockProject) } returns mockProjectRootManager
61
- every { mockProjectRootManager.contentRoots } returns emptyArray()
79
+ every { ModuleManager .getInstance(mockProject) } returns mockModuleManager
80
+ every { mockModuleManager.modules } returns arrayOf(mockModule)
81
+ every { ModuleRootManager .getInstance(mockModule) } returns mockModuleRootManager
82
+ every { mockModuleRootManager.contentRoots } returns emptyArray()
62
83
63
84
val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
64
85
65
- assertThat(result).isEqualTo(emptyList< VirtualFile >() )
86
+ assertThat(result).isEmpty( )
66
87
}
67
88
68
- private fun createMockVirtualFile (uri : URI , name : String ): VirtualFile {
69
- val path = mockk<Path > {
70
- every { toUri() } returns uri
71
- }
72
- return mockk<VirtualFile > {
89
+ private fun createMockVirtualFile (uri : URI , name : String ): VirtualFile =
90
+ mockk<VirtualFile > {
73
91
every { url } returns uri.toString()
74
92
every { getName() } returns name
75
- every { toNioPath() } returns path
76
93
every { isDirectory } returns false
77
94
every { fileSystem } returns mockk {
78
95
every { protocol } returns " file"
79
96
}
80
97
}
81
- }
82
98
83
99
// for windows unit tests
84
100
private fun normalizeFileUri (uri : String ): String {
85
101
if (! System .getProperty(" os.name" ).lowercase().contains(" windows" )) {
86
102
return uri
87
103
}
88
-
89
104
if (! uri.startsWith(" file:///" )) {
90
105
return uri
91
106
}
92
-
93
107
val path = uri.substringAfter(" file:///" )
94
108
return " file:///C:/$path "
95
109
}
0 commit comments