/**
* Copyright 2011-2015 John Ericksen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.androidtransfuse.event;
import org.androidtransfuse.annotations.Observes;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author John Ericksen
*/
public class EventManagerTest {
private EventManager eventManager;
private ObserverTarget target;
private class ObservesEvent{}
private class ObserverTarget{
private ObservesEvent event;
private Object objectEvent;
public void observes(@Observes ObservesEvent event){
this.event = event;
}
public void observes(@Observes Object event){
this.objectEvent = event;
}
public ObservesEvent getEvent() {
return event;
}
public Object getObjectEvent() {
return objectEvent;
}
}
private class TargetEventTriggered implements EventObserver<ObservesEvent>{
private boolean triggered = false;
@Override
public void trigger(ObservesEvent event) {
triggered = true;
}
public boolean isTriggered() {
return triggered;
}
}
@Before
public void setup(){
eventManager = new EventManager();
target = new ObserverTarget();
}
@Test
public void testRegistration(){
registerEvents();
ObservesEvent event = new ObservesEvent();
eventManager.trigger(event);
assertEquals(event, target.getEvent());
assertEquals(event, target.getObjectEvent());
}
@Test
public void testEventHierarchyTrigger(){
registerEvents();
Object event = new Object();
eventManager.trigger(event);
assertNull(target.getEvent());
assertEquals(event, target.getObjectEvent());
}
@Test
public void testUnregister(){
TargetEventTriggered trigger = new TargetEventTriggered();
eventManager.register(ObservesEvent.class, trigger);
eventManager.unregister(trigger);
eventManager.trigger(new ObservesEvent());
assertFalse(trigger.isTriggered());
}
private void registerEvents(){
eventManager.register(ObservesEvent.class, new EventObserver<ObservesEvent>() {
@Override
public void trigger(ObservesEvent event) {
target.observes(event);
}
});
eventManager.register(Object.class, new EventObserver<Object>() {
@Override
public void trigger(Object event) {
target.observes(event);
}
});
}
}