RFR: 8319938: com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java fails with "getSelectedFiles returned empty array for LAF: javax.swing.plaf.metal.MetalLookAndFeel" [v2]

Alexey Ivanov aivanov at openjdk.org
Mon Dec 4 20:43:36 UTC 2023


On Thu, 23 Nov 2023 11:53:00 GMT, Abhishek Kumar <abhiscxk at openjdk.org> wrote:

>>> But the files gets deselected after selection which returns as no file selected and test failed.
>> 
>> How is it? It sounds like magic… The working directory shouldn't matter; if it does, the test isn't as stable as it should be.
>
> Surprise to me also. It failed every single time when temporary files are created in `scratch`. 
> 
>>The test isn't as stable as it should be.
> 
> Unable to trace what is missing in the test.

It took a long while for me to figure it out. What matters is whether the `File` object is created with an absolute path or not. By using `System.getProperty("java.io.tmpdir")` as the base path, you create an absolute path for the parent directory.

Yet if you use pass `null` as the first parameter (as I said, there's no system property named ".", so `tmpDir` is `null`) or use the constructor with one parameter `new File("testDir")`, the file has relative path. This causes some issues…

When you create `JFileChooser` object, you *always* pass `testDir` as its starting directory. Then, for each case, you set it once again. Here's what I see in a `PropertyChangeListener`:


>> setCurrentDirectory
directoryChanged: /home/aivanov/jdk-dev/testDir/testDir -> testDir
<< setCurrentDirectory

SelectedFileChangedProperty: /home/aivanov/jdk-dev/testDir/subDir_3 -> null
SelectedFilesChangedProperty: [Ljava.io.File;@3fed803b -> null
directoryChanged: testDir -> /home/aivanov/jdk-dev/testDir
SelectedFileChangedProperty: null -> null
SelectedFilesChangedProperty: null -> [Ljava.io.File;@1bf88ed6


This is why see a directory gets selected but then becomes unselected again.

Getting the absolute file — `testDir = new File("testDir").getAbsoluteFile()` — resolves this problem, and the test starts to work in the current directory. I tested it by running with jtreg, then the current directory is the `scratch` directory, and as a stand-alone app, in this case the current directory is whatever the current directory is.

So either way works as long as the starting `File` object is created with _an absolute path_.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16674#discussion_r1414467819


More information about the client-libs-dev mailing list