blob: 6ab4f1d94185d99230e2ab16c6b8b0e01bcde4c9 [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* 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 com.google.web.bindery.event.shared.testing;
import com.google.web.bindery.event.shared.BarEvent;
import com.google.web.bindery.event.shared.Event.Type;
import com.google.web.bindery.event.shared.EventBusTestBase;
import com.google.web.bindery.event.shared.FooEvent;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.google.web.bindery.event.shared.SimpleEventBus;
/**
* Eponymous unit tests.
*/
public class CountingEventBusTest extends EventBusTestBase {
private CountingEventBus eventBus;
@Override
protected void setUp() throws Exception {
super.setUp();
eventBus = new CountingEventBus(new SimpleEventBus());
}
public void testAddAndRemoveMultipleHandlers() {
HandlerRegistration fooReg = eventBus.addHandler(FooEvent.TYPE, fooHandler1);
checkHandlerCount(1, FooEvent.TYPE);
HandlerRegistration barReg1 = eventBus.addHandler(BarEvent.TYPE, barHandler1);
HandlerRegistration barReg2 = eventBus.addHandler(BarEvent.TYPE, barHandler2);
checkHandlerCount(2, BarEvent.TYPE);
fooReg.removeHandler();
checkHandlerCount(0, FooEvent.TYPE);
barReg2.removeHandler();
checkHandlerCount(1, BarEvent.TYPE);
barReg1.removeHandler();
checkHandlerCount(0, BarEvent.TYPE);
}
public void testAddAndRemoveSourcedHandlers() {
Object source1 = new Object();
Object source2 = new Object();
HandlerRegistration fooReg1 = eventBus.addHandlerToSource(FooEvent.TYPE, source1, fooHandler1);
checkHandlerCount(1, FooEvent.TYPE);
HandlerRegistration fooReg2 = eventBus.addHandlerToSource(FooEvent.TYPE, source2, fooHandler2);
checkHandlerCount(2, FooEvent.TYPE);
fooReg2.removeHandler();
checkHandlerCount(1, FooEvent.TYPE);
fooReg1.removeHandler();
checkHandlerCount(0, FooEvent.TYPE);
}
public void testFireEvent() {
checkTotalEvents(0, FooEvent.TYPE);
checkTotalEvents(0, BarEvent.TYPE);
for (int i = 0; i < 5; i++) {
eventBus.fireEvent(new FooEvent());
checkTotalEvents(i + 1, FooEvent.TYPE);
checkTotalEvents(i, BarEvent.TYPE);
eventBus.fireEvent(new BarEvent());
checkTotalEvents(i + 1, FooEvent.TYPE);
checkTotalEvents(i + 1, BarEvent.TYPE);
}
}
public void testFireEventFromSource() {
Object source1 = new Object();
Object source2 = new Object();
eventBus.fireEvent(new FooEvent());
checkSourceEvents(0, FooEvent.TYPE, source1);
checkSourceEvents(0, FooEvent.TYPE, source2);
checkTotalEvents(1, FooEvent.TYPE);
eventBus.fireEventFromSource(new FooEvent(), source1);
checkSourceEvents(1, FooEvent.TYPE, source1);
checkSourceEvents(0, FooEvent.TYPE, source2);
checkSourceEvents(1, FooEvent.TYPE, null);
assertEquals(2, eventBus.getFiredCount(FooEvent.TYPE));
eventBus.fireEventFromSource(new FooEvent(), source1);
checkSourceEvents(2, FooEvent.TYPE, source1);
checkSourceEvents(0, FooEvent.TYPE, source2);
checkSourceEvents(1, FooEvent.TYPE, null);
assertEquals(3, eventBus.getFiredCount(FooEvent.TYPE));
eventBus.fireEventFromSource(new FooEvent(), source2);
checkSourceEvents(2, FooEvent.TYPE, source1);
checkSourceEvents(1, FooEvent.TYPE, source2);
checkSourceEvents(1, FooEvent.TYPE, null);
assertEquals(4, eventBus.getFiredCount(FooEvent.TYPE));
eventBus.fireEventFromSource(new BarEvent(), source2);
checkSourceEvents(2, FooEvent.TYPE, source1);
checkSourceEvents(1, FooEvent.TYPE, source2);
checkSourceEvents(1, FooEvent.TYPE, null);
assertEquals(4, eventBus.getFiredCount(FooEvent.TYPE));
checkSourceEvents(1, BarEvent.TYPE, source2);
assertEquals(1, eventBus.getFiredCount(BarEvent.TYPE));
}
public void testFireEventFromSource_LotsOfEvents() {
Object source = new Object();
for (int i = 0; i < Integer.MAX_VALUE; i++) {
eventBus.fireEventFromSource(new FooEvent(), source);
assertEquals(i + 1, eventBus.getFiredCount(FooEvent.TYPE));
assertEquals(i + 1, eventBus.getFiredCountFromSource(FooEvent.TYPE, source));
}
}
private void checkHandlerCount(int expected, Type<?> type) {
assertEquals(expected, eventBus.getHandlerCount(type));
assertEquals(expected, eventBus.getCount(type));
}
private void checkSourceEvents(int expectedCount, Type<?> type, Object source) {
assertEquals(expectedCount, eventBus.getFiredCountFromSource(type, source));
}
private void checkTotalEvents(int expectedCount, Type<?> type) {
assertEquals(expectedCount, eventBus.getFiredCount(type));
assertEquals(expectedCount, eventBus.getFiredCountFromSource(type, null));
}
}