Package com.google.web.bindery.event.shared.testing

Source Code of com.google.web.bindery.event.shared.testing.CountingEventBusTest

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

Related Classes of com.google.web.bindery.event.shared.testing.CountingEventBusTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.