/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 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.gwt2.client.map; import org.geomajas.configuration.client.ClientLayerInfo; import org.geomajas.configuration.client.ClientMapInfo; import org.geomajas.configuration.client.ClientVectorLayerInfo; import org.geomajas.gwt2.client.GeomajasImpl; import org.geomajas.gwt2.client.event.LayerAddedEvent; import org.geomajas.gwt2.client.event.LayerRemovedEvent; import org.geomajas.gwt2.client.event.MapCompositionHandler; import org.geomajas.gwt2.client.map.layer.Layer; import org.geomajas.gwt2.client.map.layer.LayersModel; import org.geomajas.gwt2.client.map.layer.LayersModelImpl; import org.geomajas.gwt2.client.map.layer.VectorServerLayerImpl; import org.geomajas.testdata.ReloadContext; import org.geomajas.testdata.ReloadContextTestExecutionListener; import org.junit.Assert; 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.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; /** * Tests for the layersModelImpl class to see if it correctly implements all layersModel methods. * * @author Pieter De Graef */ @TestExecutionListeners({ ReloadContextTestExecutionListener.class, DependencyInjectionTestExecutionListener.class }) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "/org/geomajas/spring/geomajasContext.xml", "beansContext.xml", "mapBeans.xml", "layerBeans1.xml", "layerBeans2.xml", "layerBeans3.xml" }) @ReloadContext public class LayersModelTest { private static final String LAYER1 = "beans1Layer"; private static final String LAYER2 = "beans2Layer"; private static final String LAYER3 = "beans3Layer"; @Autowired @Qualifier(value = "mapBeans") private ClientMapInfo mapInfo; private MapEventBus eventBus; private ViewPort viewPort; private LayersModel layersModel; private int layerCount; @Before public void initialize() { // Initialize main components: MapConfiguration mapConfig = TestConfigUtil.create(mapInfo); eventBus = new MapEventBusImpl(this, GeomajasImpl.getInstance().getEventBus()); viewPort = new ViewPortImpl(eventBus); ((ViewPortImpl) viewPort).initialize(mapConfig); layersModel = new LayersModelImpl(viewPort, eventBus); // Now add layers: for (int i = 1; i < 4; i++) { for (ClientLayerInfo layerInfo : mapInfo.getLayers()) { if (("beans" + i + "Layer").equals(layerInfo.getId())) { Layer layer = new VectorServerLayerImpl(mapConfig, (ClientVectorLayerInfo)layerInfo, viewPort, eventBus); layersModel.addLayer(layer); } } } } @Test public void testBeforeInit() { Assert.assertNull(layersModel.getSelectedLayer()); } @Test public void testInitialize() { final MapCompositionHandler layerCounter = new MapCompositionHandler() { public void onLayerAdded(LayerAddedEvent event) { layerCount++; } public void onLayerRemoved(LayerRemovedEvent event) { } }; eventBus.addMapCompositionHandler(layerCounter); initialize(); Assert.assertEquals(3, layerCount); Assert.assertEquals(3, layersModel.getLayerCount()); } @Test public void testLayerSelection() { Layer layer1 = layersModel.getLayer(LAYER1); Layer layer2 = layersModel.getLayer(LAYER2); layer1.setSelected(true); Assert.assertEquals(layer1, layersModel.getSelectedLayer()); layer2.setSelected(true); Assert.assertEquals(layer2, layersModel.getSelectedLayer()); Assert.assertEquals(false, layer1.isSelected()); layer2.setSelected(false); Assert.assertEquals(null, layersModel.getSelectedLayer()); } @Test public void testGetLayer() { Assert.assertEquals(layersModel.getLayer(0), layersModel.getLayer(LAYER1)); Assert.assertEquals(layersModel.getLayer(1), layersModel.getLayer(LAYER2)); Assert.assertEquals(layersModel.getLayer(2), layersModel.getLayer(LAYER3)); // Corner cases: try { layersModel.getLayer(null); Assert.fail(); } catch (Exception e) { // Test passed. } } @Test public void testLayerPosition() { Assert.assertEquals(0, layersModel.getLayerPosition(layersModel.getLayer(0))); Assert.assertEquals(1, layersModel.getLayerPosition(layersModel.getLayer(1))); Assert.assertEquals(2, layersModel.getLayerPosition(layersModel.getLayer(2))); Assert.assertEquals(0, layersModel.getLayerPosition(layersModel.getLayer(LAYER1))); Assert.assertEquals(1, layersModel.getLayerPosition(layersModel.getLayer(LAYER2))); Assert.assertEquals(2, layersModel.getLayerPosition(layersModel.getLayer(LAYER3))); // Corner cases: try { layersModel.getLayerPosition(null); Assert.fail(); } catch (Exception e) { // Test passed. } } @Test public void testMoveLayerDown() { Layer layer1 = layersModel.getLayer(LAYER1); Layer layer2 = layersModel.getLayer(LAYER2); Layer layer3 = layersModel.getLayer(LAYER3); layersModel.moveLayerDown(layer1); // Expect no changes. Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer2)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayerDown(layer3); Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); Assert.assertEquals(1, layersModel.getLayerPosition(layer3)); layersModel.moveLayerDown(layer3); Assert.assertEquals(1, layersModel.getLayerPosition(layer1)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); Assert.assertEquals(0, layersModel.getLayerPosition(layer3)); } @Test public void testMoveLayerUp() { Layer layer1 = layersModel.getLayer(LAYER1); Layer layer2 = layersModel.getLayer(LAYER2); Layer layer3 = layersModel.getLayer(LAYER3); Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer2)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayerUp(layer3); // Expect no changes. Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer2)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayerUp(layer1); Assert.assertEquals(1, layersModel.getLayerPosition(layer1)); Assert.assertEquals(0, layersModel.getLayerPosition(layer2)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayerUp(layer1); Assert.assertEquals(2, layersModel.getLayerPosition(layer1)); Assert.assertEquals(0, layersModel.getLayerPosition(layer2)); Assert.assertEquals(1, layersModel.getLayerPosition(layer3)); } @Test public void testMoveLayer() { Layer layer1 = layersModel.getLayer(LAYER1); Layer layer2 = layersModel.getLayer(LAYER2); Layer layer3 = layersModel.getLayer(LAYER3); layersModel.moveLayer(layer1, -1); // Expect no changes. Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer2)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayer(layer2, -1); Assert.assertEquals(0, layersModel.getLayerPosition(layer2)); Assert.assertEquals(1, layersModel.getLayerPosition(layer1)); Assert.assertEquals(2, layersModel.getLayerPosition(layer3)); layersModel.moveLayer(layer2, 2); Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer3)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); layersModel.moveLayer(layer2, 200); Assert.assertEquals(0, layersModel.getLayerPosition(layer1)); Assert.assertEquals(1, layersModel.getLayerPosition(layer3)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); layersModel.moveLayer(layer3, 0); Assert.assertEquals(0, layersModel.getLayerPosition(layer3)); Assert.assertEquals(1, layersModel.getLayerPosition(layer1)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); // Corner cases: Assert.assertFalse(layersModel.moveLayer(layer3, 0)); Assert.assertEquals(0, layersModel.getLayerPosition(layer3)); Assert.assertEquals(1, layersModel.getLayerPosition(layer1)); Assert.assertEquals(2, layersModel.getLayerPosition(layer2)); } }