swingx-master/swingx-core/src/test/java/org/jdesktop/swingx/plaf/WindowsLookAndFeelAddonIssues.java
/*
 * $Id$
 *
 * Copyright 2009 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 *
 * 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; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * 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.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */
package org.jdesktop.swingx.plaf;

import java.util.logging.Logger;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.jdesktop.swingx.InteractiveTestCase;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.util.OS;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

/**
 * Test related to WindowsLookAndFeelAddons.
 * 
 * @author Jeanette Winzenburg
 */
@RunWith(JUnit4.class)
public class WindowsLookAndFeelAddonIssues extends InteractiveTestCase {

    @SuppressWarnings("unused")
    private static final Logger LOG = Logger
            .getLogger(WindowsLookAndFeelAddonIssues.class.getName());
    
    /**
     * Issue #1305-swingx: popup closing must not consume mousePressed.
     * 
     * It's a core issue (#6753637) which is easily fixed by setting 
     * the ui property. Test if it's done. 
     * 
     * Reverted: different native behaviour of combos vs standalone popups. A 
     * single ui property can serve one of those only, core opted for combos.
     * Should be consistent.
     * 
     * @throws UnsupportedLookAndFeelException 
     */
    @Test
    public void testWindowsNotConsumeEventOnClose() throws Exception {
        if (!OS.isWindows()) {
            LOG.fine("not on windows, can run windowsLAF specific test");
            return;
        }
        LookAndFeel old = UIManager.getLookAndFeel();
        assertTrue(LookAndFeelAddons.isTrackingLookAndFeelChanges());
        try {
            setLookAndFeel("Windows");
            assertEquals(Boolean.FALSE, UIManager.get("PopupMenu.consumeEventOnClose"));
            setLookAndFeel("Motif");
            assertEquals(Boolean.TRUE, UIManager.get("PopupMenu.consumeEventOnClose"));
        } finally {
            UIManager.setLookAndFeel(old);
        }
    }
    
    
 
//--------------------- interactive 
 
    
    public static void main(String[] args) {
        WindowsLookAndFeelAddonIssues test = new WindowsLookAndFeelAddonIssues();
        try {
            test.runInteractiveTests();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * Issue #1305-swingx: popup closing must not consume mousePressed.
     * 
     * Most visible effect: combo editor in table - open editor, click
     * somewhere else, edit must be terminated (for windows and metal)
     */
    public void interactivePopupNotConsumesOnPressed() {
        JXTable table = new JXTable(10, 6);
        JComboBox box = new JComboBox(new Object[] {1, 2, 3});
        table.getColumn(0).setCellEditor(new DefaultCellEditor(box));
        showWithScrollingInFrame(table, "combo editor in first");
    }
}
