/* * Copyright 2001-2013 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") */ package com.uwyn.rife.tools; import com.uwyn.rife.tools.exceptions.SourceBeanRequiredException; import junit.framework.TestCase; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; public class TestAbstractPropertyChangeSupport extends TestCase { public TestAbstractPropertyChangeSupport(String name) { super(name); } public void testNoInitialListeners() { PropertyChangeTest test = new PropertyChangeTest(); assertEquals(0, test.getPropertyChangeListeners().length); assertEquals(0, test.getPropertyChangeListeners("string").length); assertEquals(0, test.getPropertyChangeListeners("int").length); assertEquals(0, test.getPropertyChangeListeners("boolean").length); assertFalse(test.hasListeners("string")); assertFalse(test.hasListeners("int")); assertFalse(test.hasListeners("boolean")); } public void testNoSource() { PropertyChangeTest test = new PropertyChangeTest(false); PropertyChangeHandler handler = new PropertyChangeHandler(); try { test.addPropertyChangeListener(handler); fail(); } catch (SourceBeanRequiredException e) { assertSame(e.getBeanClass(), PropertyChangeTest.class); } } public void testListeners() { PropertyChangeTest test = new PropertyChangeTest(); PropertyChangeHandler handler1 = new PropertyChangeHandler(); PropertyChangeHandler handler2 = new PropertyChangeHandler(); PropertyChangeHandler handler3 = new PropertyChangeHandler(); PropertyChangeHandler handler4 = new PropertyChangeHandler(); PropertyChangeHandler handler5 = new PropertyChangeHandler(); PropertyChangeHandler handler6 = new PropertyChangeHandler(); PropertyChangeHandler handler7 = new PropertyChangeHandler(); test.addPropertyChangeListener(handler1); test.addPropertyChangeListener("string", handler2); test.addPropertyChangeListener("int", handler3); test.addPropertyChangeListener("int", handler4); test.addPropertyChangeListener("boolean", handler5); test.addPropertyChangeListener("boolean", handler6); test.addPropertyChangeListener("boolean", handler7); assertEquals(7, test.getPropertyChangeListeners().length); assertEquals(1, test.getPropertyChangeListeners("string").length); assertEquals(2, test.getPropertyChangeListeners("int").length); assertEquals(3, test.getPropertyChangeListeners("boolean").length); assertTrue(test.hasListeners("string")); assertTrue(test.hasListeners("int")); assertTrue(test.hasListeners("boolean")); test.removePropertyChangeListener(handler1); test.removePropertyChangeListener("string", handler2); test.removePropertyChangeListener("int", handler3); test.removePropertyChangeListener("int", handler4); test.removePropertyChangeListener("boolean", handler5); test.removePropertyChangeListener("boolean", handler6); test.removePropertyChangeListener("boolean", handler7); assertEquals(0, test.getPropertyChangeListeners().length); assertEquals(0, test.getPropertyChangeListeners("string").length); assertEquals(0, test.getPropertyChangeListeners("int").length); assertEquals(0, test.getPropertyChangeListeners("boolean").length); assertFalse(test.hasListeners("string")); assertFalse(test.hasListeners("int")); assertFalse(test.hasListeners("boolean")); } public void testFirePropertyChange() { PropertyChangeTest test = new PropertyChangeTest(); PropertyChangeHandler handler1 = new PropertyChangeHandler(); PropertyChangeHandler handler2 = new PropertyChangeHandler(); PropertyChangeHandler handler3 = new PropertyChangeHandler(); PropertyChangeHandler handler4 = new PropertyChangeHandler(); test.addPropertyChangeListener(handler1); test.addPropertyChangeListener("string", handler2); test.addPropertyChangeListener("int", handler3); test.addPropertyChangeListener("boolean", handler4); assertNull(handler1.getEvent()); assertNull(handler2.getEvent()); assertNull(handler3.getEvent()); assertNull(handler4.getEvent()); PropertyChangeEvent handler1_event; PropertyChangeEvent handler2_event; PropertyChangeEvent handler3_event; PropertyChangeEvent handler4_event; test.setString("one"); assertNotNull(handler1.getEvent()); handler1_event = handler1.getEvent(); assertEquals("string", handler1_event.getPropertyName()); assertNull(handler1_event.getOldValue()); assertEquals("one", handler1_event.getNewValue()); assertNotNull(handler2.getEvent()); handler2_event = handler2.getEvent(); assertEquals("string", handler2_event.getPropertyName()); assertNull(handler2_event.getOldValue()); assertEquals("one", handler2_event.getNewValue()); test.setInt(2); assertNotNull(handler1.getEvent()); assertNotSame(handler1_event, handler1.getEvent()); handler1_event = handler1.getEvent(); assertEquals("int", handler1_event.getPropertyName()); assertEquals(-1, handler1_event.getOldValue()); assertEquals(2, handler1_event.getNewValue()); assertSame(handler2_event, handler2.getEvent()); assertNotNull(handler3.getEvent()); handler3_event = handler3.getEvent(); assertEquals("int", handler3_event.getPropertyName()); assertEquals(-1, handler3_event.getOldValue()); assertEquals(2, handler3_event.getNewValue()); test.setBoolean(true); assertNotNull(handler1.getEvent()); assertNotSame(handler1_event, handler1.getEvent()); handler1_event = handler1.getEvent(); assertEquals("boolean", handler1_event.getPropertyName()); assertEquals(false, handler1_event.getOldValue()); assertEquals(true, handler1_event.getNewValue()); assertSame(handler2_event, handler2.getEvent()); assertSame(handler3_event, handler3.getEvent()); assertNotNull(handler4.getEvent()); handler4_event = handler4.getEvent(); assertEquals("boolean", handler4_event.getPropertyName()); assertEquals(false, handler4_event.getOldValue()); assertEquals(true, handler4_event.getNewValue()); test.customEvent(); assertNotNull(handler1.getEvent()); assertNotSame(handler1_event, handler1.getEvent()); handler1_event = handler1.getEvent(); assertEquals("blah", handler1_event.getPropertyName()); assertEquals("first", handler1_event.getOldValue()); assertEquals("second", handler1_event.getNewValue()); assertSame(handler2_event, handler2.getEvent()); assertSame(handler3_event, handler3.getEvent()); assertSame(handler4_event, handler4.getEvent()); } public void testClone() { PropertyChangeTest test1 = new PropertyChangeTest(); test1.setInt(1); PropertyChangeHandler handler = new PropertyChangeHandler(); test1.addPropertyChangeListener(handler); assertEquals(1, test1.getPropertyChangeListeners().length); PropertyChangeTest test2 = (PropertyChangeTest)test1.clone(); assertEquals(0, test2.getPropertyChangeListeners().length); } } class PropertyChangeTest extends AbstractPropertyChangeSupport { private String mString = null; private int mInt = -1; private boolean mBoolean = false; public PropertyChangeTest() { this(true); } public PropertyChangeTest(boolean registerSource) { if (registerSource) { setSource(this); } } public void customEvent() { firePropertyChange(new PropertyChangeEvent(this, "blah", "first", "second")); } public String getString() { return mString; } public void setString(String value) { String old = mString; mString = value; firePropertyChange("string", old, value); } public int getInt() { return mInt; } public void setInt(int value) { int old = mInt; mInt = value; firePropertyChange("int", old, value); } public boolean isBoolean() { return mBoolean; } public void setBoolean(boolean value) { boolean old = mBoolean; mBoolean = value; firePropertyChange("boolean", old, value); } } class PropertyChangeHandler implements PropertyChangeListener { private PropertyChangeEvent mEvent = null; public void propertyChange(PropertyChangeEvent event) { mEvent = event; } public PropertyChangeEvent getEvent() { return mEvent; } }