| /* | |
| * 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)); | |
| } | |
| } | |