blob: b8591a80b2782b03335683ad2fb1b33e2f11d374 [file] [log] [blame]
/*
* 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());
}
}