/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.wicket;
import static org.junit.Assert.*;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.web.ComponentBuilder;
import org.geoserver.web.FormTestPage;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.junit.Test;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.vividsolutions.jts.geom.Envelope;
public class EnvelopePanelTest extends GeoServerWicketTestSupport {
@Test
public void testEditPlain() throws Exception {
final ReferencedEnvelope e = new ReferencedEnvelope(-180,180,-90,90, DefaultGeographicCRS.WGS84);
tester.startPage(new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new EnvelopePanel(id, e);
}
}));
tester.assertComponent( "form", Form.class );
FormTester ft = tester.newFormTester( "form");
assertEquals( "-180", ft.getTextComponentValue( "panel:minX") );
assertEquals( "-90", ft.getTextComponentValue( "panel:minY") );
assertEquals( "180", ft.getTextComponentValue( "panel:maxX") );
assertEquals( "90", ft.getTextComponentValue( "panel:maxY") );
EnvelopePanel ep = (EnvelopePanel) tester.getComponentFromLastRenderedPage("form:panel");
assertEquals( e, ep.getModelObject() );
ft.setValue( "panel:minX", "-2");
ft.setValue( "panel:minY", "-2");
ft.setValue( "panel:maxX", "2");
ft.setValue( "panel:maxY", "2");
ft.submit();
assertEquals( new Envelope(-2,2,-2,2), ep.getModelObject() );
assertEquals( DefaultGeographicCRS.WGS84, ((ReferencedEnvelope) ep.getModelObject()).getCoordinateReferenceSystem() );
}
@Test
public void testEditCRS() throws Exception {
CoordinateReferenceSystem epsg4326 = CRS.decode("EPSG:4326", true);
CoordinateReferenceSystem epsg4140 = CRS.decode("EPSG:4140", true);
final ReferencedEnvelope e = new ReferencedEnvelope(-180,180,-90,90, epsg4326);
tester.startPage(new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
EnvelopePanel panel = new EnvelopePanel(id, e);
panel.setCRSFieldVisible(true);
return panel;
}
}));
tester.assertComponent( "form", Form.class );
FormTester ft = tester.newFormTester( "form");
// print(tester.getLastRenderedPage(), true, true);
assertEquals( "-180", ft.getTextComponentValue( "panel:minX") );
assertEquals( "-90", ft.getTextComponentValue( "panel:minY") );
assertEquals( "180", ft.getTextComponentValue( "panel:maxX") );
assertEquals( "90", ft.getTextComponentValue( "panel:maxY") );
assertEquals( "EPSG:4326", ft.getTextComponentValue( "panel:crsContainer:crs:srs") );
EnvelopePanel ep = (EnvelopePanel) tester.getComponentFromLastRenderedPage("form:panel");
assertEquals( e, ep.getModelObject() );
ft.setValue( "panel:minX", "-2");
ft.setValue( "panel:minY", "-2");
ft.setValue( "panel:maxX", "2");
ft.setValue( "panel:maxY", "2");
ft.setValue( "panel:crsContainer:crs:srs", "EPSG:4140");
ft.submit();
assertEquals( new Envelope(-2,2,-2,2), ep.getModelObject() );
assertEquals( epsg4140, ((ReferencedEnvelope) ep.getModelObject()).getCoordinateReferenceSystem() );
}
@Test
public void testDecimalsPreserved() throws Exception {
final ReferencedEnvelope e = new ReferencedEnvelope(-0.1E-10, 1.0E-9, -9E-11, 9E-11,
DefaultGeographicCRS.WGS84);
tester.startPage(new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new EnvelopePanel(id, e);
}
}));
tester.assertComponent("form", Form.class);
FormTester ft = tester.newFormTester("form");
assertEquals("-0.00000000001", ft.getTextComponentValue("panel:minX"));
assertEquals("-0.00000000009", ft.getTextComponentValue("panel:minY"));
assertEquals("0.000000001", ft.getTextComponentValue("panel:maxX"));
assertEquals("0.00000000009", ft.getTextComponentValue("panel:maxY"));
}
}