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

Source Code of com.google.web.bindery.event.shared.binder.EventBinderTest$ThirdEvent

/*
* Copyright 2013 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.binder;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.google.web.bindery.event.shared.SimpleEventBus;

/**
* End-to-end test of {@link EventBinder} and associated classes.
*
* @author ekuefler@google.com (Erik Kuefler)
*/
public class EventBinderTest extends GWTTestCase {

  @Override
  public String getModuleName() {
    return "com.google.web.bindery.event.EventBinder";
  }

  public void testEventBinder() {
    EventBus eventBus = new SimpleEventBus();
    TestPresenter presenter = new TestPresenter();
    TestPresenter.MyEventBinder binder = GWT.create(TestPresenter.MyEventBinder.class);
    binder.bindEventHandlers(presenter, eventBus);

    // Test one event
    assertEquals(0, presenter.firstEventsHandled);
    eventBus.fireEvent(new FirstEvent());
    assertEquals(1, presenter.firstEventsHandled);
    assertEquals(1, presenter.firstEventsWithoutParameterHandled);
    assertEquals(1, presenter.firstAndSecondEventsHandled);

    // Test another event twice
    assertEquals(0, presenter.secondEventsHandled);
    eventBus.fireEvent(new SecondEvent());
    eventBus.fireEvent(new SecondEvent());
    assertEquals(2, presenter.secondEventsHandled);
    assertEquals(3, presenter.firstAndSecondEventsHandled);
  }

  public void testEventBinder_unbindEventHandlers() {
    EventBus eventBus = new SimpleEventBus();
    TestPresenter presenter = new TestPresenter();
    TestPresenter.MyEventBinder binder = GWT.create(TestPresenter.MyEventBinder.class);
    HandlerRegistration registration = binder.bindEventHandlers(presenter, eventBus);
    assertEquals(0, presenter.firstEventsHandled);
    assertEquals(0, presenter.firstEventsWithoutParameterHandled);
    assertEquals(0, presenter.secondEventsHandled);

    // Before unregistering
    eventBus.fireEvent(new FirstEvent());
    eventBus.fireEvent(new SecondEvent());
    assertEquals(1, presenter.firstEventsHandled);
    assertEquals(1, presenter.firstEventsWithoutParameterHandled);
    assertEquals(1, presenter.secondEventsHandled);
    assertEquals(2, presenter.firstAndSecondEventsHandled);

    // After unregistering
    registration.removeHandler();
    eventBus.fireEvent(new FirstEvent());
    eventBus.fireEvent(new SecondEvent());
    assertEquals(1, presenter.firstEventsHandled);
    assertEquals(1, presenter.firstEventsWithoutParameterHandled);
    assertEquals(1, presenter.secondEventsHandled);
    assertEquals(2, presenter.firstAndSecondEventsHandled);

    // After re-registering
    binder.bindEventHandlers(presenter, eventBus);
    eventBus.fireEvent(new FirstEvent());
    eventBus.fireEvent(new SecondEvent());
    assertEquals(2, presenter.firstEventsHandled);
    assertEquals(2, presenter.firstEventsWithoutParameterHandled);
    assertEquals(2, presenter.secondEventsHandled);
    assertEquals(4, presenter.firstAndSecondEventsHandled);
  }

  public void testEventBinder_withLegacyEventBus() {
    com.google.gwt.event.shared.EventBus eventBus =
        new com.google.gwt.event.shared.SimpleEventBus();
    TestPresenter presenter = new TestPresenter();
    TestPresenter.MyEventBinder binder = GWT.create(TestPresenter.MyEventBinder.class);
    binder.bindEventHandlers(presenter, eventBus);

    assertEquals(0, presenter.firstEventsHandled);
    eventBus.fireEvent(new FirstEvent());
    assertEquals(1, presenter.firstEventsHandled);
  }

  public void testEventBinder_withHandlersInSuperclass() {
    EventBus eventBus = new SimpleEventBus();
    SubPresenter presenter = new SubPresenter();
    SubPresenter.MyEventBinder binder = GWT.create(SubPresenter.MyEventBinder.class);
    binder.bindEventHandlers(presenter, eventBus);

    eventBus.fireEvent(new FirstEvent());
    eventBus.fireEvent(new SecondEvent());
    eventBus.fireEvent(new ThirdEvent());

    // FirstEvent has a handler in both classes, so it should be handled twice
    assertEquals(1, presenter.firstEventsHandled);
    assertEquals(1, presenter.firstEventsWithoutParameterHandled);
    assertEquals(1, presenter.subclassFirstEventsHandled);

    // SecondEvent's handler is overridden in the subclass, so it should only be handled there
    assertEquals(0, presenter.secondEventsHandled);
    assertEquals(1, presenter.subclassSecondEventsHandled);

    // ThirdEvent is only handled in the superclass
    assertEquals(1, presenter.thirdEventsHandled);

    // First+Second events are handled in superclass
    assertEquals(2, presenter.firstAndSecondEventsHandled);
  }


  static class TestPresenter {
    interface MyEventBinder extends EventBinder<TestPresenter> {}

    int firstEventsHandled;
    int secondEventsHandled;
    int thirdEventsHandled;
    int firstAndSecondEventsHandled;
    int firstEventsWithoutParameterHandled;

    @EventHandler
    void onFirstEvent(FirstEvent e) {
      firstEventsHandled++;
    }

    @EventHandler
    void onSecondEvent(SecondEvent e) {
      secondEventsHandled++;
    }

    @EventHandler
    void onThirdEvent(ThirdEvent e) {
      thirdEventsHandled++;
    }

    @EventHandler(handles = {FirstEvent.class, SecondEvent.class})
    void onFirstAndSecondEvent(GenericEvent event) {
      firstAndSecondEventsHandled++;
    }

    @EventHandler(handles = {FirstEvent.class})
    void onFirstEventWithoutParameter() {
        firstEventsWithoutParameterHandled++;
    }
  }

  static class SubPresenter extends TestPresenter {
    interface MyEventBinder extends EventBinder<SubPresenter> {}

    int subclassFirstEventsHandled;
    int subclassSecondEventsHandled;

    @EventHandler
    void onFirstEventAgain(FirstEvent e) {
      subclassFirstEventsHandled++;
    }

    @Override
    @EventHandler
    void onSecondEvent(SecondEvent e) {
      subclassSecondEventsHandled++;
    }
  }

  static class FirstEvent extends GenericEvent {}
  static class SecondEvent extends GenericEvent {}
  static class ThirdEvent extends GenericEvent {}
}
TOP

Related Classes of com.google.web.bindery.event.shared.binder.EventBinderTest$ThirdEvent

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.