Files
openide/java/java-tests/testSrc/com/intellij/projectView/ProjectPaneTest.kt
Sergey Malenkov 62eb03ebdb IDEA-208072: "File Nesting" support in "Project Files"
GitOrigin-RevId: fcde9b0deee02d7ab02033f703985d725245c1be
2020-12-02 13:37:16 +00:00

252 lines
12 KiB
Kotlin

// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.projectView
import com.intellij.ide.projectView.ProjectViewSettings
import com.intellij.ide.projectView.ViewSettings
import com.intellij.ide.projectView.impl.ProjectViewState
import com.intellij.ide.util.treeView.NodeOptions
import com.intellij.testFramework.PsiTestUtil
import com.intellij.util.io.directoryContent
import com.intellij.util.io.generateInVirtualTempDir
import kotlin.test.assertNotEquals
class ProjectPaneTest : AbstractProjectViewTest() {
override fun setUp() {
super.setUp()
selectProjectPane()
}
fun `test default settings`() {
val settings = currentSettings // mutable delegate
val state = ProjectViewState.getInstance(project)
// ProjectViewSettings
val defaultShowExcludedFiles = ProjectViewSettings.Immutable.DEFAULT.isShowExcludedFiles
assertEquals(defaultShowExcludedFiles, settings.isShowExcludedFiles)
state.showExcludedFiles = !defaultShowExcludedFiles
assertEquals(!defaultShowExcludedFiles, settings.isShowExcludedFiles)
val defaultShowVisibilityIcons = ProjectViewSettings.Immutable.DEFAULT.isShowVisibilityIcons
assertEquals(defaultShowVisibilityIcons, settings.isShowVisibilityIcons)
state.showVisibilityIcons = !defaultShowVisibilityIcons
assertEquals(!defaultShowVisibilityIcons, settings.isShowVisibilityIcons)
val defaultUseFileNestingRules = ProjectViewSettings.Immutable.DEFAULT.isUseFileNestingRules
assertEquals(defaultUseFileNestingRules, settings.isUseFileNestingRules)
state.useFileNestingRules = !defaultUseFileNestingRules
assertEquals(!defaultUseFileNestingRules, settings.isUseFileNestingRules)
// ViewSettings
val defaultFoldersAlwaysOnTop = ViewSettings.Immutable.DEFAULT.isFoldersAlwaysOnTop
assertEquals(defaultFoldersAlwaysOnTop, settings.isFoldersAlwaysOnTop)
state.foldersAlwaysOnTop = !defaultFoldersAlwaysOnTop
assertEquals(!defaultFoldersAlwaysOnTop, settings.isFoldersAlwaysOnTop)
val defaultShowMembers = ViewSettings.Immutable.DEFAULT.isShowMembers
assertEquals(defaultShowMembers, settings.isShowMembers)
state.showMembers = !defaultShowMembers
assertEquals(!defaultShowMembers, settings.isShowMembers)
val defaultStructureView = ViewSettings.Immutable.DEFAULT.isStructureView
assertEquals(defaultStructureView, settings.isStructureView)
val defaultShowModules = ViewSettings.Immutable.DEFAULT.isShowModules
assertEquals(false, settings.isShowModules) // not supported in the Project view
state.showModules = !defaultShowModules
assertEquals(false, settings.isShowModules) // not supported in the Project view
val defaultFlattenModules = ViewSettings.Immutable.DEFAULT.isFlattenModules
assertEquals(false, settings.isFlattenModules) // no modules in project
state.flattenModules = !defaultFlattenModules
assertEquals(false, settings.isFlattenModules) // no modules in project
val defaultShowURL = ViewSettings.Immutable.DEFAULT.isShowURL
assertEquals(defaultShowURL, settings.isShowURL)
state.showURL = !defaultShowURL
assertEquals(defaultShowURL, settings.isShowURL) // TODO: cannot be changed now
// NodeOptions
val defaultFlattenPackages = NodeOptions.Immutable.DEFAULT.isFlattenPackages
assertEquals(defaultFlattenPackages, settings.isFlattenPackages)
state.flattenPackages = !defaultFlattenPackages
assertEquals(!defaultFlattenPackages, settings.isFlattenPackages)
val defaultAbbreviatePackageNames = NodeOptions.Immutable.DEFAULT.isAbbreviatePackageNames
assertEquals(defaultAbbreviatePackageNames, settings.isAbbreviatePackageNames)
state.abbreviatePackageNames = !defaultAbbreviatePackageNames
assertEquals(!defaultAbbreviatePackageNames, settings.isAbbreviatePackageNames)
val defaultHideEmptyMiddlePackages = NodeOptions.Immutable.DEFAULT.isHideEmptyMiddlePackages
assertEquals(defaultHideEmptyMiddlePackages, settings.isHideEmptyMiddlePackages)
state.hideEmptyMiddlePackages = !defaultHideEmptyMiddlePackages
assertEquals(!defaultHideEmptyMiddlePackages, settings.isHideEmptyMiddlePackages)
val defaultCompactDirectories = NodeOptions.Immutable.DEFAULT.isCompactDirectories
assertEquals(false, settings.isCompactDirectories) // not supported in the Project view
state.compactDirectories = !defaultCompactDirectories
assertEquals(false, settings.isCompactDirectories) // not supported in the Project view
val defaultShowLibraryContents = NodeOptions.Immutable.DEFAULT.isShowLibraryContents
assertEquals(false, settings.isShowLibraryContents) // not supported in the Project view
state.showLibraryContents = !defaultShowLibraryContents
assertEquals(false, settings.isShowLibraryContents) // not supported in the Project view
}
fun `test default settings with modules in project`() {
val root = directoryContent {
dir("one") {}
dir("two") {}
}.generateInVirtualTempDir()
PsiTestUtil.addContentRoot(createModule("qualified.one"), root.findChild("one")!!)
PsiTestUtil.addContentRoot(createModule("qualified.two"), root.findChild("two")!!)
waitWhileBusy()
val settings = currentSettings // mutable delegate
val state = ProjectViewState.getInstance(project)
// ProjectViewSettings
val defaultShowExcludedFiles = ProjectViewSettings.Immutable.DEFAULT.isShowExcludedFiles
assertEquals(defaultShowExcludedFiles, settings.isShowExcludedFiles)
state.showExcludedFiles = !defaultShowExcludedFiles
assertEquals(!defaultShowExcludedFiles, settings.isShowExcludedFiles)
val defaultShowVisibilityIcons = ProjectViewSettings.Immutable.DEFAULT.isShowVisibilityIcons
assertEquals(defaultShowVisibilityIcons, settings.isShowVisibilityIcons)
state.showVisibilityIcons = !defaultShowVisibilityIcons
assertEquals(!defaultShowVisibilityIcons, settings.isShowVisibilityIcons)
val defaultUseFileNestingRules = ProjectViewSettings.Immutable.DEFAULT.isUseFileNestingRules
assertEquals(defaultUseFileNestingRules, settings.isUseFileNestingRules)
state.useFileNestingRules = !defaultUseFileNestingRules
assertEquals(!defaultUseFileNestingRules, settings.isUseFileNestingRules)
// ViewSettings
val defaultFoldersAlwaysOnTop = ViewSettings.Immutable.DEFAULT.isFoldersAlwaysOnTop
assertEquals(defaultFoldersAlwaysOnTop, settings.isFoldersAlwaysOnTop)
state.foldersAlwaysOnTop = !defaultFoldersAlwaysOnTop
assertEquals(!defaultFoldersAlwaysOnTop, settings.isFoldersAlwaysOnTop)
val defaultShowMembers = ViewSettings.Immutable.DEFAULT.isShowMembers
assertEquals(defaultShowMembers, settings.isShowMembers)
state.showMembers = !defaultShowMembers
assertEquals(!defaultShowMembers, settings.isShowMembers)
val defaultStructureView = ViewSettings.Immutable.DEFAULT.isStructureView
assertEquals(defaultStructureView, settings.isStructureView)
val defaultShowModules = ViewSettings.Immutable.DEFAULT.isShowModules
assertEquals(false, settings.isShowModules) // not supported in the Project view
state.showModules = !defaultShowModules
assertEquals(false, settings.isShowModules) // not supported in the Project view
val defaultFlattenModules = ViewSettings.Immutable.DEFAULT.isFlattenModules
assertEquals(defaultFlattenModules, settings.isFlattenModules)
state.flattenModules = !defaultFlattenModules
assertEquals(!defaultFlattenModules, settings.isFlattenModules)
val defaultShowURL = ViewSettings.Immutable.DEFAULT.isShowURL
assertEquals(defaultShowURL, settings.isShowURL)
state.showURL = !defaultShowURL
assertEquals(defaultShowURL, settings.isShowURL) // TODO: cannot be changed now
// NodeOptions
val defaultFlattenPackages = NodeOptions.Immutable.DEFAULT.isFlattenPackages
assertEquals(defaultFlattenPackages, settings.isFlattenPackages)
state.flattenPackages = !defaultFlattenPackages
assertEquals(!defaultFlattenPackages, settings.isFlattenPackages)
val defaultAbbreviatePackageNames = NodeOptions.Immutable.DEFAULT.isAbbreviatePackageNames
assertEquals(defaultAbbreviatePackageNames, settings.isAbbreviatePackageNames)
state.abbreviatePackageNames = !defaultAbbreviatePackageNames
assertEquals(!defaultAbbreviatePackageNames, settings.isAbbreviatePackageNames)
val defaultHideEmptyMiddlePackages = NodeOptions.Immutable.DEFAULT.isHideEmptyMiddlePackages
assertEquals(defaultHideEmptyMiddlePackages, settings.isHideEmptyMiddlePackages)
state.hideEmptyMiddlePackages = !defaultHideEmptyMiddlePackages
assertEquals(!defaultHideEmptyMiddlePackages, settings.isHideEmptyMiddlePackages)
val defaultCompactDirectories = NodeOptions.Immutable.DEFAULT.isCompactDirectories
assertEquals(false, settings.isCompactDirectories) // not supported in the Project view
state.compactDirectories = !defaultCompactDirectories
assertEquals(false, settings.isCompactDirectories) // not supported in the Project view
val defaultShowLibraryContents = NodeOptions.Immutable.DEFAULT.isShowLibraryContents
assertEquals(false, settings.isShowLibraryContents) // not supported in the Project view
state.showLibraryContents = !defaultShowLibraryContents
assertEquals(false, settings.isShowLibraryContents) // not supported in the Project view
}
fun `test node collapse on sibling add`() {
with(ProjectViewState.getInstance(project)) {
hideEmptyMiddlePackages = false
}
val test = createTreeTest()
val temp = getOrCreateModuleDir(module)
val root = createChildDirectory(temp, "module")
PsiTestUtil.addSourceRoot(module, root)
val parent = createChildDirectory(root, "parent")
val folder = createChildDirectory(parent, "folder")
selectFile(folder)
test.assertStructure(" -PsiDirectory: module\n" +
" -PsiDirectory: parent\n" +
" PsiDirectory: folder\n" +
" +External Libraries\n")
selectFile(createChildDirectory(folder, "child"))
test.assertStructure(" -PsiDirectory: module\n" +
" -PsiDirectory: parent\n" +
" -PsiDirectory: folder\n" +
" PsiDirectory: child\n" +
" +External Libraries\n")
selectFile(createChildDirectory(parent, "sibling"))
test.assertStructure(" -PsiDirectory: module\n" +
" -PsiDirectory: parent\n" +
" -PsiDirectory: folder\n" +
" PsiDirectory: child\n" +
" PsiDirectory: sibling\n" +
" +External Libraries\n")
}
fun `test file nesting support`() {
val test = createTreeTest()
val root = directoryContent {
dir("src") {
dir("com") {
file("test.js")
file("test.js.map")
}
}
}.generateInVirtualTempDir()
PsiTestUtil.addSourceRoot(module, root.findChild("src")!!)
val mapFile = root.findFileByRelativePath("src/com/test.js.map")!!
setFileNestingRules(".js" to ".js.map")
selectFile(mapFile)
test.assertStructure(" -PsiDirectory: src\n" +
" -PsiDirectory: com\n" +
" -test.js\n" +
" test.js.map\n" +
" +External Libraries\n")
val structureBefore = test.toString()
projectView.setUseFileNestingRules(false)
selectFile(mapFile)
test.assertStructure(" -PsiDirectory: src\n" +
" -PsiDirectory: com\n" +
" test.js\n" +
" test.js.map\n" +
" +External Libraries\n")
assertNotEquals(structureBefore, test.toString())
}
}