/*
* $Id$
*
* Copyright 2006 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.renderer;
import java.awt.Color;
import java.awt.Component;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.logging.Logger;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.border.Border;
import org.jdesktop.swingx.InteractiveTestCase;
import org.jdesktop.swingx.test.XTestUtils;
import org.jdesktop.test.SerializableSupport;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Tests behaviour of SwingX renderers. Currently: mostly characterization to
* guarantee that they behave similar to the standard.
*
* @author Jeanette Winzenburg
*/
@RunWith(JUnit4.class)
public class ListRendererTest extends InteractiveTestCase {
private static final Logger LOG = Logger.getLogger(ListRendererTest.class
.getName());
private DefaultListCellRenderer coreListRenderer;
private DefaultListRenderer xListRenderer;
private JList list;
@Before
public void setUpJ4() throws Exception {
setUp();
}
@After
public void tearDownJ4() throws Exception {
tearDown();
}
@Override
protected void setUp() throws Exception {
list = new JList(new Object[] {1, 2, 3});
coreListRenderer = new DefaultListCellRenderer();
xListRenderer = new DefaultListRenderer();
}
/**
* Test constructors: here convenience with alignment and converter
*
*/
@Test
public void testConstructor() {
FormatStringValue sv = new FormatStringValue(DateFormat.getTimeInstance());
int align = JLabel.RIGHT;
DefaultListRenderer renderer = new DefaultListRenderer(sv, align);
assertEquals(sv, renderer.componentController.getStringValue());
assertEquals(align, renderer.componentController.getHorizontalAlignment());
}
/**
* test if default icon/text handling in DefaultListRenderer
* is the same as core default.
*
*/
@Test
public void testIcon() {
Icon icon = XTestUtils.loadDefaultIcon();
String text = "dummy";
JList list = new JList(new Object[] {icon, text});
coreListRenderer.getListCellRendererComponent(list, icon, 0, false, false);
JLabel label = (JLabel) xListRenderer.getListCellRendererComponent(null, icon, 0, false, false);
assertEquals("sanity: core shows icon", icon, coreListRenderer.getIcon());
assertEquals("sanity: core shows empty string", "", coreListRenderer.getText());
assertEquals("swingx renderer same icon as core", coreListRenderer.getIcon(), label.getIcon());
assertEquals("swingx renderer same text as core", coreListRenderer.getText(), label.getText());
coreListRenderer.getListCellRendererComponent(list, text, 1, false, false);
label = (JLabel) xListRenderer.getListCellRendererComponent(null, text, 1, false, false);
assertNull("sanity: core has null icon", coreListRenderer.getIcon());
assertEquals("sanity: core shows text", text, coreListRenderer.getText());
assertEquals("swingx renderer same same icon as core", coreListRenderer.getIcon(), label.getIcon());
assertEquals("swingx renderer same text as core", coreListRenderer.getText(), label.getText());
}
/**
* test serializable of default renderer.
*
*/
@Test
public void testSerializeListRenderer() {
ListCellRenderer xListRenderer = new DefaultListRenderer();
try {
SerializableSupport.serialize(xListRenderer);
} catch (Exception e) {
fail("not serializable " + e);
}
}
/**
* base interaction with list: focused, not-selected uses UI border.
*/
@Test
public void testListFocusSelectedBorder() {
// access ui border
Border selectedFocusBorder = getFocusBorder(true);
// sanity
if (selectedFocusBorder == null) {
LOG.info("cannot run focusSelectedBorder - UI has no selected focus border");
return;
}
// need to prepare directly - focus is true only if list is focusowner
JComponent coreComponent = (JComponent) coreListRenderer.getListCellRendererComponent(list,
null, 0, true, true);
// sanity: known standard behaviour
assertEquals(selectedFocusBorder, coreComponent.getBorder());
// prepare extended
JComponent xComponent = (JComponent) xListRenderer.getListCellRendererComponent(list,
null, 0, true, true);
// assert behaviour same as standard
assertEquals(coreComponent.getBorder(), xComponent.getBorder());
}
/**
* Returns the focus border as registered in the UIManager or null no border found.
*
* @param lookup if true, tries fallback with more common key.
* @return focusBorder as registered in the UIManagar, or null if no border found.
*/
private Border getFocusBorder(boolean lookup) {
Border selectedFocusBorder = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
if (lookup && (selectedFocusBorder == null)) {
selectedFocusBorder = UIManager.getBorder("List.focusCellHighlightBorder");
}
return selectedFocusBorder;
}
/**
* base interaction with list: focused, not-selected uses UI border.
*
*/
@Test
public void testListFocusBorder() {
// access ui colors
Border focusBorder = UIManager.getBorder("List.focusCellHighlightBorder");
if (focusBorder == null) {
LOG.info("cannot run test - ui has no special border for focused list cell");
return;
}
// need to prepare directly - focus is true only if list is focusowner
JComponent coreComponent = (JComponent) coreListRenderer.getListCellRendererComponent(list,
null, 0, false, true);
// sanity: known standard behaviour
assertEquals(focusBorder, coreComponent.getBorder());
// prepare extended
JComponent xComponent = (JComponent) xListRenderer.getListCellRendererComponent(list,
null, 0, false, true);
// assert behaviour same as standard
assertEquals(coreComponent.getBorder(), xComponent.getBorder());
}
/**
* base interaction with table: custom color of renderer precedes
* table color.
*
*/
@Test
public void testListRendererExtCustomColor() {
Color background = Color.MAGENTA;
Color foreground = Color.YELLOW;
// // prepare standard - not applicable for core default list renderer
// coreListRenderer.setBackground(background);
// coreListRenderer.setForeground(foreground);
// Component coreComponent = coreListRenderer.getListCellRendererComponent(list,
// null, 0, false, false);
// prepare extended
xListRenderer.setBackground(background);
xListRenderer.setForeground(foreground);
Component xComponent = xListRenderer.getListCellRendererComponent(list,
null, 0, false, false);
// assert behaviour same as standard
assertEquals(background, xComponent.getBackground());
assertEquals(foreground, xComponent.getForeground());
}
/**
* base interaction with list: renderer uses list's selection color.
*
*/
@Test
public void testListRendererExtSelectedColors() {
// select first row
list.setSelectedIndex(0);
// prepare standard
Component coreComponent = coreListRenderer.getListCellRendererComponent(list,
null, 0, true, false);
// sanity: known standard behaviour
assertEquals(list.getSelectionBackground(), coreComponent.getBackground());
assertEquals(list.getSelectionForeground(), coreComponent.getForeground());
// prepare extended
Component xComponent = xListRenderer.getListCellRendererComponent(list,
null, 0, true, false);
// assert behaviour same as standard
assertEquals(coreComponent.getBackground(), xComponent.getBackground());
assertEquals(coreComponent.getForeground(), xComponent.getForeground());
}
/**
* base interaction with list: renderer uses list's custom selection color.
*
*/
@Test
public void testListRendererExtListSelectedColors() {
Color background = Color.MAGENTA;
Color foreground = Color.YELLOW;
list.setSelectionBackground(background);
list.setSelectionForeground(foreground);
// select first row
list.setSelectedIndex(0);
// prepare standard
Component coreComponent = coreListRenderer.getListCellRendererComponent(list,
null, 0, true, false);
// sanity: known standard behaviour
assertEquals(list.getSelectionBackground(), coreComponent.getBackground());
assertEquals(list.getSelectionForeground(), coreComponent.getForeground());
// prepare extended
Component xComponent = xListRenderer.getListCellRendererComponent(list,
null, 0, true, false);
// assert behaviour same as standard
assertEquals(coreComponent.getBackground(), xComponent.getBackground());
assertEquals(coreComponent.getForeground(), xComponent.getForeground());
}
/**
* base interaction with list: renderer uses list's unselected custom colors
*
*
*/
@Test
public void testListRendererExtListColors() {
Color background = Color.MAGENTA;
Color foreground = Color.YELLOW;
list.setBackground(background);
list.setForeground(foreground);
// prepare standard
Component coreComponent = coreListRenderer.getListCellRendererComponent(list,
null, 0, false, false);
// sanity: known standard behaviour
assertEquals(list.getBackground(), coreComponent.getBackground());
assertEquals(list.getForeground(), coreComponent.getForeground());
// prepare extended
Component xComponent = xListRenderer.getListCellRendererComponent(list,
null, 0, false, false);
// assert behaviour same as standard
assertEquals(coreComponent.getBackground(), xComponent.getBackground());
assertEquals(coreComponent.getForeground(), xComponent.getForeground());
}
/**
* base interaction with list: renderer uses list's unselected colors
*
*
*/
@Test
public void testListRendererExtColors() {
// prepare standard
Component coreComponent = coreListRenderer.getListCellRendererComponent(list,
null, 0, false, false);
// sanity: known standard behaviour
assertEquals(list.getBackground(), coreComponent.getBackground());
assertEquals(list.getForeground(), coreComponent.getForeground());
// prepare extended
Component xComponent = xListRenderer.getListCellRendererComponent(list,
null, 0, false, false);
// assert behaviour same as standard
assertEquals(coreComponent.getBackground(), xComponent.getBackground());
assertEquals(coreComponent.getForeground(), xComponent.getForeground());
}
/**
* characterize opaqueness of rendering components.
*
*/
@Test
public void testListOpaqueRenderer() {
// sanity
assertFalse(new JLabel().isOpaque());
assertTrue(coreListRenderer.isOpaque());
// assertTrue(xListRenderer.getRendererComponent().isOpaque());
}
/**
* base existence/type tests while adding DefaultTableCellRendererExt.
*
*/
@Test
public void testListRendererExt() {
DefaultListRenderer renderer = new DefaultListRenderer();
assertTrue(renderer instanceof ListCellRenderer);
assertTrue(renderer instanceof Serializable);
}
}