| /* |
| * 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; |
| |
| import com.google.web.bindery.event.shared.testing.CountingEventBus; |
| |
| /** |
| * Eponymous unit test. |
| */ |
| public class ResettableEventBusTest extends EventBusTestBase { |
| public void testSimple() { |
| CountingEventBus wrapped = new CountingEventBus(); |
| ResettableEventBus subject = new ResettableEventBus(wrapped); |
| |
| Event.Type<FooEvent.Handler> type = FooEvent.TYPE; |
| |
| assertEquals(0, wrapped.getCount(type)); |
| |
| subject.addHandler(type, fooHandler1); |
| subject.addHandlerToSource(type, "baker", fooHandler2); |
| subject.addHandler(type, fooHandler3); |
| |
| assertEquals(3, wrapped.getCount(type)); |
| |
| subject.fireEvent(new FooEvent()); |
| assertFired(fooHandler1, fooHandler3); |
| assertNotFired(fooHandler2); |
| |
| reset(); |
| |
| subject.fireEventFromSource(new FooEvent(), "baker"); |
| assertFired(fooHandler1, fooHandler2, fooHandler3); |
| |
| reset(); |
| |
| subject.removeHandlers(); |
| assertEquals(0, wrapped.getCount(type)); |
| |
| subject.fireEvent(new FooEvent()); |
| assertNotFired(fooHandler1, fooHandler2, fooHandler3); |
| } |
| |
| public void testNestedResetInnerFirst() { |
| CountingEventBus wrapped = new CountingEventBus(); |
| ResettableEventBus wideScope = new ResettableEventBus(wrapped); |
| ResettableEventBus narrowScope = new ResettableEventBus(wideScope); |
| |
| Event.Type<FooEvent.Handler> type = FooEvent.TYPE; |
| |
| wideScope.addHandler(type, fooHandler1); |
| narrowScope.addHandler(type, fooHandler2); |
| |
| wrapped.fireEvent(new FooEvent()); |
| assertFired(fooHandler1, fooHandler2); |
| |
| reset(); |
| |
| /* |
| * When I remove handlers from the narrow resettable, it should have no |
| * effect on handlers registered with the wider instance. |
| */ |
| |
| narrowScope.removeHandlers(); |
| |
| wrapped.fireEvent(new FooEvent()); |
| assertFired(fooHandler1); |
| assertNotFired(fooHandler2); |
| } |
| |
| public void testNestedResetOuterFirst() { |
| CountingEventBus wrapped = new CountingEventBus(); |
| ResettableEventBus wideScope = new ResettableEventBus(wrapped); |
| ResettableEventBus narrowScope = new ResettableEventBus(wideScope); |
| |
| Event.Type<FooEvent.Handler> type = FooEvent.TYPE; |
| |
| wideScope.addHandler(type, fooHandler1); |
| narrowScope.addHandler(type, fooHandler2); |
| |
| wrapped.fireEvent(new FooEvent()); |
| assertFired(fooHandler1, fooHandler2); |
| |
| reset(); |
| |
| /* |
| * When I remove handlers from the first resettable, handlers registered by |
| * the narrower scoped one that wraps it should also be severed. |
| */ |
| |
| wideScope.removeHandlers(); |
| |
| wrapped.fireEvent(new FooEvent()); |
| assertNotFired(fooHandler1); |
| assertNotFired(fooHandler2); |
| } |
| |
| public void testManualRemoveMemory() { |
| SimpleEventBus eventBus = new SimpleEventBus(); |
| ResettableEventBus subject = new ResettableEventBus(eventBus); |
| |
| Event.Type<FooEvent.Handler> type = FooEvent.TYPE; |
| |
| HandlerRegistration registration1 = subject.addHandler(type, fooHandler1); |
| HandlerRegistration registration2 = subject.addHandler(type, fooHandler2); |
| HandlerRegistration registration3 = subject.addHandler(type, fooHandler3); |
| |
| registration1.removeHandler(); |
| registration2.removeHandler(); |
| registration3.removeHandler(); |
| |
| /* |
| * removing handlers manually should remove registration from the internal |
| * set. |
| */ |
| |
| assertEquals(0, subject.getRegistrationSize()); |
| |
| subject.removeHandlers(); |
| |
| // Expect nothing to happen. Especially no exceptions. |
| registration1.removeHandler(); |
| } |
| |
| public void testNestedRemoveMemory() { |
| SimpleEventBus eventBus = new SimpleEventBus(); |
| ResettableEventBus wideScope = new ResettableEventBus(eventBus); |
| ResettableEventBus narrowScope = new ResettableEventBus(wideScope); |
| |
| Event.Type<FooEvent.Handler> type = FooEvent.TYPE; |
| |
| wideScope.addHandler(type, fooHandler1); |
| narrowScope.addHandler(type, fooHandler2); |
| narrowScope.addHandler(type, fooHandler3); |
| |
| narrowScope.removeHandlers(); |
| wideScope.removeHandlers(); |
| |
| /* |
| * Internal registeration should be empty after calling removeHandlers |
| */ |
| |
| assertEquals(0, wideScope.getRegistrationSize()); |
| assertEquals(0, narrowScope.getRegistrationSize()); |
| |
| wideScope.addHandler(type, fooHandler1); |
| narrowScope.addHandler(type, fooHandler2); |
| |
| /* |
| * Reverse remove order |
| */ |
| |
| wideScope.removeHandlers(); |
| narrowScope.removeHandlers(); |
| |
| assertEquals(0, wideScope.getRegistrationSize()); |
| assertEquals(0, narrowScope.getRegistrationSize()); |
| } |
| } |