/******************************************************************************* * Copyright (c) 2006 Mountainminds GmbH & Co. KG * This software is provided under the terms of the Eclipse Public License v1.0 * See http://www.eclipse.org/legal/epl-v10.html. * * $Id$ ******************************************************************************/ package com.mountainminds.eclemma.internal.core; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; import com.mountainminds.eclemma.core.ICoverageSession; import com.mountainminds.eclemma.core.IInstrumentation; import com.mountainminds.eclemma.core.ISessionListener; import com.mountainminds.eclemma.core.ISessionManager; /** * @author Marc R. Hoffmann * @version $Revision$ */ public class SessionManagerTest extends TestCase { protected ISessionManager manager; protected ISessionListener listener; protected ISessionListener reflistener; protected void setUp() throws Exception { manager = new SessionManager(); listener = new RecordingListener(); manager.addSessionListener(listener); reflistener = new RecordingListener(); } public void testAddSession1() { ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); ICoverageSession s2 = new DummySession(); manager.addSession(s0, false, null); manager.addSession(s1, false, null); manager.addSession(s2, false, null); ICoverageSession[] sessions = manager.getSessions(); assertEquals(3, sessions.length); assertSame(s0, sessions[0]); assertSame(s1, sessions[1]); assertSame(s2, sessions[2]); assertNull(manager.getActiveSession()); } public void testAddSession2() { ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); ICoverageSession s2 = new DummySession(); manager.addSession(s0, false, null); manager.addSession(s1, true, null); manager.addSession(s2, false, null); ICoverageSession[] sessions = manager.getSessions(); assertEquals(3, sessions.length); assertSame(s0, sessions[0]); assertSame(s1, sessions[1]); assertSame(s2, sessions[2]); assertSame(s1, manager.getActiveSession()); } public void testAddSession3() { ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, null); manager.addSession(s1, true, null); reflistener.sessionAdded(s0); reflistener.sessionAdded(s1); reflistener.sessionActivated(s1); assertEquals(reflistener, listener); } public void testAddSession4() { try { manager.addSession(null, false, null); fail("NullPointerException expected."); } catch (NullPointerException npe) { } } public void testRemoveSession1() { ICoverageSession s0 = new DummySession(); manager.addSession(s0, true, null); manager.removeSession(s0); assertEquals(0, manager.getSessions().length); assertNull(manager.getActiveSession()); reflistener.sessionAdded(s0); reflistener.sessionActivated(s0); reflistener.sessionRemoved(s0); reflistener.sessionActivated(null); assertEquals(reflistener, listener); } public void testRemoveSession2() { ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, null); manager.addSession(s1, true, null); manager.removeSession(s1); ICoverageSession[] sessions = manager.getSessions(); assertEquals(1, sessions.length); assertSame(s0, sessions[0]); assertSame(s0, manager.getActiveSession()); reflistener.sessionAdded(s0); reflistener.sessionAdded(s1); reflistener.sessionActivated(s1); reflistener.sessionRemoved(s1); reflistener.sessionActivated(s0); assertEquals(reflistener, listener); } public void testRemoveSession3() { Object key0 = new Object(); Object key1 = new Object(); ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, key0); manager.addSession(s1, true, key1); manager.removeSession(key1); ICoverageSession[] sessions = manager.getSessions(); assertEquals(1, sessions.length); assertSame(s0, sessions[0]); assertSame(s0, manager.getActiveSession()); reflistener.sessionAdded(s0); reflistener.sessionAdded(s1); reflistener.sessionActivated(s1); reflistener.sessionRemoved(s1); reflistener.sessionActivated(s0); assertEquals(reflistener, listener); } public void testRemoveSession4() { Object key0 = new Object(); Object key1 = new Object(); Object key2 = new Object(); ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, key0); manager.addSession(s1, true, key1); manager.removeSession(key2); assertEquals(2, manager.getSessions().length); } public void testRemoveAllSessions1() { ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, null); manager.addSession(s1, true, null); manager.removeAllSessions(); assertEquals(0, manager.getSessions().length); assertNull(manager.getActiveSession()); reflistener.sessionAdded(s0); reflistener.sessionAdded(s1); reflistener.sessionActivated(s1); reflistener.sessionRemoved(s0); reflistener.sessionRemoved(s1); reflistener.sessionActivated(null); assertEquals(reflistener, listener); } public void testGetSessions1() { ICoverageSession[] sessions = manager.getSessions(); assertNotNull(sessions); assertEquals(0, sessions.length); } public void testGetSession1() { Object key0 = new Object(); Object key1 = new Object(); Object key2 = new Object(); ICoverageSession s0 = new DummySession(); ICoverageSession s1 = new DummySession(); manager.addSession(s0, false, key0); manager.addSession(s1, false, key1); assertEquals(s0, manager.getSession(key0)); assertEquals(s1, manager.getSession(key1)); assertNull(manager.getSession(key2)); } private static class DummySession implements ICoverageSession { public String getDescription() { return toString(); } public IInstrumentation[] getInstrumentations() { return new IInstrumentation[0]; } public IPath[] getCoverageDataFiles() { return new IPath[0]; } public ILaunchConfiguration getLaunchConfiguration() { return null; } public ICoverageSession merge(ICoverageSession other, String description) { return new DummySession(); } public Object getAdapter(Class adapter) { return null; } public String toString() { return "Session@" + System.identityHashCode(this); } } private static class RecordingListener implements ISessionListener { private List l = new ArrayList(); public void sessionAdded(ICoverageSession addedSession) { l.add("ADDED"); l.add(addedSession); } public void sessionRemoved(ICoverageSession removedSession) { l.add("REMOVED"); l.add(removedSession); } public void sessionActivated(ICoverageSession session) { l.add("ACTIVATED"); l.add(session); } public boolean equals(Object obj) { if (obj instanceof RecordingListener) { return l.equals(((RecordingListener) obj).l); } else { return false; } } public int hashCode() { return l.hashCode(); } public String toString() { return l.toString(); } } }