/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */ package org.jdesktop.swingx.event; import java.util.logging.Level; import junit.framework.TestCase; /** * implementation of the MessageSourceSupport class. * A JUnit test case for the Message event set. Mostly this tests the */ public class MessageTest extends TestCase { private MListener[] listeners; private PListener[] plisteners; private static final int COUNT = 10; protected void setUp() { listeners = new MListener[COUNT]; plisteners = new PListener[COUNT]; for (int i = 0; i < COUNT; i++) { listeners[i] = new MListener(); plisteners[i] = new PListener(); } } protected void tearDown() { for (int i = 0; i < COUNT; i++) { listeners[i] = null; plisteners[i] = null; } listeners = null; plisteners = null; } public void testMessageRegistration() { MessageSource source = new MessageSourceSupport(this); MessageListener[] ls = source.getMessageListeners(); assertNotNull(ls); assertEquals("Number of listeners not 0", 0, ls.length); // test add and remove methods. // Add listeners. Ensure that they have been added for (int i = 0; i < listeners.length; i++) { source.addMessageListener(listeners[i]); } ls = source.getMessageListeners(); assertEquals(listeners.length, ls.length); // Remove all listenters. for (int i = 0; i < listeners.length; i++) { source.removeMessageListener(listeners[i]); } ls = source.getMessageListeners(); assertEquals(0, ls.length); // test to ensure that null adds and removes have no effect. for (int i = 0; i < COUNT; i++) { source.addMessageListener(null); ls = source.getMessageListeners(); assertEquals(0, ls.length); } // repopulate the message source. for (int i = 0; i < listeners.length; i++) { source.addMessageListener(listeners[i]); } for (int i = 0; i < COUNT; i++) { source.removeMessageListener(null); ls = source.getMessageListeners(); assertEquals(listeners.length, ls.length); } } /** * Test to ensure that messages are dispatched correctly. */ public void testMessageDispatch() { MessageSourceSupport source = new MessageSourceSupport(this); for (int i = 0; i < listeners.length; i++) { source.addMessageListener(listeners[i]); } // Test data. String message = "This is a simple message"; Level level = Level.INFO; long when = System.currentTimeMillis(); MessageEvent evt = null; // Simple test to ensure that all listeners get the same event. source.fireMessage(message); for (int i = 0; i < listeners.length; i++) { evt = listeners[i].getLastEvent(); assertNotNull(evt); assertEquals(message, evt.getMessage()); } source.fireMessage(message, level); for (int i = 0; i < listeners.length; i++) { evt = listeners[i].getLastEvent(); assertNotNull(evt); assertEquals(message, evt.getMessage()); assertEquals(level, evt.getLevel()); } source.fireMessage(message, level, when); for (int i = 0; i < listeners.length; i++) { evt = listeners[i].getLastEvent(); assertNotNull(evt); assertEquals(message, evt.getMessage()); assertEquals(level, evt.getLevel()); assertEquals(when, evt.getWhen()); } evt = new MessageEvent(this, message, level, when); source.fireMessage(evt); for (int i = 0; i < listeners.length; i++) { assertEquals(evt, listeners[i].getLastEvent()); } } /** * Tests the exception passing mechanism. */ public void testExceptions() { MessageSourceSupport source = new MessageSourceSupport(this); for (int i = 0; i < listeners.length; i++) { source.addMessageListener(listeners[i]); } Exception ex = new Exception("This is a message"); MessageEvent evt = null; source.fireException(ex); for (int i = 0; i < listeners.length; i++) { evt = listeners[i].getLastEvent(); assertNotNull(evt); // The event message should be the exception message. assertEquals(ex.getMessage(), evt.getMessage()); // By default, exceptions should be Level.SEVERE assertEquals(Level.SEVERE, evt.getLevel()); } } /** * Test to ensure that progress messages are correctly propagated. */ public void testDeterminteProgress() { MessageSourceSupport source = new MessageSourceSupport(this); ProgressEvent evt = null; // Add listeners. for (int i = 0; i < plisteners.length; i++) { source.addProgressListener(plisteners[i]); } // This is a determinate progress operation source.fireProgressStarted(0, 100); for (int i = 0; i < plisteners.length; i++) { evt = plisteners[i].getLastEvent(); assertFalse(evt.isIndeterminate()); assertTrue(plisteners[i].begin); assertFalse(plisteners[i].end); } source.fireProgressIncremented(50); for (int i = 0; i < plisteners.length; i++) { evt = plisteners[i].getLastEvent(); assertFalse(evt.isIndeterminate()); assertFalse(plisteners[i].begin); assertFalse(plisteners[i].end); } source.fireProgressEnded(); for (int i = 0; i < plisteners.length; i++) { evt = plisteners[i].getLastEvent(); assertTrue(evt.isIndeterminate()); assertFalse(plisteners[i].begin); assertTrue(plisteners[i].end); } } public void testIndeterminteProgress() { MessageSourceSupport source = new MessageSourceSupport(this); ProgressEvent evt = null; // Add listeners. for (int i = 0; i < plisteners.length; i++) { source.addProgressListener(plisteners[i]); } // This is a determinate progress operation source.fireProgressStarted(0, 0); for (int i = 0; i < plisteners.length; i++) { evt = plisteners[i].getLastEvent(); assertTrue(evt.isIndeterminate()); assertTrue(plisteners[i].begin); assertFalse(plisteners[i].end); } } /** * A listener of MessageEvents. */ private class MListener implements MessageListener { private MessageEvent evt; public void message(MessageEvent evt) { this.evt = evt; } public void exception(MessageEvent evt) { this.evt = evt; } public MessageEvent getLastEvent() { return evt; } } private class PListener implements ProgressListener { private ProgressEvent evt; public boolean begin = false; public boolean end = false; public void progressStarted(ProgressEvent e) { this.evt = e; begin = true; end = false; } public void progressIncremented(ProgressEvent e) { this.evt = e; begin = false; end = false; } public void progressEnded(ProgressEvent e) { this.evt = e; begin = false; end = true; } public void exception(ProgressEvent e) { /**@todo what should we do here? */ } public ProgressEvent getLastEvent() { return evt; } } }