package org.javabuilders.swing.test;
import static org.junit.Assert.*;
import java.lang.reflect.Method;
import javax.swing.JButton;
import org.javabuilders.BuildResult;
import org.javabuilders.Builder;
import org.javabuilders.annotations.DoInBackground;
import org.javabuilders.event.BackgroundEvent;
import org.javabuilders.event.BackgroundEventListener;
import org.javabuilders.event.IBackgroundCallback;
import org.javabuilders.event.IBackgroundProcessingHandler;
import org.javabuilders.swing.handler.event.CommonActionListenerHandler;
import org.javabuilders.swing.handler.property.AbstractButtonActionCommandHandler;
import org.javabuilders.swing.handler.property.AbstractButtonTextHandler;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the background event listener logic
*/
public class BackgroundEventListenerTest {
private boolean globalStarted = false, globalStopped = false, localStarted = false, localStopped = false,
handlerCalled = false, methodCalled = false;
@Before
public void setup() {
globalStarted = false;
globalStopped = false;
localStarted = false;
localStopped = false;
handlerCalled = false;
methodCalled = false;
}
@Test
public void testCustomListeners() {
TestBuilderConfig config = new TestBuilderConfig(JButton.class);
config.forType(JButton.class)
.propertyHandler(AbstractButtonActionCommandHandler.getInstance(),CommonActionListenerHandler.getInstance(),
new AbstractButtonTextHandler());
config.setBackgroundProcessingHandler(new IBackgroundProcessingHandler() {
@Override
public void doInBackground(BuildResult result, Object target, Method method, BackgroundEvent event,
IBackgroundCallback callbackWhenFinished) throws Exception {
method.invoke(BackgroundEventListenerTest.this, event);
handlerCalled = true;
}
});
config.addBackgroundEventListener(new BackgroundEventListener() {
@Override
public void backgroundTaskStarted(BuildResult r, BackgroundEvent evt) {
globalStarted = true;
}
@Override
public void backgroundTaskEnded(BuildResult r, BackgroundEvent evt) {
globalStopped = true;
}
});
String yaml = "JButton(name=button,onAction=backgroundTask)";
BuildResult r = Builder.buildFromString(config, this, yaml);
r.addBackgroundEventListener(new BackgroundEventListener() {
@Override
public void backgroundTaskStarted(BuildResult r, BackgroundEvent evt) {
localStarted = true;
}
@Override
public void backgroundTaskEnded(BuildResult r, BackgroundEvent evt) {
localStopped = true;
}
});
JButton button = (JButton) r.get("button");
assertNotNull(button);
//invoke action and assert that all the listeners have fired
button.doClick();
assertTrue("Global start not fired", globalStarted);
assertTrue("Global stop not fired", globalStopped);
assertTrue("Local start not fired", localStarted);
assertTrue("Local stop not fired", localStopped);
assertTrue("Background handler not called", handlerCalled);
assertTrue("Background method not called", methodCalled);
}
@SuppressWarnings("unused")
@DoInBackground(blocking=false)
private void backgroundTask(BackgroundEvent evt) {
methodCalled = true;
}
}