/* * Copyright (c) 2001 - 2009 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.test; import junit.framework.Test; import org.w3c.dom.Document; /** * WFS GetFeature to test polymorphism mixed with inline mappings in Geoserver app-schema. * * @author Rini Angreani, CSIRO Earth Science and Resource Engineering */ public class PolymorphismInlineWfsTest extends AbstractAppSchemaWfsTestSupport { /** * Read-only test so can use one-time setup. * * @return */ public static Test suite() { PolymorphismInlineWfsTest test = new PolymorphismInlineWfsTest(); Test suite = new OneTimeTestSetup(test); return suite; } @Override protected NamespaceTestData buildTestData() { return new PolymorphismInlineMockData(); } /** * Test getFeature. Previously when there are multi-valued properties mapped separately, where * the first attribute can be omitted upon conditions, the rest of the properties don't get * encoded correctly when the first attribute is omitted. This is to make sure the fix won't be * broken in the future. See GEOT-3304. */ public void testGetFeature() { Document doc = getAsDOM("wfs?request=GetFeature&version=1.1.0&typename=ex:PolymorphicFeature"); LOGGER .info("WFS GetFeature&typename=ex:PolymorphicFeature response:\n" + prettyString(doc)); assertXpathCount(6, "//ex:PolymorphicFeature", doc); // f1 assertXpathEvaluatesTo("f1", "(//ex:PolymorphicFeature)[1]/@gml:id", doc); assertXpathCount(1, "//ex:PolymorphicFeature[@gml:id='f1']/ex:firstValue", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f1']/ex:firstValue/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "1", "//ex:PolymorphicFeature[@gml:id='f1']/ex:firstValue/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f1']/ex:firstValue/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); // f2 assertXpathEvaluatesTo("f2", "(//ex:PolymorphicFeature)[2]/@gml:id", doc); assertXpathCount(2, "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue", doc); assertXpathEvaluatesTo( "x", "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "some:uri", "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue[2]/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "0", "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f2']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); // f3 assertXpathEvaluatesTo("f3", "(//ex:PolymorphicFeature)[3]/@gml:id", doc); assertXpathCount(2, "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue", doc); assertXpathEvaluatesTo( "y", "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "some:uri", "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue[2]/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "0", "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f3']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); // f4 assertXpathEvaluatesTo("f4", "(//ex:PolymorphicFeature)[4]/@gml:id", doc); assertXpathCount(1, "//ex:PolymorphicFeature[@gml:id='f4']/ex:firstValue", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f4']/ex:firstValue/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "1", "//ex:PolymorphicFeature[@gml:id='f4']/ex:firstValue/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f4']/ex:firstValue/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); // f5 assertXpathEvaluatesTo("f5", "(//ex:PolymorphicFeature)[5]/@gml:id", doc); assertXpathCount(2, "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue", doc); assertXpathEvaluatesTo( "y", "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "some:uri", "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue[1]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue[2]/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "0", "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f5']/ex:firstValue[2]/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); // f6 assertXpathEvaluatesTo("f6", "(//ex:PolymorphicFeature)[6]/@gml:id", doc); assertXpathCount(1, "//ex:PolymorphicFeature[@gml:id='f6']/ex:firstValue", doc); assertXpathEvaluatesTo( "approximate", "//ex:PolymorphicFeature[@gml:id='f6']/ex:firstValue/gsml:CGI_TermValue/@gsml:qualifier", doc); assertXpathEvaluatesTo( "1000", "//ex:PolymorphicFeature[@gml:id='f6']/ex:firstValue/gsml:CGI_TermValue/gsml:value", doc); assertXpathEvaluatesTo( "codespace", "//ex:PolymorphicFeature[@gml:id='f6']/ex:firstValue/gsml:CGI_TermValue/gsml:value/@codeSpace", doc); } }