[eel, jdk] IJ-CR-162252: Add unit test for different eels in new project wizard

GitOrigin-RevId: 6f45931427b09cdbebc4eef99eb14a662fcd6865
This commit is contained in:
Konstantin.Nisht
2025-01-03 18:44:38 +00:00
committed by intellij-monorepo-bot
parent 2521f8c2a9
commit 16a89f4a1f
3 changed files with 87 additions and 2 deletions
+3
View File
@@ -26,5 +26,8 @@
<orderEntry type="library" name="kotlin-test" level="project" />
<orderEntry type="module" module-name="intellij.platform.util" scope="TEST" />
<orderEntry type="library" scope="TEST" name="ktor-server-cio" level="project" />
<orderEntry type="module" module-name="intellij.platform.testFramework.junit5.eel" scope="TEST" />
<orderEntry type="module" module-name="intellij.platform.eel.provider" scope="TEST" />
<orderEntry type="module" module-name="intellij.platform.eel" scope="TEST" />
</component>
</module>
@@ -0,0 +1,77 @@
// 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.ui
import com.intellij.ide.projectWizard.ProjectWizardJdkComboBox
import com.intellij.ide.projectWizard.ProjectWizardJdkIntent
import com.intellij.ide.projectWizard.ProjectWizardTestCase
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.writeAction
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.SimpleJavaSdkType
import com.intellij.openapi.util.Disposer
import com.intellij.platform.eel.path.EelPath
import com.intellij.platform.eel.provider.LocalEelDescriptor
import com.intellij.platform.eel.provider.utils.EelPathUtils
import com.intellij.platform.testFramework.junit5.eel.fixture.eelFixture
import com.intellij.testFramework.common.timeoutRunBlocking
import com.intellij.testFramework.junit5.TestApplication
import com.intellij.testFramework.junit5.TestDisposable
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import java.nio.file.Files
import java.nio.file.Path
@TestApplication
class ProjectWizardJdkComboBoxTest {
val eelFixture = eelFixture(EelPath.OS.UNIX)
@Test
fun `changing eel changes available sdks`(@TestDisposable disposable: Disposable): Unit = timeoutRunBlocking {
val localSdk = createLocalSdk(disposable)
val eelSdk = createEelSdk(disposable)
val comboBox = ProjectWizardJdkComboBox(null, disposable)
comboBox.eelChanged(LocalEelDescriptor)
Assertions.assertTrue(comboBox.contains(localSdk))
Assertions.assertFalse(comboBox.contains(eelSdk))
comboBox.eelChanged(eelFixture.get().eelDescriptor)
Assertions.assertFalse(comboBox.contains(localSdk))
Assertions.assertTrue(comboBox.contains(eelSdk))
}
suspend fun createSdk(path: Path, name: String, disposable: Disposable): Sdk {
val jdkTable = ProjectJdkTable.getInstance()
val javaSdkType = SimpleJavaSdkType.getInstance()
Disposer.register(disposable) {
Files.delete(path)
}
val sdk = jdkTable.createSdk(name, javaSdkType)
val modificator = sdk.sdkModificator
modificator.homePath = path.toString()
writeAction {
modificator.commitChanges()
jdkTable.addJdk(sdk, disposable)
}
return sdk
}
suspend fun createLocalSdk(disposable: Disposable): Sdk {
val tempDir = Files.createTempDirectory("test-")
return createSdk(tempDir, "local-sdk", disposable)
}
suspend fun createEelSdk(disposable: Disposable): Sdk {
val eel = eelFixture.get()
val tempDir = EelPathUtils.createTemporaryDirectory(eel.eelApi)
return createSdk(tempDir, "eel-sdk", disposable)
}
fun ProjectWizardJdkComboBox.contains(sdk: Sdk): Boolean {
return model.items.find { it is ProjectWizardJdkIntent.ExistingJdk && it.jdk == sdk } != null
}
}
@@ -65,11 +65,16 @@ object EelPathUtils {
val projectFilePath = project.projectFilePath ?: return Files.createTempDirectory(prefix)
return runBlockingMaybeCancellable {
val eel = Path.of(projectFilePath).getEelApi()
val file = eel.fs.createTemporaryDirectory(EelFileSystemApi.CreateTemporaryEntryOptions.Builder().prefix(prefix).build()).getOrThrowFileSystemException()
eel.mapper.toNioPath(file)
createTemporaryDirectory(eel, prefix)
}
}
@JvmStatic
suspend fun createTemporaryDirectory(eelApi: EelApi, prefix: String = ""): Path {
val file = eelApi.fs.createTemporaryDirectory(EelFileSystemApi.CreateTemporaryEntryOptions.Builder().prefix(prefix).build()).getOrThrowFileSystemException()
return eelApi.mapper.toNioPath(file)
}
@JvmStatic
fun renderAsEelPath(path: Path): String {
if (isPathLocal(path)) {