| /* |
| * 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; |
| |
| import java.util.Map; |
| import java.util.HashMap; |
| import org.opengis.metadata.citation.Citation; |
| import org.opengis.metadata.acquisition.EnvironmentalRecord; |
| import org.apache.sis.test.DependsOn; |
| import org.apache.sis.test.TestCase; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.*; |
| import static java.util.AbstractMap.SimpleEntry; |
| import static org.apache.sis.metadata.KeyNamePolicy.*; |
| |
| |
| /** |
| * Tests the {@link NameMap} class on instances created by |
| * {@link MetadataStandard#asNameMap(Class, KeyNamePolicy, KeyNamePolicy)}. |
| * Unless otherwise specified, all tests use the {@link MetadataStandard#ISO_19115} constant. |
| * |
| * @author Martin Desruisseaux (Geomatys) |
| * @version 1.0 |
| * @since 0.3 |
| * @module |
| */ |
| @DependsOn(PropertyAccessorTest.class) |
| public final strictfp class NameMapTest extends TestCase { |
| /** |
| * Tests {@code NameMap.entrySet()} for an exact match (including iteration order). |
| * The properties used in this test are listed in {@link PropertyAccessorTest#testConstructor()}. |
| * |
| * @see PropertyAccessorTest#testConstructor() |
| */ |
| @Test |
| public void testEntrySet() { |
| final Map<String,String> map = MetadataStandard.ISO_19115.asNameMap( |
| Citation.class, KeyNamePolicy.UML_IDENTIFIER, KeyNamePolicy.JAVABEANS_PROPERTY); |
| assertArrayEquals(new Object[] { |
| new SimpleEntry<>("title", "title"), |
| new SimpleEntry<>("alternateTitle", "alternateTitles"), |
| new SimpleEntry<>("date", "dates"), |
| new SimpleEntry<>("edition", "edition"), |
| new SimpleEntry<>("editionDate", "editionDate"), |
| new SimpleEntry<>("identifier", "identifiers"), |
| new SimpleEntry<>("citedResponsibleParty", "citedResponsibleParties"), |
| new SimpleEntry<>("presentationForm", "presentationForms"), |
| new SimpleEntry<>("series", "series"), |
| new SimpleEntry<>("otherCitationDetails", "otherCitationDetails"), |
| // new SimpleEntry<>("collectiveTitle", "collectiveTitle"), -- deprecated as of ISO 19115:2014 |
| new SimpleEntry<>("ISBN", "ISBN"), |
| new SimpleEntry<>("ISSN", "ISSN"), |
| new SimpleEntry<>("onlineResource", "onlineResources"), |
| new SimpleEntry<>("graphic", "graphics") |
| }, map.entrySet().toArray()); |
| |
| assertEquals("alternateTitles", map.get("alternateTitle")); |
| assertNull("Shall not exists.", map.get("dummy")); |
| } |
| |
| /** |
| * Tests the formatting of sentences. |
| */ |
| @Test |
| public void testSentences() { |
| final Map<String,String> map, expected = new HashMap<>(); |
| map = MetadataStandard.ISO_19115.asNameMap(EnvironmentalRecord.class, JAVABEANS_PROPERTY, SENTENCE); |
| assertNull(expected.put("averageAirTemperature", "Average air temperature")); |
| assertNull(expected.put("maxAltitude", "Max altitude")); |
| assertNull(expected.put("maxRelativeHumidity", "Max relative humidity")); |
| assertNull(expected.put("meteorologicalConditions", "Meteorological conditions")); |
| assertEquals(expected, map); |
| } |
| |
| /** |
| * Ensures that the string are interned. Note that the library will not break if strings are not interned; |
| * it would just consume more memory than needed. We want to intern those strings because they usually |
| * match method names or field names, which are already interned by the JVM. |
| * |
| * <h4>Explicit calls to {@code String.intern()}</h4> |
| * I though that annotation strings were interned like any other constants, but it does not |
| * seem to be the case as of JDK7. To check if a future JDK release still needs explicit |
| * call to {@link String#intern()}, try to remove the "{@code .intern()}" part in the |
| * {@link PropertyAccessor#name(int, KeyNamePolicy)} method and run this test again. |
| */ |
| @Test |
| public void testStringIntern() { |
| String name; |
| Map<String,String> map; |
| /* |
| * Tests explicit intern. |
| */ |
| map = MetadataStandard.ISO_19115.asNameMap(EnvironmentalRecord.class, SENTENCE, JAVABEANS_PROPERTY); |
| name = map.get("Average air temperature"); |
| assertEquals("averageAirTemperature", name); |
| assertSame ("averageAirTemperature", name); |
| /* |
| * Tests implicit intern. |
| */ |
| map = MetadataStandard.ISO_19115.asNameMap(EnvironmentalRecord.class, SENTENCE, METHOD_NAME); |
| name = map.get("Average air temperature"); |
| assertEquals("getAverageAirTemperature", name); |
| assertSame ("getAverageAirTemperature", name); |
| /* |
| * Tests another intern. |
| */ |
| map = MetadataStandard.ISO_19115.asNameMap(EnvironmentalRecord.class, SENTENCE, UML_IDENTIFIER); |
| name = map.get("Average air temperature"); |
| assertEquals("averageAirTemperature", name); |
| assertSame ("averageAirTemperature", name); |
| } |
| } |