/*******************************************************************************
* Copyright (c) 2012, 2014 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.swt.internal.events;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import org.eclipse.rap.rwt.internal.service.ContextProvider;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class EventList_Test {
private static final int EARLY_TIME = 1;
private static final int LATE_TIME = 100;
private static final int FIRST_EVENT = 1;
private static final int SECOND_EVENT = 2;
private static final int UNKNOWN_EVENT = 47;
private EventList eventList;
@Before
public void setUp() {
Fixture.setUp();
eventList = new EventList( new int[] { FIRST_EVENT, SECOND_EVENT } );
}
@After
public void tearDown() {
Fixture.tearDown();
}
@Test
public void testAdd() {
Event event = creatEvent( SWT.Arm );
eventList.add( event );
Event[] events = eventList.getAll();
assertEquals( 1, events.length );
assertSame( event, events[ 0 ] );
}
@Test
public void testGetAll() {
Event secondEvent = creatEvent( SECOND_EVENT );
eventList.add( secondEvent );
Event firstEvent = creatEvent( FIRST_EVENT );
eventList.add( firstEvent );
Event[] events = eventList.getAll();
assertEquals( 2, events.length );
assertSame( firstEvent, events[ 0 ] );
assertSame( secondEvent, events[ 1 ] );
}
@Test
public void testGetAllWithUnknownEventType() {
Event unknownEvent = creatEvent( UNKNOWN_EVENT );
eventList.add( unknownEvent );
Event knownEvent = creatEvent( SECOND_EVENT );
eventList.add( knownEvent );
Event[] events = eventList.getAll();
assertEquals( 2, events.length );
assertSame( knownEvent, events[ 0 ] );
assertSame( unknownEvent, events[ 1 ] );
}
@Test
public void testGetAllWithSameEventType() {
Event lateEvent = creatEvent( FIRST_EVENT );
lateEvent.time = LATE_TIME;
Event earlyEvent = creatEvent( FIRST_EVENT );
earlyEvent.time = EARLY_TIME;
eventList.add( lateEvent );
eventList.add( earlyEvent );
Event[] events = eventList.getAll();
assertEquals( 2, events.length );
assertSame( earlyEvent, events[ 0 ] );
assertSame( lateEvent, events[ 1 ] );
}
@Test
public void testRemoveExistingEvent() {
Event event = creatEvent( FIRST_EVENT );
eventList.add( event );
eventList.remove( event );
assertEquals( 0, eventList.getAll().length );
}
@Test
public void testRemoveNonExistingEvent() {
Event event = creatEvent( FIRST_EVENT );
eventList.remove( event );
assertEquals( 0, eventList.getAll().length );
}
@Test
public void testRemoveEventWithNullArgument() {
try {
eventList.remove( null );
fail();
} catch( NullPointerException expected ) {
}
}
@Test
public void testGetInstance() {
EventList instance = EventList.getInstance();
assertNotNull( instance );
}
@Test
public void testGetInstanceReturnsSame() {
EventList instance1 = EventList.getInstance();
EventList instance2 = EventList.getInstance();
assertSame( instance1, instance2 );
}
@Test
public void testGetInstanceHasRequestScope() {
EventList instance1 = EventList.getInstance();
simulateNewRequest();
EventList instance2 = EventList.getInstance();
assertNotSame( instance1, instance2 );
}
private Event creatEvent( int eventType ) {
Event result = new Event();
result.type = eventType;
return result;
}
private static void simulateNewRequest() {
ContextProvider.releaseContextHolder();
Fixture.createServiceContext();
}
}