/*
* 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&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);
}
}