/* * Copyright 2010 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.gwt.event.shared; import com.google.gwt.event.dom.client.DomEvent.Type; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseDownHandler; import com.google.gwt.event.shared.testing.CountingEventBus; /** * Eponymous unit test. */ public class ResettableEventBusTest extends HandlerTestBase { public void testSimple() { CountingEventBus wrapped = new CountingEventBus(); ResettableEventBus subject = new ResettableEventBus(wrapped); Type<MouseDownHandler> type = MouseDownEvent.getType(); assertEquals(0, wrapped.getCount(type)); subject.addHandler(type, mouse1); subject.addHandlerToSource(type, "baker", mouse2); subject.addHandler(type, mouse3); assertEquals(3, wrapped.getCount(type)); subject.fireEvent(new MouseDownEvent() { }); assertFired(mouse1, mouse3); assertNotFired(mouse2); reset(); subject.fireEventFromSource(new MouseDownEvent() { }, "baker"); assertFired(mouse1, mouse2, mouse3); reset(); subject.removeHandlers(); assertEquals(0, wrapped.getCount(type)); subject.fireEvent(new MouseDownEvent() { }); assertNotFired(mouse1, mouse2, mouse3); } public void testNestedResetInnerFirst() { CountingEventBus wrapped = new CountingEventBus(); ResettableEventBus wideScope = new ResettableEventBus(wrapped); ResettableEventBus narrowScope = new ResettableEventBus(wideScope); Type<MouseDownHandler> type = MouseDownEvent.getType(); wideScope.addHandler(type, mouse1); narrowScope.addHandler(type, mouse2); wrapped.fireEvent(new MouseDownEvent() { }); assertFired(mouse1, mouse2); 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 MouseDownEvent() { }); assertFired(mouse1); assertNotFired(mouse2); } public void testNestedResetOuterFirst() { CountingEventBus wrapped = new CountingEventBus(); ResettableEventBus wideScope = new ResettableEventBus(wrapped); ResettableEventBus narrowScope = new ResettableEventBus(wideScope); Type<MouseDownHandler> type = MouseDownEvent.getType(); wideScope.addHandler(type, mouse1); narrowScope.addHandler(type, mouse2); wrapped.fireEvent(new MouseDownEvent() { }); assertFired(mouse1, mouse2); 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 MouseDownEvent() { }); assertNotFired(mouse1); assertNotFired(mouse2); } public void testManualRemoveMemory() { SimpleEventBus eventBus = new SimpleEventBus(); ResettableEventBus subject = new ResettableEventBus(eventBus); Type<MouseDownHandler> type = MouseDownEvent.getType(); HandlerRegistration registration1 = subject.addHandler(type, mouse1); HandlerRegistration registration2 = subject.addHandler(type, mouse2); HandlerRegistration registration3 = subject.addHandler(type, mouse3); 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); Type<MouseDownHandler> type = MouseDownEvent.getType(); wideScope.addHandler(type, mouse1); narrowScope.addHandler(type, mouse2); narrowScope.addHandler(type, mouse3); narrowScope.removeHandlers(); wideScope.removeHandlers(); /* * Internal registeration should be empty after calling removeHandlers */ assertEquals(0, wideScope.getRegistrationSize()); assertEquals(0, narrowScope.getRegistrationSize()); wideScope.addHandler(type, mouse1); narrowScope.addHandler(type, mouse2); /* * Reverse remove order */ wideScope.removeHandlers(); narrowScope.removeHandlers(); assertEquals(0, wideScope.getRegistrationSize()); assertEquals(0, narrowScope.getRegistrationSize()); } }