/*
* Copyright (C) 2012 Nicolas Peransin. All rights reserved.
* Use is subject to license terms.
*/
package org.mypsycho.test.app.examples;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JMenuItem;
import org.fest.swing.fixture.FrameFixture;
import org.fest.swing.fixture.JButtonFixture;
import org.fest.swing.fixture.JLabelFixture;
import org.fest.swing.fixture.JMenuItemFixture;
import org.fest.swing.fixture.JPanelFixture;
import org.fest.swing.fixture.JPopupMenuFixture;
import org.junit.Test;
import org.mypsycho.test.app.AbstractAppTestContext;
import examples.ActionExample2;
import examples.ActionExample3;
import examples.ActionExample4;
import examples.ActionMapExample;
/**
* Class for ...
* <p>Details</p>
*
* @author Peransin Nicolas
*/
public class ActionExamplesTest extends AbstractAppTestContext {
@Test
public void testExample2() throws Exception {
launch(new ActionExample2());
FrameFixture f = frame("appFrame");
f.requireVisible();
// test update button
String testText = "New Title";
f.textBox("field").setText(testText);
f.button("update").click();
assertEquals(testText, f.target.getTitle());
// test clear button
f.button("clear").click();
assertEquals("", f.target.getTitle());
}
@Test
public void testExample3() throws Exception {
launch(new ActionExample3());
FrameFixture f = frame("appFrame");
f.requireVisible();
JButtonFixture clearFt = f.button("clear");
assertFalse(clearFt.target.isEnabled());
// update title
f.textBox("field").setText("New Title");
f.button("update").click();
// test clear button
assertTrue(clearFt.target.isEnabled());
f.button("clear").click();
assertFalse(clearFt.target.isEnabled());
}
@Test
public void testExample4() throws Exception {
launch(new ActionExample4());
FrameFixture f = mainFrame();
f.requireVisible();
final int FILES_MIN = 20; // minimum number of files in 'java.home'
final JLabelFixture msg = f.label("message");
for (int i = 0; i < FILES_MIN; i++) {
expects("listing.message." + i + ".true");
}
// Some message must be sent as the
msg.component().addPropertyChangeListener("text", new PropertyChangeListener() {
int count = 0;
@Override
public void propertyChange(PropertyChangeEvent evt) {
try {
boolean expected = ((String) evt.getNewValue()).startsWith("Listing ");
happens("listing.message." + count + "."+ expected, null);
count++;
if (count >= FILES_MIN) {
msg.component().removePropertyChangeListener("text", this);
}
} catch(Throwable t) {
happens("listing.message." + t.getMessage(), null);
}
}
});
f.button("go").click();
Thread.sleep(2000); // 5s
// at least 20 files in java home
assertTrue(f.list().target.getModel().getSize() > FILES_MIN);
f.label("message").requireText("File " + System.getProperty("java.home") + " listed");
}
@Test
public void testMapExample() throws Exception {
launch(new ActionMapExample());
JPanelFixture base = mainFrame().panel("baseScene");
//
for (int i = 0; i < 3; i++) {
JPopupMenuFixture popup = base.showPopupMenu();
Component[] items = popup.target.getComponents();
new JMenuItemFixture(popup.robot, (JMenuItem) items[0]).click();
}
ActionMapExample.Scene scene = ((ActionMapExample.BaseScenePanel) base.target).getScene();
assertEquals(3, scene.getNodes().size());
}
}