Package org.geotools.swing.dialog

Source Code of org.geotools.swing.dialog.JAboutDialogTest

/*
*    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.dialog;

import java.awt.Dialog;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.util.List;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JTextArea;

import org.geotools.factory.GeoTools;
import org.geotools.swing.testutils.GraphicsTestBase;
import org.geotools.swing.testutils.GraphicsTestRunner;

import org.fest.swing.core.GenericTypeMatcher;
import org.fest.swing.edt.GuiActionRunner;
import org.fest.swing.edt.GuiQuery;
import org.fest.swing.fixture.DialogFixture;
import org.fest.swing.fixture.JButtonFixture;
import org.fest.swing.fixture.JTextComponentFixture;

import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;

/**
* Tests for the {@linkplain JAboutDialog} class.
*
* @author Michael Bedward
* @since 8.0
* @source $URL$
* @version $Id$
*/
@RunWith(GraphicsTestRunner.class)
public class JAboutDialogTest extends GraphicsTestBase<Dialog> {
   
    private static final String DIALOG_TITLE = "About dialog test";
    private static final String APP_INFO = "GeoFoo: mapping Foos in real time";
   
    private boolean showAppInfo;
   
    @Test
    public void dialogWithoutApplicationInfo() throws Exception {
        createAndShow(false);
       
        assertEquals(DIALOG_TITLE, windowFixture.component().getTitle());
        assertCategories();
       
        // should be showing 'Environment' category
        String[] selection = windowFixture.list().selection();
        assertEquals(1, selection.length);
        assertEquals(JAboutDialog.Category.ENVIRONMENT.toString(), selection[0]);
    }

    @Test
    public void dialogWithApplicationInfo() throws Exception {
        createAndShow(true);
       
        assertEquals(DIALOG_TITLE, windowFixture.component().getTitle());
        assertCategories();
       
        // should be showing 'Application' category
        String[] selection = windowFixture.list().selection();
        assertEquals(1, selection.length);
        assertEquals(JAboutDialog.Category.APPLICATION.toString(), selection[0]);
    }
   
    @Test
    public void ensureTextAreaIsDisplayed() {
        createAndShow(false);
        JTextComponentFixture textArea = getDialogTextArea();
        assertNotNull(textArea);
        textArea.requireVisible();
    }
   
    @Test
    public void applicationInfo() {
        createAndShow(true);
        assertTextDisplayExact(JAboutDialog.Category.APPLICATION, APP_INFO);
    }
   
    @Test
    public void environmentInfo() {
        createAndShow(false);
        assertTextDisplayExact(JAboutDialog.Category.ENVIRONMENT, GeoTools.getEnvironmentInfo());
    }
   
    @Ignore("Licence info not implemented by dialog yet")
    @Test
    public void licenceInfo() {
        createAndShow(false);
       
    }
   
    @Test
    public void jarInfo() {
        createAndShow(false);
        assertTextDisplayExact(JAboutDialog.Category.JARS, GeoTools.getGeoToolsJarInfo());
    }
   
    @Test
    public void allInfo() {
        createAndShow(true);
        assertTextDisplayContains(JAboutDialog.Category.ALL, new String[] {
            APP_INFO,
            GeoTools.getEnvironmentInfo(),
            GeoTools.getGeoToolsJarInfo()
        });
    }
               
    @Test
    public void copyToClipboard() throws Exception {
        createAndShow(true);
       
       
        JButtonFixture button = windowFixture.button(new GenericTypeMatcher<JButton>(JButton.class) {
            @Override
            protected boolean isMatching(JButton component) {
                return "Copy to clipboard".equals(component.getText());
            }
        });
       
        assertNotNull(button);
       
        windowFixture.list().clickItem(JAboutDialog.Category.ALL.toString());
        windowFixture.robot.waitForIdle();
        button.click();
        windowFixture.robot.waitForIdle();
       
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        String clipText = (String) clip.getData(DataFlavor.stringFlavor);
       
        String expected = getDialogTextArea().text();
        assertEquals(expected, clipText);
    }

    private void createAndShow(final boolean showAppInfo) {
        this.showAppInfo = showAppInfo;
        JAboutDialog dialog = GuiActionRunner.execute(new GuiQuery<JAboutDialog>() {
            @Override
            protected JAboutDialog executeInEDT() throws Throwable {
                JAboutDialog dialog;
                if (showAppInfo) {
                    dialog = new JAboutDialog(DIALOG_TITLE, APP_INFO);
                } else {
                    dialog = new JAboutDialog(DIALOG_TITLE);
                }
                return dialog;
            }
        });

        windowFixture = new DialogFixture(dialog);
        ((DialogFixture) windowFixture).show();
    }
   
    private JTextComponentFixture getDialogTextArea() {
        return windowFixture.textBox(new GenericTypeMatcher<JTextArea>(JTextArea.class, true) {

            @Override
            protected boolean isMatching(JTextArea component) {
                return true;
            }
        });
    }
    private void assertCategories() {
        List<String> listItems = Arrays.asList( windowFixture.list().contents() );
       
        int expectedN = JAboutDialog.Category.values().length - (showAppInfo ? 0 : 1);
        assertEquals(expectedN, listItems.size());
       
        for (JAboutDialog.Category cat : JAboutDialog.Category.values()) {
            boolean b = listItems.contains(cat.toString()) ||
                    (cat == JAboutDialog.Category.APPLICATION && !showAppInfo);
            assertTrue("List is missing " + cat.toString(), b);
        }
    }

    private void assertTextDisplayExact(JAboutDialog.Category cat, String expected) {
        windowFixture.list().clickItem(cat.toString());
        windowFixture.robot.waitForIdle();
       
        JTextComponentFixture textArea = getDialogTextArea();
        textArea.requireText(expected);
    }
   
    private void assertTextDisplayContains(JAboutDialog.Category cat, String[] expected) {
        windowFixture.list().clickItem(cat.toString());
        windowFixture.robot.waitForIdle();
       
        JTextComponentFixture textArea = getDialogTextArea();
        final String TEXT = textArea.text();
        for (String s : expected) {
            assertTrue("Did not match " + s, TEXT.contains(s));
        }
    }
   
}
TOP

Related Classes of org.geotools.swing.dialog.JAboutDialogTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.