/* * $Id$ * * Copyright 2004 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.painter; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.hamcrest.CoreMatchers; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; /** * @author rbair */ @SuppressWarnings({"nls", "unchecked", "rawtypes"}) public class CompoundPainterTest extends AbstractPainterTest { /** * {@inheritDoc} */ @Override protected CompoundPainter createTestingPainter() { return new CompoundPainter(); } /** * TODO remove when the compound painter does not start dirty */ private void copyOfSuper_testDefaultsWithCorrectedValues() { assertThat(p.getFilters().length, is(0)); assertThat(p.getInterpolation(), is(AbstractPainter.Interpolation.NearestNeighbor)); assertThat(p.isAntialiasing(), is(true)); assertThat(p.isCacheable(), is(false)); assertThat(p.isCacheCleared(), is(true)); //TODO why does CompoundPainter start dirty? assertThat(p.isDirty(), is(true)); assertThat(p.isInPaintContext(), is(false)); assertThat(p.isVisible(), is(true)); assertThat(p.shouldUseCache(), is(false)); } /** * {@inheritDoc} * <p> * Overridden for CompoundPainter defaults. */ @Test @Override public void testDefaults() { //TODO replace with super.testDefaults() when corrected copyOfSuper_testDefaultsWithCorrectedValues(); // super.testDefaults(); CompoundPainter cp = (CompoundPainter) p; assertThat(cp.getPainters(), is(new Painter[0])); assertThat(cp.getTransform(), is(nullValue())); assertThat(cp.isCheckingDirtyChildPainters(), is(true)); assertThat(cp.isClipPreserved(), is(false)); } /** * Issue #497-swingx: setPainters can't cope with null. * */ @Test public void testSetNullPainters() { CompoundPainter<Object> painter = new CompoundPainter<Object>(); // changed to cast to Painter, since uncasted it is equivalent to // Painter[], which is checked in the next test painter.setPainters((Painter<?>) null); } /** * Issue #497-swingx: setPainters can't cope with null. * */ @Test public void testSetEmptyPainters() { CompoundPainter<Object> painter = new CompoundPainter<Object>(); // okay painter.setPainters(); // fails painter.setPainters((Painter[]) null); } @Test public void testSetttingOnePainterDoesNotEnableCache() { ((CompoundPainter) p).setPainters(mock(Painter.class)); assertThat(p.shouldUseCache(), is(false)); } @Test @Ignore("not sure this is the right thing to do") public void testSettingMoreThanOnePainterEnablesCache() { ((CompoundPainter) p).setPainters(mock(Painter.class), mock(Painter.class)); assertThat(p.shouldUseCache(), is(true)); } /** * Issue #1218-swingx: must fire property change if contained painter * changed. */ public void testDirtyNotification() { AbstractPainter<Object> child = spy(new DummyPainter()); ((CompoundPainter<?>) p).setPainters(child); assertThat(p.isDirty(), is(true)); verify(child, never()).setDirty(true); p.paint(g, null, 10, 10); assertThat(p.isDirty(), is(false)); PropertyChangeListener pcl = mock(PropertyChangeListener.class); p.addPropertyChangeListener(pcl); child.setDirty(true); assertThat(p.isDirty(), is(true)); ArgumentCaptor<PropertyChangeEvent> captor = ArgumentCaptor.forClass(PropertyChangeEvent.class); verify(pcl).propertyChange(captor.capture()); assertThat(captor.getValue().getSource(), CoreMatchers.<Object>is(sameInstance(p))); assertThat(captor.getValue().getPropertyName(), is("dirty")); assertThat(captor.getAllValues().size(), is(1)); } }