Package elemental.events

Source Code of elemental.events.EventTargetTest$ListenerDidFire

/*
* 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 elemental.events;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
import com.google.gwt.junit.client.GWTTestCase;

import elemental.client.Browser;
import elemental.dom.Document;
import elemental.dom.Element;
import elemental.html.ButtonElement;
import elemental.html.TestUtils;

/**
* Tests for {@link EventTarget}.
*/
public class EventTargetTest extends GWTTestCase {

  private static class ListenerDidFire implements EventListener {
    private boolean didFire;
    public boolean didFire() {
      return didFire;
    }
   
    @Override
    public void handleEvent(Event evt) {
      didFire = true;
    }   
  }

  @Override
  public String getModuleName() {
    return "elemental.Elemental";
  }

  /**
   * Tests that addEventListener() correctly adds a listener.
   */
  public void testAddEventListener() {
    final Element body = Browser.getDocument().getBody();

    final ListenerDidFire a = new ListenerDidFire();
    final ListenerDidFire b = new ListenerDidFire();
   
    // Ensure that addEventListener works.
    body.addEventListener("click", a, false);
    // Ensure that setOnClick also works.
    body.setOnclick(b);
   
    assertEquals(b, body.getOnclick());

    TestUtils.click(body);
   
    assertTrue(a.didFire());
    assertTrue(b.didFire());
  }
 
  /**
   * Tests that removeEventListener() correctly removes the listener, so that no
   * events are fired afterwards.
   */
  @SuppressWarnings("deprecation")
  public void testRemoveEventListener() {
    final Element body = Browser.getDocument().getBody();

    final ListenerDidFire listener = new ListenerDidFire();
   
    // Ensure that EventRemover works.
    body.addEventListener("click", listener, false).remove();
    TestUtils.click(body);
    assertFalse(listener.didFire());
   
    // Ensure that removeEventListener works.
    body.addEventListener("click", listener, false);
    body.removeEventListener("click", listener, false);
    TestUtils.click(body);
    assertFalse(listener.didFire());
   
    // Ensure that onclick = null works.
    body.setOnclick(listener);
    body.setOnclick(null);
    TestUtils.click(body);   
    assertFalse(listener.didFire());   
  }
 
  /**
   * Tests that the {@link UncaughtExceptionHandler} gets called correctly when
   * events are fired from a subinterface of {@link EventTarget}.
   */
  public void testUncaughtException() {
    // Create a button with an event handler that will throw an exception.
    Document doc = Browser.getDocument();
    ButtonElement btn = doc.createButtonElement();
    doc.getBody().appendChild(btn);

    btn.addEventListener(Event.CLICK, new EventListener() {
      @Override
      public void handleEvent(Event evt) {
        throw new RuntimeException("w00t!");
      }
    }, false);

    // Setup the UncaughtExceptionHandler.
    final Throwable[] ex = new Throwable[1];
    GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
      @Override
      public void onUncaughtException(Throwable e) {
        ex[0] = e;
      }
    });

    // Click it and make sure the exception got caught.
    TestUtils.click(btn);
    assertNotNull(ex[0]);
    assertEquals("w00t!", ex[0].getMessage());

    // Clean up.
    GWT.setUncaughtExceptionHandler(null);
    doc.getBody().removeChild(btn);
  }
}
TOP

Related Classes of elemental.events.EventTargetTest$ListenerDidFire

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.