/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.swing.testutils;
import java.awt.Component;
import java.awt.Window;
import javax.swing.JButton;
import org.fest.swing.core.BasicComponentFinder;
import org.fest.swing.core.ComponentFoundCondition;
import org.fest.swing.core.GenericTypeMatcher;
import org.fest.swing.core.TypeMatcher;
import org.fest.swing.edt.FailOnThreadViolationRepaintManager;
import org.fest.swing.fixture.JButtonFixture;
import org.fest.swing.fixture.WindowFixture;
import org.fest.swing.timing.Pause;
import org.junit.After;
import org.junit.BeforeClass;
import static org.junit.Assert.assertNotNull;
/**
* Base for test classes which use a FEST {@linkplain WindowFixture} to hold dialogs,
* frames etc.
*
* @author Michael Bedward
* @since 8.0
* @source $URL$
* @version $Id$
*/
public abstract class GraphicsTestBase<T extends Window> {
// Max waiting time for dialog display (milliseconds)
public static final long DISPLAY_TIMEOUT = 1000;
protected WindowFixture<T> windowFixture;
/**
* Installs the FEST repaint manager.
*/
@BeforeClass
public static void baseSetUpOnce() {
FailOnThreadViolationRepaintManager.install();
}
/**
* Run after each test to call {@linkplain WindowFixture#cleanUp()}.
*/
@After
public void baseCleanup() {
if (windowFixture != null) {
windowFixture.cleanUp();
}
}
/**
* Waits up to {@linkplain #DISPLAY_TIMEOUT} milliseconds for a given
* dialog class to be displayed. If the waiting time is exceeded an
* assertion error is thrown.
*
* @param dialogClass dialog class
*/
protected void assertComponentDisplayed(Class<? extends Component> componentClass) {
Pause.pause(new ComponentFoundCondition("component to be displayed",
BasicComponentFinder.finderWithCurrentAwtHierarchy(),
new TypeMatcher(componentClass, true)),
DISPLAY_TIMEOUT);
}
/**
* Gets a dialog button with the specified text.
*
* @param buttonText button text
*
* @return the button fixture
*/
protected JButtonFixture getButton(final String buttonText) {
JButtonFixture button = windowFixture.button(new GenericTypeMatcher<JButton>(JButton.class) {
@Override
protected boolean isMatching(JButton component) {
return buttonText.equals(component.getText());
}
});
assertNotNull(button);
return button;
}
}