package org.geoserver.web.wicket; import java.io.Serializable; import org.apache.wicket.Session; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.util.tester.FormTester; import org.geoserver.web.GeoServerWicketTestSupport; import org.geotools.referencing.CRS; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; public class CRSPanelTest extends GeoServerWicketTestSupport { public void testStandloneUnset() throws Exception { tester.startPage( new CRSPanelTestPage() ); tester.assertComponent( "form", Form.class ); tester.assertComponent( "form:crs", CRSPanel.class ); FormTester ft = tester.newFormTester( "form"); ft.submit(); CRSPanel crsPanel = (CRSPanel) tester.getComponentFromLastRenderedPage( "form:crs"); assertNull( crsPanel.getCRS() ); } public void testStandaloneUnchanged() throws Exception { CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; tester.startPage( new CRSPanelTestPage( crs ) ); // print(new CRSPanelTestPage(crs), true, true); tester.assertComponent( "form", Form.class ); tester.assertComponent( "form:crs", CRSPanel.class ); FormTester ft = tester.newFormTester( "form"); ft.submit(); CRSPanel crsPanel = (CRSPanel) tester.getComponentFromLastRenderedPage( "form:crs"); assertEquals( DefaultGeographicCRS.WGS84, crsPanel.getCRS() ); } public void testPopupWindow() throws Exception { CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; tester.startPage( new CRSPanelTestPage( crs ) ); ModalWindow window = (ModalWindow) tester.getComponentFromLastRenderedPage("form:crs:popup"); assertFalse(window.isShown()); tester.clickLink("form:crs:wkt", true); assertTrue(window.isShown()); tester.assertModelValue("form:crs:popup:content:wkt", crs.toWKT()); } public void testPopupWindowNoCRS() throws Exception { // see GEOS-3207 tester.startPage( new CRSPanelTestPage() ); ModalWindow window = (ModalWindow) tester.getComponentFromLastRenderedPage("form:crs:popup"); assertFalse(window.isShown()); GeoServerAjaxFormLink link = (GeoServerAjaxFormLink) tester.getComponentFromLastRenderedPage("form:crs:wkt"); assertFalse(link.isEnabled()); } public void testStandaloneChanged() throws Exception { CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84; tester.startPage( new CRSPanelTestPage( crs ) ); TextField srs = (TextField) tester.getComponentFromLastRenderedPage( "form:crs:srs"); srs.setModelObject( "EPSG:3005"); FormTester ft = tester.newFormTester( "form"); ft.submit(); CRSPanel crsPanel = (CRSPanel) tester.getComponentFromLastRenderedPage( "form:crs"); assertEquals( CRS.decode("EPSG:3005"), crsPanel.getCRS() ); } public void testRequired() throws Exception { tester.startPage( new CRSPanelTestPage( (CoordinateReferenceSystem) null ) ); CRSPanel panel = (CRSPanel) tester.getComponentFromLastRenderedPage("form:crs"); panel.setRequired(true); FormTester ft = tester.newFormTester( "form"); ft.submit(); assertEquals(1, Session.get().getFeedbackMessages().size()); // System.out.println(Session.get().getFeedbackMessages().messageForComponent(panel)); } public void testCompoundPropertyUnchanged() throws Exception { Foo foo = new Foo( DefaultGeographicCRS.WGS84 ); tester.startPage( new CRSPanelTestPage( foo )); tester.assertComponent( "form", Form.class ); tester.assertComponent( "form:crs", CRSPanel.class ); FormTester ft = tester.newFormTester( "form"); ft.submit(); assertEquals( DefaultGeographicCRS.WGS84, foo.crs ); } public void testCompoundPropertyChanged() throws Exception { Foo foo = new Foo( DefaultGeographicCRS.WGS84 ); tester.startPage( new CRSPanelTestPage( foo )); TextField srs = (TextField) tester.getComponentFromLastRenderedPage( "form:crs:srs"); srs.setModelObject( "EPSG:3005"); FormTester ft = tester.newFormTester( "form"); ft.submit(); assertEquals( CRS.decode("EPSG:3005"), foo.crs ); } public void testPropertyUnchanged() throws Exception { Foo foo = new Foo( DefaultGeographicCRS.WGS84 ); tester.startPage( new CRSPanelTestPage( new PropertyModel( foo, "crs") )); tester.assertComponent( "form", Form.class ); tester.assertComponent( "form:crs", CRSPanel.class ); FormTester ft = tester.newFormTester( "form"); ft.submit(); assertEquals( DefaultGeographicCRS.WGS84, foo.crs ); } public void testPropertyChanged() throws Exception { Foo foo = new Foo( DefaultGeographicCRS.WGS84 ); tester.startPage( new CRSPanelTestPage( new PropertyModel( foo, "crs" ) )); TextField srs = (TextField) tester.getComponentFromLastRenderedPage( "form:crs:srs"); srs.setModelObject( "EPSG:3005"); FormTester ft = tester.newFormTester( "form"); ft.submit(); assertEquals( CRS.decode("EPSG:3005"), foo.crs ); } static class Foo implements Serializable { public CoordinateReferenceSystem crs; Foo( CoordinateReferenceSystem crs ) { this.crs = crs; } } }