33
44package software.aws.toolkits.jetbrains.services.amazonq.lsp.util
55
6+ import com.intellij.openapi.module.Module
7+ import com.intellij.openapi.module.ModuleManager
68import com.intellij.openapi.project.Project
7- import com.intellij.openapi.roots.ProjectRootManager
9+ import com.intellij.openapi.roots.ModuleRootManager
810import com.intellij.openapi.vfs.VirtualFile
911import io.mockk.every
1012import io.mockk.mockk
13+ import io.mockk.mockkStatic
1114import org.assertj.core.api.Assertions.assertThat
1215import org.junit.jupiter.api.Test
1316import java.net.URI
14- import java.nio.file.Path
1517
1618class WorkspaceFolderUtilTest {
1719
1820 @Test
19- fun `createWorkspaceFolders returns empty list when no workspace folders ` () {
21+ fun `createWorkspaceFolders returns empty list when project is default ` () {
2022 val mockProject = mockk<Project >()
2123 every { mockProject.isDefault } returns true
2224
2325 val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
2426
25- assertThat(result).isEqualTo(emptyList< VirtualFile >() )
27+ assertThat(result).isEmpty( )
2628 }
2729
2830 @Test
29- fun `createWorkspaceFolders returns workspace folders for non-default project` () {
31+ fun `createWorkspaceFolders returns workspace folders for non-default project with modules ` () {
3032 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+
3239 val mockContentRoot1 = createMockVirtualFile(
3340 URI (" file:///path/to/root1" ),
3441 name = " root1"
@@ -38,58 +45,65 @@ class WorkspaceFolderUtilTest {
3845 name = " root2"
3946 )
4047
48+ mockkStatic(ModuleManager ::class , ModuleRootManager ::class )
49+
4150 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)
4459
4560 val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
4661
4762 assertThat(result).hasSize(2 )
4863 assertThat(result[0 ].uri).isEqualTo(normalizeFileUri(" file:///path/to/root1" ))
4964 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 " )
5267 }
5368
5469 @Test
55- fun `createWorkspaceFolders returns empty list when project has no content roots` () {
70+ fun `createWorkspaceFolders handles modules with no content roots` () {
5671 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 )
5877
5978 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()
6283
6384 val result = WorkspaceFolderUtil .createWorkspaceFolders(mockProject)
6485
65- assertThat(result).isEqualTo(emptyList< VirtualFile >() )
86+ assertThat(result).isEmpty( )
6687 }
6788
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 > {
7391 every { url } returns uri.toString()
7492 every { getName() } returns name
75- every { toNioPath() } returns path
7693 every { isDirectory } returns false
7794 every { fileSystem } returns mockk {
7895 every { protocol } returns " file"
7996 }
8097 }
81- }
8298
8399 // for windows unit tests
84100 private fun normalizeFileUri (uri : String ): String {
85101 if (! System .getProperty(" os.name" ).lowercase().contains(" windows" )) {
86102 return uri
87103 }
88-
89104 if (! uri.startsWith(" file:///" )) {
90105 return uri
91106 }
92-
93107 val path = uri.substringAfter(" file:///" )
94108 return " file:///C:/$path "
95109 }
0 commit comments