JFileChooserFixture.selectFile() fails if called twice in OSX
Hi,
The following second Test fails on OSX. On Windows it works like expected. It might be a Swing issue in the MAC VM.
import java.io.File;
import org.assertj.swing.core.Robot;
import org.assertj.swing.edt.GuiActionRunner;
import org.assertj.swing.edt.GuiQuery;
import org.assertj.swing.finder.JFileChooserFinder;
import org.assertj.swing.fixture.FrameFixture;
import org.assertj.swing.fixture.JFileChooserFixture;
import org.assertj.swing.junit.testcase.AssertJSwingJUnitTestCase;
import org.junit.Test;
public class FileChooserTest extends AssertJSwingJUnitTestCase {
protected FrameFixture window;
protected Robot robot;
@Override
protected void onSetUp() {
FileChooserFrame mainFrame = GuiActionRunner
.execute(new GuiQuery<FileChooserFrame>() {
protected FileChooserFrame executeInEDT() {
return new FileChooserFrame();
}
});
robot = robot();
window = new FrameFixture(robot, mainFrame);
}
@Test
public void openFileChooser() {
selectFile();
}
@Test
public void openFileChooserAgain() {
selectFile();
}
private void selectFile() {
String seperator = System.getProperty("file.separator");
String currentDir = new File("").getAbsolutePath() + seperator + "src";
String filePath = currentDir + seperator + "FileChooserFrame.java";
window.button().click();
JFileChooserFixture fileChooser = JFileChooserFinder.findFileChooser()
.using(robot);
fileChooser.setCurrentDirectory(new File(currentDir));
fileChooser.selectFile(new File(filePath));
fileChooser.approve();
window.textBox().requireText(filePath);
}
}
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class FileChooserFrame extends JFrame {
public FileChooserFrame() {
setSize(200, 100);
setTitle(getClass().getCanonicalName());
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLayout(new FlowLayout());
JTextField textField = new JTextField();
textField.setPreferredSize(new Dimension(200, 20));
JButton button = new JButton("FileChooser");
JFrame parentFrame = this;
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int returnVal = fileChooser.showOpenDialog(parentFrame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
textField.setText(file.getAbsolutePath());
}
}
});
add(textField);
add(button);
setVisible(true);
}
public static void main(String[] args) {
new FileChooserFrame();
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>AssertJSwingTest</groupId>
<artifactId>AssertJSwingTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-swing-junit</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</project>
Thanks for providing the problem and the test!
Unfortunately I don't have access to a OSX machine and cannot analyse the problem myself. So this bug might remain unfixed until somebody with OSX will have a look at it.
Anyway, I added your test and it works for me (Linux+latest code). Could you please confirm that the test still fails with the latest version of AssertJ Swing and my version of your test?
Hi Christian,
I updated my pom to
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-swing-junit</artifactId>
<version>3.5.0</version>
</dependency>
and ran your test (I had to to clone your repository to have the RobotBasedTestCase available). But it still fails on MAC.
I also tested it with your current master branch but it failed also. It really seems that the Swing fileChooser behaves differently on Mac.
It might behave differently. Or there is some other difference. Unfortunately I don't have access to OS X so it's up to somebody which has access .. I'll review and merge any PR for that topic if it doesn't break the logic on my machine ;-)