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