Package org.geomajas.puregwt.client.map

Source Code of org.geomajas.puregwt.client.map.ViewPortEventTest$AllowChangedHandler

/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2011 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/

package org.geomajas.puregwt.client.map;

import javax.annotation.PostConstruct;

import junit.framework.Assert;

import org.geomajas.configuration.client.ClientMapInfo;
import org.geomajas.geometry.Coordinate;
import org.geomajas.puregwt.client.GeomajasTestModule;
import org.geomajas.puregwt.client.map.event.EventBus;
import org.geomajas.puregwt.client.map.event.ViewPortChangedEvent;
import org.geomajas.puregwt.client.map.event.ViewPortChangedHandler;
import org.geomajas.puregwt.client.map.event.ViewPortScaledEvent;
import org.geomajas.puregwt.client.map.event.ViewPortTranslatedEvent;
import org.geomajas.puregwt.client.spatial.GeometryFactory;
import org.geomajas.puregwt.client.spatial.GeometryFactoryImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.inject.Guice;
import com.google.inject.Injector;

/**
* Unit test that checks if the correct events are fired by the ViewPortImpl.
*
* @author Pieter De Graef
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/org/geomajas/spring/geomajasContext.xml", "viewPortContext.xml",
    "mapViewPortBeans.xml", "mapBeansNoResolutions.xml", "layerViewPortBeans.xml" })
@DirtiesContext
public class ViewPortEventTest {

  private static final Injector INJECTOR = Guice.createInjector(new GeomajasTestModule());

  @Autowired
  @Qualifier(value = "mapViewPortBeans")
  private ClientMapInfo mapInfo;

  private EventBus eventBus;

  private ViewPort viewPort;

  private GwtEvent<ViewPortChangedHandler> event;

  @PostConstruct
  public void initialize() {
    eventBus = INJECTOR.getInstance(EventBus.class);
    viewPort = INJECTOR.getInstance(ViewPort.class);
    viewPort.initialize(mapInfo, eventBus);
    viewPort.setMapSize(1000, 1000);
  }

  @Before
  public void prepareTest() {
    viewPort.applyBounds(viewPort.getMaximumBounds());
    event = null;
  }

  @Test
  public void testApplyPosition() {
    Assert.assertEquals(4.0, viewPort.getScale());
    Assert.assertNull(event);

    HandlerRegistration reg = eventBus.addHandler(ViewPortChangedHandler.TYPE, new AllowTranslationHandler());

    viewPort.applyPosition(new Coordinate(342, 342));
    Assert.assertEquals(4.0, viewPort.getScale());
    Assert.assertNotNull(event);
    Assert.assertTrue(event instanceof ViewPortTranslatedEvent);

    reg.removeHandler();
  }

  @Test
  public void testApplyScale() {
    Assert.assertEquals(4.0, viewPort.getScale());
    Assert.assertNull(event);

    HandlerRegistration reg = eventBus.addHandler(ViewPortChangedHandler.TYPE, new AllowScalingHandler());

    viewPort.applyScale(2.0);
    Assert.assertEquals(2.0, viewPort.getScale());
    Assert.assertNotNull(event);
    Assert.assertTrue(event instanceof ViewPortScaledEvent);

    reg.removeHandler();
  }

  @Test
  public void testApplyBounds() {
    Assert.assertEquals(4.0, viewPort.getScale());
    Assert.assertNull(event);
    GeometryFactory factory = new GeometryFactoryImpl();

    HandlerRegistration reg = eventBus.addHandler(ViewPortChangedHandler.TYPE, new AllowChangedHandler());

    // Now a changed event should occur:
    viewPort.applyBounds(factory.createBbox(0, 0, 100, 100));
    Assert.assertEquals(8.0, viewPort.getScale());
    Assert.assertNotNull(event);
    Assert.assertTrue(event instanceof ViewPortChangedEvent);

    reg.removeHandler();
    reg = eventBus.addHandler(ViewPortChangedHandler.TYPE, new AllowTranslationHandler());

    // Expect to end up at the same scale, so no changed event, but translation only:
    viewPort.applyBounds(factory.createBbox(-50, -50, 100, 100));
    Assert.assertEquals(8.0, viewPort.getScale());
    Assert.assertNotNull(event);
    Assert.assertTrue(event instanceof ViewPortTranslatedEvent);

    reg.removeHandler();
  }

  @Test
  public void testApplySameBounds() {
    Assert.assertEquals(4.0, viewPort.getScale());
    Assert.assertNull(event);

    HandlerRegistration reg = eventBus.addHandler(ViewPortChangedHandler.TYPE, new AllowNoEventsHandler());

    viewPort.applyBounds(viewPort.getBounds());
    Assert.assertNull(event);

    reg.removeHandler();
  }

  // ------------------------------------------------------------------------
  // Private classes that allows only one type of event to be fired.
  // ------------------------------------------------------------------------

  /**
   * ViewPortHandler that allows only ViewPortTranslatedEvents.
   *
   * @author Pieter De Graef
   */
  private class AllowTranslationHandler implements ViewPortChangedHandler {

    public void onViewPortChanged(ViewPortChangedEvent event) {
      Assert.fail("No ViewPortChangedEvent should have been fired.");
    }

    public void onViewPortScaled(ViewPortScaledEvent event) {
      Assert.fail("No ViewPortScaledEvent should have been fired.");
    }

    public void onViewPortTranslated(ViewPortTranslatedEvent event) {
      ViewPortEventTest.this.event = event;
    }
  }

  /**
   * ViewPortHandler that allows only ViewPortScaledEvents.
   *
   * @author Pieter De Graef
   */
  private class AllowScalingHandler implements ViewPortChangedHandler {

    public void onViewPortChanged(ViewPortChangedEvent event) {
      Assert.fail("No ViewPortChangedEvent should have been fired.");
    }

    public void onViewPortScaled(ViewPortScaledEvent event) {
      ViewPortEventTest.this.event = event;
    }

    public void onViewPortTranslated(ViewPortTranslatedEvent event) {
      Assert.fail("No ViewPortTranslatedEvent should have been fired.");
    }
  }

  /**
   * ViewPortHandler that allows only ViewPortChangedEvents.
   *
   * @author Pieter De Graef
   */
  private class AllowChangedHandler implements ViewPortChangedHandler {

    public void onViewPortChanged(ViewPortChangedEvent event) {
      ViewPortEventTest.this.event = event;
    }

    public void onViewPortScaled(ViewPortScaledEvent event) {
      Assert.fail("No ViewPortScaledEvent should have been fired.");
    }

    public void onViewPortTranslated(ViewPortTranslatedEvent event) {
      Assert.fail("No ViewPortTranslatedEvent should have been fired.");
    }
  }

  /**
   * ViewPortHandler that allows no ViewPort events.
   *
   * @author Pieter De Graef
   */
  private class AllowNoEventsHandler implements ViewPortChangedHandler {

    public void onViewPortChanged(ViewPortChangedEvent event) {
      Assert.fail("No ViewPortChangedEvent should have been fired.");
    }

    public void onViewPortScaled(ViewPortScaledEvent event) {
      Assert.fail("No ViewPortScaledEvent should have been fired.");
    }

    public void onViewPortTranslated(ViewPortTranslatedEvent event) {
      Assert.fail("No ViewPortTranslatedEvent should have been fired.");
    }
  }
}
TOP

Related Classes of org.geomajas.puregwt.client.map.ViewPortEventTest$AllowChangedHandler

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.