/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2005-2008, 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.gui.swing; // J2SE dependencies import java.util.Locale; import java.awt.Component; import java.awt.HeadlessException; import javax.swing.JFrame; // JUnit dependencies import junit.framework.Test; import junit.framework.TestCase; // Geotools dependencies import org.geotools.resources.Arguments; import org.geotools.resources.Classes; /** * Base class for test on widgets. Widgets will be displayed only if the test is run * from the main method. Otherwise (i.e. if run from Maven), widgets are invisibles. * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux */ public class TestBase extends TestCase { /** * Set to {@code true} if windows should be visible. */ private static boolean display; /** * The location of the next frame to show. */ private static volatile int location = 60; /** * Creates a new instance of {@code TestBase}. */ public TestBase(final String name) { super(name); } /** * Run the test case from the command line. This method should be invoked * from the {@code main} method in subclasses. */ protected static void main(String[] args, final Test suite) { display = true; final Arguments arguments = new Arguments(args); args = arguments.getRemainingArguments(0); Locale.setDefault(arguments.locale); junit.textui.TestRunner.run(suite); } /** * Show a component in a frame. The component will be shown only if the test suite * is executed from the {@link #main main} method. * * @param component The component to show. */ protected static void show(final Component component) { show(component, Classes.getShortClassName(component)); } /** * Show a component in a frame. The component will be shown only if the test suite * is executed from the {@link #main main} method. * * @param component The component to show. * @param title The window title. */ protected static void show(final Component component, final String title) { if (display) try { final JFrame frame = new JFrame(title); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.getContentPane().add(component); frame.setLocation(location, location); frame.pack(); frame.setVisible(true); location += 30; if (false) try { Thread.sleep(500); } catch (InterruptedException exception) { // Ignore } } catch (HeadlessException exception) { // The test is running on a machine without display. Ignore. } } }