RFR: 8343876: Enhancements to jpackage test lib

Alexey Semenyuk asemenyuk at openjdk.org
Fri Nov 15 14:40:45 UTC 2024


On Fri, 15 Nov 2024 00:02:29 GMT, Alexander Matveev <almatvee at openjdk.org> wrote:

>> Make jpackage test lib more practical. List of changes:
>> 
>> Support multiple args and var args in `@Parameter` annotation:
>> 
>> @Test
>> @Parameter({"12", "foo"})
>> @Parameter({"-89", "bar", "more"})
>> @Parameter({"-89", "bar", "more", "moore"})
>> public void testVarArg(int a, String b, String ... other) {}
>> 
>> 
>> Full support for var args in test constructors.<br/>Better results when looking up the suitable ctor for the ctor args with `null`-s.<br/>Support multiple functions with `@Parameteres` annotation, all will be executed instead of the first one earlier:
>> 
>> class FooTest {
>>     public FooTest(String... args) {}
>>     public FooTest(int o) {}
>>     public FooTest(int a, Boolean[] b, String c, String ... other) {}
>> 
>>     @Parameters
>>     public static Collection<Object[]> input() {
>>         return List.of(new Object[][] {
>>             {},
>>             {"str"},
>>             {55, new Boolean[]{false, true, false}, "foo", "bar"},
>>         });
>>     }
>> 
>>     @Parameters
>>     public static Collection<Object[]> input2() {
>>         return List.of(new Object[][] {
>>             {78},
>>             {34, null, null},
>>         });
>>     }
>> }
>> 
>> 
>> Static test method will be executed only once and not as many times as the number of the test class instances.
>> 
>> Introduced `@ParameterSupplier` annotation as a flexible alternative to `@Parameter`:
>> 
>> 
>> class FooTest {
>>     @Test
>>     @ParameterSupplier("dateSupplier")
>>     @ParameterSupplier("AnotherClass.dateSupplier")
>>     public void testDates(LocalDate v) {}
>> 
>>     public static Collection<Object[]> dateSupplier() {
>>         return List.of(new Object[][] {
>>             { LocalDate.parse("2018-05-05") },
>>             { LocalDate.parse("2018-07-11") },
>>         });
>>     }
>> }
>> 
>> class AnotherClass {
>>     public static Collection<Object[]> dateSupplier() {
>>         return List.of(new Object[][] {
>>             { LocalDate.parse("2028-07-11") },
>>         });
>>     }
>> }
>> 
>> 
>> All annotations support `ifOS` and `ifNotOS` properties of type `jdk.internal.util.OperatingSystem`:
>> 
>> 
>> @Test(ifOS = OperatingSystem.LINUX)
>> public void testRunIfLinux() {}
>> 
>> @Test(ifNotOS = OperatingSystem.LINUX)
>> public void testRunIfNotLinux() {}
>> 
>> @Test(ifNotOS = {OperatingSystem.LINUX,OperatingSystem.MACOS})
>> public void testRunIfNotLinuxOrMacOS() {}
>> 
>> @Test
>> @Parameter(value = "foo", ifOS = OperatingSystem.LINUX)
>> @Parameter(value = {"foo", "bar"}, ifOS = { OperatingSystem.LI...
>
> test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java line 441:
> 
>> 439:         }
>> 440: 
>> 441:         // Verify the value of `Exec` key in is escaped if required
> 
> This comment is confusing. Did you mean "Verify that the value of `Exec` key is escaped"?

It was extra "in". I meant "Verify the value of `Exec` key is escaped if required"

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21996#discussion_r1843925654


More information about the core-libs-dev mailing list