Files
openide/java/java-tests/testSrc/com/intellij/java/ide/actions/CreateClassActionAvailabilityTest.kt
Dmitry Avdeev 903b720631 IDEA-355836 Create new Java class / new Kotlin class actions should not be available on the top project level
make test compatible with 251


(cherry picked from commit 1e50ff79540f85b98d59aeebbb7999dfd40d6ac1)

IJ-CR-162668

GitOrigin-RevId: d34e833215932a02f2b8b5538d6263bcd86df38e
2025-05-13 14:12:42 +00:00

48 lines
2.1 KiB
Kotlin

// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.ide.actions
import com.intellij.ide.IdeView
import com.intellij.ide.actions.CreateClassAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.LangDataKeys
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiManager
import com.intellij.testFramework.TestActionEvent
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
class CreateClassActionAvailabilityTest: JavaCodeInsightFixtureTestCase() {
fun testCreateClassActionAvailability() {
val srcRoot = myFixture.tempDirFixture.findOrCreateDir("newContentRoot/src")
val contentRoot = srcRoot.parent
ApplicationManager.getApplication().runWriteAction {
ModuleRootManager.getInstance(myFixture.module).modifiableModel.apply {
addContentEntry(contentRoot.url).addSourceFolder(srcRoot, false)
commit()
}
}
assertFalse(isEnabledAndVisibleFor(contentRoot))
assertTrue(isEnabledAndVisibleFor(srcRoot))
}
private fun isEnabledAndVisibleFor(baseDir: VirtualFile): Boolean {
val projectDir = PsiManager.getInstance(project).findDirectory(baseDir)!!
val action = CreateClassAction()
val e: AnActionEvent = TestActionEvent.createTestEvent(context(projectDir))
action.update(e)
return e.presentation.isEnabledAndVisible
}
private fun context(projectDir: PsiDirectory): DataContext {
return SimpleDataContext.builder().add(LangDataKeys.IDE_VIEW, object : IdeView {
override fun getDirectories(): Array<out PsiDirectory> = arrayOf(projectDir)
override fun getOrChooseDirectory(): PsiDirectory = projectDir
}).add(LangDataKeys.PROJECT, this.project).build()
}
}