diff --git a/src/main/kotlin/org/jetbrains/research/testspark/display/TestSparkDisplayManager.kt b/src/main/kotlin/org/jetbrains/research/testspark/display/TestSparkDisplayManager.kt index 4f10c186e..87383ef72 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/display/TestSparkDisplayManager.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/display/TestSparkDisplayManager.kt @@ -75,6 +75,10 @@ class TestSparkDisplayManager { clear() } } + + generatedTestsTabBuilder!!.getApplyButton().addActionListener { + if (generatedTestsTabBuilder!!.applyTests()) clear() + } } fun clear() { diff --git a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabBuilder.kt b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabBuilder.kt index d3861f123..339fd39cb 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabBuilder.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabBuilder.kt @@ -19,7 +19,6 @@ import java.awt.BorderLayout import java.awt.Dimension import javax.swing.Box import javax.swing.BoxLayout -import javax.swing.JButton import javax.swing.JCheckBox import javax.swing.JPanel import javax.swing.JSeparator @@ -47,6 +46,8 @@ class GeneratedTestsTabBuilder( fun getRemoveAllButton() = generatedTestsTabData.topButtonsPanelBuilder.getRemoveAllButton() + fun getApplyButton() = generatedTestsTabData.applyButton + /** * Displays the generated tests tab in the tool window. * This method initializes necessary components based on the selected language and shows the tab. @@ -91,8 +92,6 @@ class GeneratedTestsTabBuilder( * Initializes and fills the main panel with subcomponents. */ private fun fillMainPanel() { - val applyButton = JButton(PluginLabelsBundle.get("applyButton")) - mainPanel.layout = BorderLayout() mainPanel.add( @@ -100,11 +99,10 @@ class GeneratedTestsTabBuilder( BorderLayout.NORTH, ) mainPanel.add(generatedTestsTabData.scrollPane, BorderLayout.CENTER) - mainPanel.add(applyButton, BorderLayout.SOUTH) + mainPanel.add(generatedTestsTabData.applyButton, BorderLayout.SOUTH) - applyButton.isOpaque = false - applyButton.isContentAreaFilled = false - applyButton.addActionListener { applyTests() } + generatedTestsTabData.applyButton.isOpaque = false + generatedTestsTabData.applyButton.isContentAreaFilled = false } /** @@ -188,7 +186,7 @@ class GeneratedTestsTabBuilder( /** * Applies the selected test cases by passing them to the display utility for execution. */ - private fun applyTests() { + fun applyTests(): Boolean { // Filter the selected test cases val selectedTestCasePanels = generatedTestsTabData.testCaseNameToPanel.filter { (it.value.getComponent(0) as JCheckBox).isSelected } @@ -203,6 +201,8 @@ class GeneratedTestsTabBuilder( // Remove the selected test cases from the cache and the tool window UI if (applyingResult) clear() + + return applyingResult } /** diff --git a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabData.kt b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabData.kt index 06363bdbb..97da647b9 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabData.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/GeneratedTestsTabData.kt @@ -4,7 +4,9 @@ import com.intellij.ui.EditorTextField import com.intellij.ui.components.JBScrollPane import com.intellij.ui.content.Content import com.intellij.ui.content.ContentManager +import org.jetbrains.research.testspark.bundles.plugin.PluginLabelsBundle import org.jetbrains.research.testspark.core.data.TestCase +import javax.swing.JButton import javax.swing.JCheckBox import javax.swing.JPanel @@ -16,6 +18,7 @@ class GeneratedTestsTabData { val unselectedTestCases: HashMap = HashMap() val testCasePanelFactories: ArrayList = arrayListOf() var allTestCasePanel: JPanel = JPanel() + val applyButton: JButton = JButton(PluginLabelsBundle.get("applyButton")) var scrollPane: JBScrollPane = JBScrollPane( allTestCasePanel, JBScrollPane.VERTICAL_SCROLLBAR_ALWAYS, diff --git a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TestCasePanelBuilder.kt b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TestCasePanelBuilder.kt index 2f9ac5bb8..09ad48f01 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TestCasePanelBuilder.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TestCasePanelBuilder.kt @@ -414,7 +414,8 @@ class TestCasePanelBuilder( */ private fun sendRequest() { loadingLabel.isVisible = true - enableComponents(false) + enableGlobalComponents(false) + enableLocalComponents(false) ProgressManager.getInstance() .run(object : Task.Backgroundable(project, PluginMessagesBundle.get("sendingFeedback")) { @@ -456,13 +457,19 @@ class TestCasePanelBuilder( }) } - private fun finishProcess() { + private fun finishProcess(enableGlobal: Boolean = true) { uiContext!!.errorMonitor.clear() loadingLabel.isVisible = false - enableComponents(true) + if (enableGlobal) enableGlobalComponents(true) + enableLocalComponents(true) } - private fun enableComponents(isEnabled: Boolean) { + private fun enableGlobalComponents(isEnabled: Boolean) { + generatedTestsTabData.topButtonsPanelBuilder.getRemoveAllButton().isEnabled = isEnabled + generatedTestsTabData.applyButton.isEnabled = isEnabled + } + + private fun enableLocalComponents(isEnabled: Boolean) { nextButton.isEnabled = isEnabled previousButton.isEnabled = isEnabled runTestButton.isEnabled = isEnabled @@ -511,12 +518,13 @@ class TestCasePanelBuilder( if (!runTestButton.isEnabled) return loadingLabel.isVisible = true - enableComponents(false) + enableGlobalComponents(false) + enableLocalComponents(false) ProgressManager.getInstance() .run(object : Task.Backgroundable(project, PluginMessagesBundle.get("sendingFeedback")) { override fun run(indicator: ProgressIndicator) { - runTest(IJProgressIndicator(indicator)) + runTest(IJProgressIndicator(indicator), true) } }) } @@ -526,10 +534,11 @@ class TestCasePanelBuilder( if (!runTestButton.isEnabled) return loadingLabel.isVisible = true - enableComponents(false) + enableGlobalComponents(false) + enableLocalComponents(false) tasks.add { indicator -> - runTest(indicator) + runTest(indicator, false) } } @@ -538,7 +547,7 @@ class TestCasePanelBuilder( update() } - private fun runTest(indicator: CustomProgressIndicator) { + private fun runTest(indicator: CustomProgressIndicator, enableGlobal: Boolean) { indicator.setText("Executing ${testCase.testName}") val fileName = TestAnalyzerFactory.create(language).getFileNameFromTestCaseCode(testCase.testCode) @@ -572,7 +581,7 @@ class TestCasePanelBuilder( update() } - finishProcess() + finishProcess(enableGlobal) indicator.stop() } diff --git a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TopButtonsPanelBuilder.kt b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TopButtonsPanelBuilder.kt index 76773afa5..c5eb68b1f 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TopButtonsPanelBuilder.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/display/generatedTests/TopButtonsPanelBuilder.kt @@ -112,7 +112,11 @@ class TopButtonsPanelBuilder { executeTasks(project, tasks, generatedTestsTabData) } - private fun executeTasks(project: Project, tasks: Queue<(CustomProgressIndicator) -> Unit>, generatedTestsTabData: GeneratedTestsTabData) { + private fun executeTasks( + project: Project, + tasks: Queue<(CustomProgressIndicator) -> Unit>, + generatedTestsTabData: GeneratedTestsTabData, + ) { val nextTask = tasks.poll() nextTask?.let { task -> @@ -141,6 +145,10 @@ class TopButtonsPanelBuilder { } }) } + if (nextTask == null) { + generatedTestsTabData.topButtonsPanelBuilder.getRemoveAllButton().isEnabled = true + generatedTestsTabData.applyButton.isEnabled = true + } } fun getPanel(project: Project, generatedTestsTabData: GeneratedTestsTabData): JPanel {