Package elemental.html

Source Code of elemental.html.WindowTest

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

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

import static elemental.client.Browser.getDocument;
import static elemental.client.Browser.getWindow;

import elemental.dom.TimeoutHandler;
import elemental.events.Event;
import elemental.events.EventListener;

/**
* Tests for Window.
*/
public class WindowTest extends GWTTestCase {

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

  /**
   * Tests Window.addEventListener() catches events from the body.
   */
  public void testEventListener() {
    final boolean[] clicked = new boolean[1];
    getWindow().addEventListener("click", new EventListener() {
      @Override
      public void handleEvent(Event evt) {
        clicked[0] = true;
      }
    }, false);
    TestUtils.click(getDocument().getBody());
    assertTrue(clicked[0]);
  }

  /**
   * Tests Window.getSelection().
   * TODO(knorton): Expand this into a more complete test.
   */
  public void testGetSelection() {
    final Window window = getWindow();
    final Selection selection = window.getSelection();
    assertNotNull(selection);
  }

  /**
   * Tests that Window.open() and Window.clearOpener().
   */
  public void testOpener() {
    final Window window = getWindow();
    final Window proxy = window.open("about:blank", "_blank");
    assertNotNull(proxy.getOpener());
    proxy.clearOpener();
    assertNull(proxy.getOpener());
    proxy.close();
  }

  /**
   * Tests that Window.setTimeout() works.
   */
  public void testTimeout() {
    delayTestFinish(1000);
    getWindow().setTimeout(new TimeoutHandler() {
      @Override
      public void onTimeoutHandler() {
        finishTest();
      }
    }, 500);
  }

  /**
   * Tests that Window.setInterval() works repeatedly.
   */
  public void testInterval() {
    final int[] handle = new int[1];
    TimeoutHandler listener = new TimeoutHandler() {
      int count;
      @Override
      public void onTimeoutHandler() {
        // Make sure we see at least two events.
        ++count;
        if (count >= 2) {
          getWindow().clearInterval(handle[0]);
          finishTest();
        }
      }
    };

    delayTestFinish(1000);
    handle[0] = getWindow().setInterval(listener, 100);
  }

  /**
   * Tests that the {@link UncaughtExceptionHandler} gets called correctly when
   * setTimeout() and setInterval() throw exceptions.
   */
  public void testUncaughtException() {
    // Setup an UncaughtExceptionHandler to catch exceptions from setTimeout()
    // and setInterval().
    final Throwable[] ex = new Throwable[2];
    GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
      int count;
      @Override
      public void onUncaughtException(Throwable e) {
        ex[count++] = e;
      }
    });

    // Set a timeout and an interval, both of which will throw a RuntimException.
    getWindow().setTimeout(new TimeoutHandler() {
      @Override
      public void onTimeoutHandler() {
        throw new RuntimeException("w00t!");
      }
    }, 1);

    final int[] intervalHandle = new int[1];
    intervalHandle[0] = getWindow().setInterval(new TimeoutHandler() {
      @Override
      public void onTimeoutHandler() {
        // We only want this to happen once, so clear the interval timer on the
        // first fire.
        getWindow().clearInterval(intervalHandle[0]);
        throw new RuntimeException("w00t!");
      }
    }, 1);

    // Wait for the test to finish asynchronously, and setup another timer to
    // check that the exceptions got caught (this is kind of ugly, but there's
    // no way around it if we want to test the "real" timer implementation as
    // opposed to a mock implementation.
    delayTestFinish(5000);
    getWindow().setTimeout(new TimeoutHandler() {
      @Override
      public void onTimeoutHandler() {
        // Assert that exceptions got caught.
        assertNotNull(ex[0]);
        assertNotNull(ex[1]);
        assertEquals("w00t!", ex[0].getMessage());
        assertEquals("w00t!", ex[1].getMessage());

        // Clean up and finish.
        GWT.setUncaughtExceptionHandler(null);
        finishTest();
      }
    }, 500);
  }
}
TOP

Related Classes of elemental.html.WindowTest

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.