/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2007-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.metadata; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.opengis.metadata.citation.Citation; import org.geotools.metadata.iso.citation.CitationImpl; import org.geotools.metadata.iso.citation.Citations; import org.junit.*; import static org.junit.Assert.*; /** * Tests the {@link MetadataStandard} class. * * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux */ public final class MetadataStandardTest { /** * Tests the shallow equals and copy methods. */ @Test public void testEquals() { final MetadataStandard std = MetadataStandard.ISO_19115; Citation citation = Citations.EPSG; assertFalse(std.shallowEquals(citation, Citations.GEOTIFF, true )); assertFalse(std.shallowEquals(citation, Citations.GEOTIFF, false)); assertTrue (std.shallowEquals(citation, Citations.EPSG, false)); citation = new CitationImpl(); std.shallowCopy(Citations.EPSG, citation, true); assertFalse(std.shallowEquals(citation, Citations.GEOTIFF, true )); assertFalse(std.shallowEquals(citation, Citations.GEOTIFF, false)); assertTrue (std.shallowEquals(citation, Citations.EPSG, false)); try { std.shallowCopy(citation, Citations.EPSG, true); fail("Citations.EPSG should be unmodifiable."); } catch (UnmodifiableMetadataException e) { // This is the expected exception. } } /** * Tests the {@link PropertyMap} implementation. */ @Test public void testMap() { final Citation citation = new CitationImpl(Citations.EPSG); final Map<String,Object> map = MetadataStandard.ISO_19115.asMap(citation); assertFalse(map.isEmpty()); assertTrue (map.size() > 1); final Set<String> keys = map.keySet(); assertTrue ("Property exists and should be defined.", keys.contains("title")); assertFalse("Property exists but undefined for Citations.EPSG.", keys.contains("ISBN")); assertFalse("Property do not exists.", keys.contains("dummy")); final String s = keys.toString(); assertTrue (s.indexOf("title") >= 0); assertTrue (s.indexOf("identifiers") >= 0); assertFalse(s.indexOf("ISBN") >= 0); final Object identifiers = map.get("identifiers"); assertTrue(identifiers instanceof Collection); assertTrue(PropertyAccessorTest.containsEPSG(identifiers)); final Map<String,Object> copy = new HashMap<String,Object>(map); assertEquals(map, copy); // Note: AbstractCollection do not defines hashCode(); we have to wraps in a HashSet. final int hashCode = citation.hashCode(); assertEquals("hashCode() should be as in a Set.", hashCode, new HashSet<Object>(map .values()).hashCode()); assertEquals("hashCode() should be as in a Set.", hashCode, new HashSet<Object>(copy.values()).hashCode()); map.remove("identifiers"); final int newHashCode = citation.hashCode(); assertFalse(map.equals(copy)); assertFalse(hashCode == newHashCode); assertEquals(newHashCode, new HashSet<Object>(map.values()).hashCode()); } }