swingx-master/swingx-core/src/test/java/org/jdesktop/swingx/GTKTest.java
/*
 * Created on 04.11.2010
 *
 */
package org.jdesktop.swingx;

import java.awt.GraphicsEnvironment;
import java.util.logging.Logger;

import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.Border;

import org.jdesktop.swingx.plaf.SafeBorder;
import org.jdesktop.test.AncientSwingTeam;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

/**
 * GTK specific tests. Will be blind on non-linux OS.
 * 
 * @author Jeanette Winzenburg, Berlin
 */
@RunWith(JUnit4.class)
public class GTKTest extends InteractiveTestCase {
    
    String[] borderKeys = {"focusCellHighlightBorder", "focusSelectedCellHighlightBorder", 
            "noFocusBorder"};
    
    static boolean hasGTK; 
    
    @Test
    public void testUninstallBorder() throws Exception {
        if (!hasGTK) {
            LOG.info("couldn't install GTK, is " + UIManager.getLookAndFeel());
            return;
        }
        LookAndFeel old = UIManager.getLookAndFeel();
        try {
            setLookAndFeel("Metal");
            Border border = UIManager.getBorder("Table." + borderKeys[0]);
            assertFalse(border instanceof SafeBorder);
        } finally {
            UIManager.setLookAndFeel(old);
        }
    }
    
    @Test
    public void testSafeBordersInstalledTable() {
        if (!hasGTK) {
            LOG.info("couldn't install GTK, is " + UIManager.getLookAndFeel());
            return;
        }
        for (String borderKey : borderKeys) {
            assertSafeBorder("Table.", borderKey);
        }
    }
    
    @Test
    public void testSafeBordersInstalledList() {
        if (!hasGTK) {
            LOG.info("couldn't install GTK, is " + UIManager.getLookAndFeel());
            return;
        }
        for (String borderKey : borderKeys) {
            assertSafeBorder("List.", borderKey);
        }
    }
    
    private void assertSafeBorder(String string, String borderKey) {
        Border border = UIManager.getBorder(string + borderKey);
        if (border != null) 
            assertTrue("expected border of type SafeBorder but was: " + border.getClass().getName(),
                border instanceof SafeBorder);
    }

    @SuppressWarnings("unused")
    private static final Logger LOG = Logger.getLogger(GTKTest.class.getName());

    public static void main(String[] args) throws Exception {
        beforeClass();
        GTKTest test = new GTKTest();
        try {
            test.runInteractiveTests();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void interactiveBigEditor() {
        JXTable table = new JXTable(new AncientSwingTeam());
         
        showWithScrollingInFrame(table, "Issue #1297-swingx (GTK core issue) - click last column");
    }

    
    
    @BeforeClass
    public static void beforeClass() {
        // This test will not work in a headless configuration.
        // need to check before trying to install GTK (any LAF?)
        if (GraphicsEnvironment.isHeadless()) {
            LOG.fine("cannot run ui test - headless environment");
            return;
        }
        
        LookAndFeelInfo info = new LookAndFeelInfo("GTK plain",
                "com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        try {
            UIManager.installLookAndFeel(info);
            InteractiveTestCase.setLookAndFeel("GTK");
            hasGTK = true;
            // force loading of addons
            new JXTable();
            new JXList();
            
        } catch (Exception e) {
            // nothing to do - tests will be ignored;
        }
    }
}
