/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This 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 software 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 software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.eventstream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.xwiki.eventstream.Event.Importance; import org.xwiki.eventstream.internal.DefaultEvent; /** * Tests for the {@link EventGroup event group}. * * @version $Id: ea69f6cb38050cbbe7958d83095fa2aced45a29f $ */ public class EventGroupTest { EventGroup g; @Before public void setup() { this.g = new EventGroup(); } @Test public void testConstructors() { Event e = new DefaultEvent(); Assert.assertNotNull(this.g.getEvents()); Assert.assertEquals(0, this.g.getEvents().size()); this.g = new EventGroup(e); Assert.assertEquals(1, this.g.getEvents().size()); Assert.assertTrue(this.g.getEvents().contains(e)); List<Event> l = new ArrayList<Event>(); l.add(e); this.g = new EventGroup(l); Assert.assertEquals(1, this.g.getEvents().size()); Assert.assertTrue(this.g.getEvents().contains(e)); Set<Event> s = new HashSet<Event>(); s.add(e); this.g = new EventGroup(s); Assert.assertEquals(1, this.g.getEvents().size()); Assert.assertTrue(this.g.getEvents().contains(e)); // Test that the internal set is not the same as the passed set s.remove(e); Assert.assertEquals(1, this.g.getEvents().size()); Assert.assertTrue(this.g.getEvents().contains(e)); s.add(new DefaultEvent()); s.add(new DefaultEvent()); Assert.assertEquals(1, this.g.getEvents().size()); this.g = new EventGroup(s); Assert.assertEquals(2, this.g.getEvents().size()); } @Test public void testConstructorsWithNull() { this.g = new EventGroup((List<Event>) null); Assert.assertNotNull(this.g.getEvents()); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g = new EventGroup((Set<Event>) null); Assert.assertNotNull(this.g.getEvents()); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g = new EventGroup((Event[]) null); Assert.assertNotNull(this.g.getEvents()); Assert.assertTrue(this.g.getEvents().isEmpty()); } @Test public void testConstructorsWithNullElements() { List<Event> eventsList = new ArrayList<Event>(); eventsList.add(new DefaultEvent()); eventsList.add(null); eventsList.add(new DefaultEvent()); eventsList.add(new DefaultEvent()); this.g = new EventGroup(eventsList); Assert.assertEquals(3, this.g.getEvents().size()); Set<Event> eventsSet = new HashSet<Event>(); eventsSet.add(new DefaultEvent()); eventsSet.add(null); eventsSet.add(new DefaultEvent()); eventsSet.add(new DefaultEvent()); this.g = new EventGroup(eventsSet); Assert.assertEquals(3, this.g.getEvents().size()); this.g = new EventGroup(new DefaultEvent(), null, new DefaultEvent(), null, new DefaultEvent()); Assert.assertEquals(3, this.g.getEvents().size()); } @Test public void testGetMainEvent() { Event e1 = new DefaultEvent(); e1.setImportance(Importance.BACKGROUND); Event e2 = new DefaultEvent(); e2.setImportance(Importance.MAJOR); Event e3 = new DefaultEvent(); e3.setImportance(Importance.MAJOR); Assert.assertNull(this.g.getMainEvent()); this.g.addEvents(e1); Assert.assertEquals(e1, this.g.getMainEvent()); this.g.addEvents(e2); Assert.assertEquals(e2, this.g.getMainEvent()); this.g.addEvents(e3); Assert.assertEquals(e2, this.g.getMainEvent()); this.g.clearEvents(); Assert.assertNull(this.g.getMainEvent()); this.g.clearEvents(); this.g.addEvents(e3); Assert.assertEquals(e3, this.g.getMainEvent()); this.g.addEvents(e2); Assert.assertEquals(e3, this.g.getMainEvent()); this.g.addEvents(e1); Assert.assertEquals(e3, this.g.getMainEvent()); this.g.clearEvents(); this.g.addEvents(e2); Assert.assertEquals(e2, this.g.getMainEvent()); this.g.addEvents(e3); Assert.assertEquals(e2, this.g.getMainEvent()); this.g.addEvents(e1); Assert.assertEquals(e2, this.g.getMainEvent()); this.g.clearEvents(); this.g.addEvents(e3); Assert.assertEquals(e3, this.g.getMainEvent()); this.g.addEvents(e3); Assert.assertEquals(e3, this.g.getMainEvent()); this.g.addEvents(e2); Assert.assertEquals(e3, this.g.getMainEvent()); } @Test public void testAddEvents() { Assert.assertTrue(this.g.getEvents().isEmpty()); Event e1 = new DefaultEvent(); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.addEvents(e1); Assert.assertFalse(this.g.getEvents().isEmpty()); Assert.assertEquals(1, this.g.getEvents().size()); this.g.addEvents(e1); Assert.assertEquals(1, this.g.getEvents().size()); Event e2 = new DefaultEvent(); this.g.addEvents(e2, e2, e2); Assert.assertEquals(2, this.g.getEvents().size()); this.g.addEvents(e1, e2); Assert.assertEquals(2, this.g.getEvents().size()); Event e3 = new DefaultEvent(); this.g.addEvents(e1, e2, e3); Assert.assertEquals(3, this.g.getEvents().size()); this.g.clearEvents(); Assert.assertEquals(0, this.g.getEvents().size()); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.addEvents(e1, e2, e3); Assert.assertEquals(3, this.g.getEvents().size()); } @Test public void testAddEventsWithNull() { this.g.addEvents((Event) null); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.addEvents(new DefaultEvent()); Assert.assertEquals(1, this.g.getEvents().size()); this.g.addEvents((Event) null); Assert.assertEquals(1, this.g.getEvents().size()); } @Test public void testClearEvents() { Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.addEvents(new DefaultEvent()); this.g.addEvents(new DefaultEvent()); this.g.addEvents(new DefaultEvent()); Assert.assertFalse(this.g.getEvents().isEmpty()); this.g.clearEvents(); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.clearEvents(); Assert.assertTrue(this.g.getEvents().isEmpty()); this.g.addEvents(new DefaultEvent()); Assert.assertFalse(this.g.getEvents().isEmpty()); this.g.clearEvents(); Assert.assertTrue(this.g.getEvents().isEmpty()); } @Test(expected = java.lang.UnsupportedOperationException.class) public void testGetEventsIsReadonly() { this.g.addEvents(new DefaultEvent(), new DefaultEvent()); this.g.getEvents().clear(); Assert.fail("No exception thrown"); } @Test public void testGetEventsIsNotLive() { this.g.addEvents(new DefaultEvent(), new DefaultEvent()); Set<Event> view = this.g.getEvents(); Assert.assertEquals(2, view.size()); this.g.addEvents(new DefaultEvent()); Assert.assertEquals(2, view.size()); } }