blob: 84a76f01ee2cd57b4d8fc2e6e5717acae236e016 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sis.metadata.iso.content;
import javax.xml.bind.JAXBException;
import org.opengis.metadata.content.PolarizationOrientation;
import org.apache.sis.util.Version;
import org.apache.sis.test.xml.TestCase;
import org.junit.Test;
import static org.apache.sis.test.MetadataAssert.*;
/**
* Tests {@link DefaultBand}.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.1
* @since 1.1
* @module
*/
public final strictfp class DefaultBandTest extends TestCase {
/**
* The XML fragment used for testing.
*/
private static final String XML =
"<mrc:MI_Band xmlns:mrc=\"http://standards.iso.org/iso/19115/-3/mrc/1.0\" xmlns:gco=\"http://standards.iso.org/iso/19115/-3/gco/1.0\">\n"
+ " <mrc:numberOfValues>\n"
+ " <gco:Integer>1000</gco:Integer>\n" // Only in 2014 schema.
+ " </mrc:numberOfValues>\n"
+ " <mrc:nominalSpatialResolution>\n"
+ " <gco:Real>10.0</gco:Real>\n"
+ " </mrc:nominalSpatialResolution>\n"
+ " <mrc:detectedPolarisation>\n"
+ " <mrc:MI_PolarisationOrientationCode " // Spell with "s" in 2014 schema.
+ "codeList=\"http://standards.iso.org/iso/19115/resources/Codelist/cat/codelists.xml#MI_PolarisationOrientationCode\" codeListValue=\"vertical\">"
+ "Vertical"
+ "</mrc:MI_PolarisationOrientationCode>\n"
+ " </mrc:detectedPolarisation>\n"
+ "</mrc:MI_Band>\n";
/**
* XML fragment using legacy schema. This XML contains an {@link PolarisationOrientation} code list,
* which was spell with a "z" in the 2003 version of ISO 19115 standard. This XML is used for testing
* that the legacy spelling is handled when (un)marshalling a legacy document.
*/
private static final String XML_LEGACY =
"<gmi:MI_Band xmlns:gmi=\"http://standards.iso.org/iso/19115/-2/gmi/1.0\" xmlns:gco=\"http://www.isotc211.org/2005/gco\">\n"
+ " <gmi:nominalSpatialResolution>\n"
+ " <gco:Real>10.0</gco:Real>\n"
+ " </gmi:nominalSpatialResolution>\n"
+ " <gmi:detectedPolarisation>\n"
+ " <gmi:MI_PolarizationOrientationCode " // Spell with "z" in 2003 schema.
+ "codeList=\"http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MI_PolarisationOrientationCode\" codeListValue=\"vertical\">" +
"Vertical"
+ "</gmi:MI_PolarizationOrientationCode>\n"
+ " </gmi:detectedPolarisation>\n"
+ "</gmi:MI_Band>\n";
/**
* Tests marshalling a small metadata containing a {@link PolarisationOrientation}.
*
* @throws JAXBException if an error occurred during XML marshalling.
*/
@Test
public void testMarshalling() throws JAXBException {
marshal(VERSION_2014, XML);
}
/**
* Tests marshalling a small metadata in legacy XML schema.
*
* @throws JAXBException if an error occurred during XML marshalling.
*/
@Test
public void testMarshallingLegacy() throws JAXBException {
marshal(VERSION_2007, XML_LEGACY);
}
/**
* Implementation of marshalling tests.
*
* @param version version of the XML schema to test.
* @param expected expected XML fragment.
*/
private void marshal(final Version version, final String expected) throws JAXBException {
final DefaultBand band = new DefaultBand();
band.setNumberOfValues(1000);
band.setNominalSpatialResolution(10d);
band.setDetectedPolarization(PolarizationOrientation.VERTICAL);
final String actual = marshal(band, version);
assertXmlEquals(expected, actual, "xmlns:*");
}
/**
* Tests unmarshalling a small metadata containing a {@link PolarisationOrientation}.
*
* @throws JAXBException if an error occurred during XML unmarshalling.
*/
@Test
public void testUnmarshalling() throws JAXBException {
unmarshal(XML, 1000);
}
/**
* Tests unmarshalling a small metadata in legacy XML schema.
*
* @throws JAXBException if an error occurred during XML unmarshalling.
*/
@Test
public void testUnmarshallingLegacy() throws JAXBException {
unmarshal(XML_LEGACY, null);
}
/**
* Implementation of unmarshalling tests.
*
* @param xml XML fragment to test.
* @param numberOfValues expected values of {@code numberOfValues} property.
*/
private void unmarshal(final String xml, final Integer numberOfValues) throws JAXBException {
final DefaultBand band = unmarshal(DefaultBand.class, xml);
assertEquals(Double.valueOf(10), band.getNominalSpatialResolution());
assertEquals(PolarizationOrientation.VERTICAL, band.getDetectedPolarization());
assertEquals(numberOfValues, band.getNumberOfValues());
}
}