RFR: 7903965: Fix Launching Tests from Context Menu

Oleksii Sylichenko duke at openjdk.org
Mon Mar 10 13:14:23 UTC 2025


On Mon, 10 Mar 2025 11:49:44 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> Currently, there is an issue with running TestNG/JUnit tests when using the context menu on the editor tab. TestNG/JUnit intercepts the test execution from JTReg.
>> 
>> After fixing this issue, I decided to extend the fix to cover all potential use cases of the context menu.
>> 
>> As part of this pull request, I propose enhancing the process of running tests via the context menu. The context menu can be used in the following cases:
>> 
>> - Editor tab
>> - File in the project tree
>> - Directory in the project tree
>> - Any location within a file
>> 
>> The current changes automatically determine what needs to be executed:
>> 
>> - Directory
>> - File
>> - Method
>> 
>> Additionally, the issue with intercepting test execution through Application, TestNG, and JUnit configurations when using the context menu on the editor tab has been fixed.
>> 
>> # Summary
>> 
>> - Ensure that run configuration priority is no longer lost to Application, TestNG, or JUnit setups when launching via the context menu.  
>> - Fix run configuration created via the context menu: find and launch the proper test element, depending on the current PSI element.  
>> - Improve the logic for comparing existing run configurations with newly generated ones.  
>> - Add JUnit plugin in the dependencies.
>> 
>> # Detailed changes
>> 
>> ## Add JUnit plugin into dependencies
>> - build.gradle
>> - plugin.xml
>> 
>> ## JTRegClassConfigurationProducer.java
>> - Refactor `setupConfigurationFromContext`:
>>   - Move the check for whether a file can be run to `JTRegUtils#isRunnableByJTReg`.  
>>   - Allow this method to create configurations for directories as well.  
>>   - Implement `preventRunPriorityLoss` to prevent priority takeover by other run configuration types (Application, TestNG, JUnit) under certain conditions.  
>>   - Replace the use of the current PSI element for generating names and querying run configurations with the specific element intended for execution.  
>> - Implement `preventRunPriorityLoss`.
>> - Add Javadoc for `nameForElement`.
>> 
>> ## JTRegConfigurationProducer.java
>> - Fix logic in `isConfigurationFromContext` for checking if two configurations are identical:
>>   - Replace the use of the current PSI element for queries with the exact element intended for execution.  
>> - Compare string-typed configuration parameters using a "not-nullify" approach (`null == ""`).
>> - Implement `findExactRunElement` to locate the specific PSI element for execution among the current element’s parents.
>> - Add a JUnit chec...
>
> plugins/idea/src/main/resources/META-INF/plugin.xml line 36:
> 
>> 34:     <depends>AntSupport</depends>
>> 35:     <depends>TestNG-J</depends>
>> 36:     <depends>JUnit</depends>
> 
> Is this required for `JUnitUtil` and `JUnitConfiguration`?

Yes, otherwise we get a runtime exception when context menu appears:

Caused by: java.lang.NoClassDefFoundError: com/intellij/execution/junit/JUnitConfiguration

`JUnitConfiguration` class is used in the method:
`com.oracle.plugin.jtreg.configuration.producers.JTRegConfigurationProducer#shouldReplace`:

![JTRegConfigurationProducer#shouldReplace](https://github.com/user-attachments/assets/dbf5e61e-f8fa-44df-9e7b-2bac0431a925)

-------------

PR Review Comment: https://git.openjdk.org/jtreg/pull/252#discussion_r1987258397


More information about the jtreg-dev mailing list