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