You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2013/06/19 19:46:14 UTC

svn commit: r1494708 - in /sis/branches/JDK7/core: sis-metadata/src/main/java/org/apache/sis/metadata/iso/ sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/ sis-utility/src/test/java...

Author: desruisseaux
Date: Wed Jun 19 17:46:14 2013
New Revision: 1494708

URL: http://svn.apache.org/r1494708
Log:
Added tests for PropertyType (part of 'gco' namespace in ISO 19139 XML).

Added:
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java   (with props)
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java   (with props)
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java   (with props)
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java   (with props)
Modified:
    sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
    sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringConverter.java
    sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectReference.java
    sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java
    sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
    sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java

Modified: sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -104,20 +104,24 @@ public class ISOMetadata extends Modifia
     /**
      * {@inheritDoc}
      *
-     * <p>The default implementation returns a wrapper around the list returned by {@link #getIdentifiers()}.
+     * <p>The default implementation returns a wrapper around the {@link #identifiers} list.
      * That map is <cite>live</cite>: changes in the identifiers list will be reflected in the map,
      * and conversely.</p>
      */
     @Override
     public IdentifierMap getIdentifierMap() {
         /*
-         * We do not cache (for now) the IdentifierMap because it is cheap to create, and if were
-         * caching it we would need anyway to check if 'identifiers' still references the same list.
+         * Do not invoke getIdentifiers(), because some subclasses like DefaultCitation and
+         * DefaultObjective override getIdentifiers() in order to return a filtered list.
          */
-        final Collection<Identifier> identifiers = getIdentifiers();
+        identifiers = nonNullCollection(identifiers, Identifier.class);
         if (identifiers == null) {
             return IdentifierMapWithSpecialCases.EMPTY;
         }
+        /*
+         * We do not cache (for now) the IdentifierMap because it is cheap to create, and if were
+         * caching it we would need anyway to check if 'identifiers' still references the same list.
+         */
         return new IdentifierMapWithSpecialCases(identifiers);
     }
 }

Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringConverter.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringConverter.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringConverter.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringConverter.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -58,6 +58,6 @@ public final class InternationalStringCo
      */
     @Override
     public String marshal(final InternationalString value) {
-        return (value != null) ? value.toString() : null;
+        return StringAdapter.toString(value);
     }
 }

Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectReference.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectReference.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectReference.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectReference.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -17,7 +17,6 @@
 package org.apache.sis.internal.jaxb.gco;
 
 import java.util.UUID;
-
 import org.apache.sis.xml.XLink;
 import org.apache.sis.xml.IdentifierMap;
 import org.apache.sis.xml.IdentifierSpace;
@@ -129,7 +128,7 @@ final class ObjectReference {
                 metadata = resolver.newIdentifiedObject(context, type, identifiers);
             }
         } else {
-            // If principle, the XML should contain a full metadata object OR a uuidref attribute.
+            // In principle, the XML should contain a full metadata object OR a uuidref attribute.
             // However if both are present, assign the identifiers to that instance.
             if (metadata instanceof IdentifiedObject) {
                 final IdentifierMap map = ((IdentifiedObject) metadata).getIdentifierMap();

Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -28,6 +28,7 @@ import org.apache.sis.xml.Namespaces;
 import org.apache.sis.xml.IdentifierMap;
 import org.apache.sis.xml.IdentifierSpace;
 import org.apache.sis.xml.IdentifiedObject;
+import org.apache.sis.xml.ReferenceResolver;
 import org.apache.sis.internal.jaxb.Context;
 import org.apache.sis.util.iso.SimpleInternationalString;
 
@@ -112,12 +113,12 @@ public abstract class PropertyType<Value
         extends XmlAdapter<ValueType,BoundType>
 {
     /**
-     * The wrapped GeoAPI metadata interface.
+     * The wrapped GeoAPI metadata instance.
      */
     protected BoundType metadata;
 
     /**
-     * Either an {@link ObjectReference} or a {@link String}.
+     * Either {@code null}, an {@link ObjectReference} or a {@link String}.
      *
      * <ul>
      *   <li>{@link ObjectReference} defines the {@code idref}, {@code uuidref}, {@code xlink:href},
@@ -138,34 +139,44 @@ public abstract class PropertyType<Value
     }
 
     /**
-     * Builds an adapter for the given GeoAPI interface.
+     * Builds an adapter for the given GeoAPI interface. This constructor checks if the given metadata
+     * implements the {@link NilObject} or {@link IdentifiedObject} interface. If the object implements
+     * both of them (should not happen, but we never know), then the identifiers will have precedence.
      *
      * @param metadata The interface to wrap.
      */
     protected PropertyType(final BoundType metadata) {
         this.metadata = metadata;
+        if (metadata instanceof NilObject) {
+            final NilReason reason = ((NilObject) metadata).getNilReason();
+            if (reason != null) {
+                reference = reason.toString();
+            }
+        }
         if (metadata instanceof IdentifiedObject) {
             final IdentifierMap map = ((IdentifiedObject) metadata).getIdentifierMap();
             XLink  link = map.getSpecialized(IdentifierSpace.XLINK);
             UUID   uuid = map.getSpecialized(IdentifierSpace.UUID);
             String anyUUID = (uuid != null) ? uuid.toString() : map.get(IdentifierSpace.UUID);
             if (anyUUID != null || link != null) {
-                final Context context = Context.current();
+                final Context           context  = Context.current();
+                final ReferenceResolver resolver = Context.resolver(context);
+                final Class<BoundType>  type     = getBoundType();
                 if (uuid == null) {
                     uuid = ObjectReference.toUUID(context, anyUUID); // May still null.
                 }
-                if (uuid == null || Context.resolver(context).canSubstituteByReference(context, getBoundType(), metadata, uuid)) {
+                // Check if the user gives us the permission to use those identifiers.
+                if (uuid != null && !resolver.canSubstituteByReference(context, type, metadata, uuid)) {
+                    uuid = null;
+                }
+                if (link != null && !resolver.canSubstituteByReference(context, type, metadata, link)) {
+                    link = null;
+                }
+                if (uuid != null || link != null) {
                     reference = new ObjectReference(uuid, anyUUID, link);
-                    return;
                 }
             }
         }
-        if (metadata instanceof NilObject) {
-            final NilReason reason = ((NilObject) metadata).getNilReason();
-            if (reason != null) {
-                reference = reason.toString();
-            }
-        }
     }
 
     /**
@@ -370,7 +381,7 @@ public abstract class PropertyType<Value
     @XmlAttribute(name = "title", namespace = Namespaces.XLINK)
     public final String getTitle() {
         final XLink link = xlink(false);
-        return (link != null) ? toString(link.getTitle()) : null;
+        return (link != null) ? StringAdapter.toString(link.getTitle()) : null;
     }
 
     /**

Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -48,28 +48,38 @@ public final class StringAdapter extends
      * If the context is {@code null} or does not specify any locale, then the choice
      * of locale is left to the {@link InternationalString#toString()} implementation.
      *
-     * @param  value The wrapper for the value, or {@code null}.
-     * @return The string representation of the given text, or {@code null}.
+     * @param  text The {@code CharSequence} to convert to a {@code String}, or {@code null}.
+     * @return The localized representation of the given text, or {@code null} if the text was null.
+     *
+     * @see org.apache.sis.xml.XML#LOCALE
      */
-    public static String toString(final GO_CharacterString value) {
-        if (value != null) {
-            final CharSequence text = value.toCharSequence();
-            if (text != null) {
-                if (text instanceof InternationalString) {
-                    final Context context = Context.current();
-                    if (context != null) {
-                        final Locale locale = context.getLocale();
-                        if (locale != null) {
-                            // While Apache SIS accepts null locale, foreigner
-                            // implementations are not guaranteed to support null.
-                            return ((InternationalString) text).toString(locale);
-                        }
-                    }
+    static String toString(final CharSequence text) {
+        if (text == null) {
+            return null;
+        }
+        if (text instanceof InternationalString) {
+            final Context context = Context.current();
+            if (context != null) {
+                final Locale locale = context.getLocale();
+                if (locale != null) {
+                    // While Apache SIS accepts null locale, foreigner
+                    // implementations are not guaranteed to support null.
+                    return ((InternationalString) text).toString(locale);
                 }
-                return text.toString();
             }
         }
-        return null;
+        return text.toString();
+    }
+
+    /**
+     * Returns the string representation of the given {@code GO_CharacterString} for the current locale.
+     * The locale is determined by the {@link org.apache.sis.xml.XML#LOCALE} property given to the marshaller.
+     *
+     * @param  value The wrapper for the value, or {@code null}.
+     * @return The string representation of the given text, or {@code null}.
+     */
+    public static String toString(final GO_CharacterString value) {
+        return (value != null) ? toString(value.toCharSequence()) : null;
     }
 
     /**

Added: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java?rev=1494708&view=auto
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java (added)
+++ sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -0,0 +1,100 @@
+/*
+ * 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.internal.jaxb.gco;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.opengis.metadata.Identifier;
+import org.opengis.metadata.quality.Result;
+import org.apache.sis.xml.IdentifiedObject;
+import org.apache.sis.xml.IdentifierMap;
+import org.apache.sis.internal.jaxb.IdentifierMapWithSpecialCases;
+
+
+/**
+ * A dummy {@link PropertyType} implementation, as a wrapper for instances of the
+ * GeoAPI {@link Result} interface.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.3
+ * @version 0.3
+ * @module
+ */
+final strictfp class PropertyTypeMock extends PropertyType<PropertyTypeMock, Result> {
+    /**
+     * Creates a new adapter. Only the {@link #marshal(Object)}
+     * method shall be invoked on that new instance.
+     */
+    PropertyTypeMock() {
+    }
+
+    /**
+     * Creates a new wrapper around the given metadata.
+     * This constructor is for the {@link #wrap} method only.
+     */
+    private PropertyTypeMock(final Result metadata) {
+        super(metadata);
+    }
+
+    /**
+     * Invoked by {@link #marshal(Object)} for wrapping the given pseudo-metadata value.
+     * If this {@code PropertyTypeMock} class was not for testing purpose only,
+     * this method would be invoked by JAXB at marshalling time.
+     *
+     * @param  metadata The pseudo-metadata element to wrap.
+     * @return A {@code PropertyType} wrapping the given the metadata element.
+     */
+    @Override
+    protected PropertyTypeMock wrap(final Result metadata) {
+        return new PropertyTypeMock(metadata);
+    }
+
+    /**
+     * The metadata interface implemented by the objects wrapped by {@code PropertyTypeMock}.
+     */
+    @Override
+    protected Class<Result> getBoundType() {
+        return Result.class;
+    }
+
+    /**
+     * A dummy implementation of the {@link Result} interface, to be used together with {@link PropertyTypeMock}.
+     */
+    static final class Value implements IdentifiedObject, Result {
+        /** All identifiers associated with this metadata. */
+        private final Collection<Identifier> identifiers;
+
+        /** A view of the identifiers as a map. */
+        private final IdentifierMap map;
+
+        /** Creates a new instance with initially no identifier. */
+        Value() {
+            identifiers = new ArrayList<>();
+            map = new IdentifierMapWithSpecialCases(identifiers);
+        }
+
+        /** Returns the identifiers as a modifiable list. */
+        @Override public Collection<? extends Identifier> getIdentifiers() {
+            return identifiers;
+        }
+
+        /** Returns a view of the identifiers as a map. */
+        @Override public IdentifierMap getIdentifierMap() {
+            return map;
+        }
+    }
+}

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeMock.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java?rev=1494708&view=auto
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java (added)
+++ sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -0,0 +1,166 @@
+/*
+ * 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.internal.jaxb.gco;
+
+import java.util.UUID;
+import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.xml.XLink;
+import org.apache.sis.xml.IdentifierSpace;
+import org.apache.sis.xml.ReferenceResolverMock;
+import org.apache.sis.test.DependsOn;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Test {@link PropertyType}.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.3
+ * @version 0.3
+ * @module
+ */
+@DependsOn(org.apache.sis.internal.jaxb.IdentifierMapAdapterTest.class)
+public final strictfp class PropertyTypeTest extends TestCase {
+    /**
+     * The pseudo-metadata object to wrap for testing purpose.
+     */
+    private final PropertyTypeMock.Value metadata = new PropertyTypeMock.Value();
+
+    /**
+     * Simulates the marshalling of the {@link #metadata} value.
+     */
+    private PropertyTypeMock marshal() {
+        /*
+         * The 'new PropertyTypeMock()' below is for creating the adapter, not the wrapper. The wrapper is created
+         * by the 'marshal' call. This is because our PropertyType implementations are both adapters and wrappers.
+         */
+        return new PropertyTypeMock().marshal(metadata);
+    }
+
+    /**
+     * Tests the construction of a plain property (no identifier).
+     *
+     * @throws Exception Should never happen.
+     */
+    @Test
+    public void testWithNoReference() throws Exception {
+        final PropertyTypeMock property = marshal();
+        assertSame(metadata, property.metadata);
+        assertNoReference(property);
+    }
+
+    /**
+     * Asserts that the given property has no UUID, XLink or other references.
+     */
+    private static void assertNoReference(final PropertyType<?,?> property) {
+        assertNull ("nilReason", property.getNilReason());
+        assertNull ("uuidref",   property.getUUIDREF());
+        assertNull ("href",      property.getHRef());
+        assertNull ("role",      property.getRole());
+        assertNull ("arcrole",   property.getArcRole());
+        assertNull ("title",     property.getTitle());
+        assertNull ("show",      property.getShow());
+        assertNull ("actuate",   property.getActuate());
+        assertFalse("skip",      property.skip());
+    }
+
+    /**
+     * Tests the construction of an object containing {@code UUID} and {@code XLink} references,
+     * which shall be discarded because didn't gave us the authorization to use them.
+     *
+     * @throws Exception Should never happen.
+     */
+    @Test
+    public void testWithDiscardedReferences() throws Exception {
+        final UUID  uuid = UUID.randomUUID();
+        final XLink link = createXLink();
+        metadata.getIdentifierMap().putSpecialized(IdentifierSpace.UUID,  uuid);
+        metadata.getIdentifierMap().putSpecialized(IdentifierSpace.XLINK, link);
+        final PropertyTypeMock property = marshal();
+        assertSame(metadata, property.metadata);
+        assertNoReference(property);
+    }
+
+    /**
+     * Tests the construction of an object containing a {@link UUID}.
+     *
+     * @throws Exception Should never happen.
+     */
+    @Test
+    public void testWithUUID() throws Exception {
+        final UUID uuid = UUID.randomUUID();
+        metadata.getIdentifierMap().putSpecialized(IdentifierSpace.UUID, uuid);
+        final Context context = ReferenceResolverMock.begin(true);
+        final PropertyTypeMock property;
+        try {
+            property = marshal();
+        } finally {
+            context.finish();
+        }
+        assertSame  (metadata,        property.metadata);
+        assertNull  ("nilReason",     property.getNilReason());
+        assertEquals(uuid.toString(), property.getUUIDREF());
+        assertNull  ("href",          property.getHRef());
+        assertNull  ("role",          property.getRole());
+        assertNull  ("arcrole",       property.getArcRole());
+        assertNull  ("title",         property.getTitle());
+        assertNull  ("show",          property.getShow());
+        assertNull  ("actuate",       property.getActuate());
+    }
+
+    /**
+     * Creates a dummy XLink.
+     */
+    private static XLink createXLink() {
+        final XLink link = new XLink();
+        link.setShow(XLink.Show.REPLACE);
+        link.setActuate(XLink.Actuate.ON_LOAD);
+        link.setTitle(new SimpleInternationalString("myResult"));
+        return link;
+    }
+
+    /**
+     * Tests the construction of an object containing a {@link XLink}.
+     *
+     * @throws Exception Should never happen.
+     */
+    @Test
+    public void testWithXLink() throws Exception {
+        final XLink link = createXLink();
+        metadata.getIdentifierMap().putSpecialized(IdentifierSpace.XLINK, link);
+        final Context context = ReferenceResolverMock.begin(true);
+        final PropertyTypeMock property;
+        try {
+            property = marshal();
+        } finally {
+            context.finish();
+        }
+        assertSame  (metadata,              property.metadata);
+        assertNull  ("nilReason",           property.getNilReason());
+        assertNull  ("uuidref",             property.getUUIDREF());
+        assertNull  ("href",                property.getHRef());
+        assertNull  ("role",                property.getRole());
+        assertNull  ("arcrole",             property.getArcRole());
+        assertEquals("myResult",            property.getTitle());
+        assertEquals(XLink.Show.REPLACE,    property.getShow());
+        assertEquals(XLink.Actuate.ON_LOAD, property.getActuate());
+    }
+}

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/PropertyTypeTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java?rev=1494708&view=auto
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java (added)
+++ sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -0,0 +1,81 @@
+/*
+ * 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.internal.jaxb.gco;
+
+import java.util.Locale;
+import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.util.iso.DefaultInternationalString;
+import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.test.DependsOnMethod;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Tests {@link StringAdapter}
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.3
+ * @version 0.3
+ * @module
+ */
+public final strictfp class StringAdapterTest extends TestCase {
+    /**
+     * Tests {@link StringAdapter#toString(CharSequence)} for the trivial cases.
+     */
+    @Test
+    public void testToUnlocalizedString() {
+        assertNull  (        StringAdapter.toString((CharSequence) null));
+        assertEquals("Test", StringAdapter.toString("Test"));
+        assertEquals("Test", StringAdapter.toString(new SimpleInternationalString("Test")));
+    }
+
+    /**
+     * Tests {@link StringAdapter#toString(CharSequence)} for an {@link InternationalString}
+     * having loalization in different languages.
+     */
+    @Test
+    @DependsOnMethod("testToUnlocalizedString")
+    public void testToLocalizedString() {
+        final DefaultInternationalString i18n = new DefaultInternationalString();
+        i18n.add(Locale.ENGLISH,  "A word");
+        i18n.add(Locale.FRENCH,   "Un mot");
+        i18n.add(Locale.JAPANESE, "言葉");
+        Context.push(Locale.JAPANESE);
+        try {
+            assertEquals("言葉", StringAdapter.toString(i18n));
+            Context.push(Locale.FRENCH);
+            try {
+                assertEquals("Un mot", StringAdapter.toString(i18n));
+                Context.push(Locale.ENGLISH);
+                try {
+                    assertEquals("A word", StringAdapter.toString(i18n));
+                } finally {
+                    Context.pull();
+                }
+                assertEquals("Un mot", StringAdapter.toString(i18n));
+            } finally {
+                Context.pull();
+            }
+            assertEquals("言葉", StringAdapter.toString(i18n));
+        } finally {
+            Context.pull();
+        }
+    }
+}

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/internal/jaxb/gco/StringAdapterTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Modified: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java?rev=1494708&r1=1494707&r2=1494708&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -114,7 +114,9 @@ import org.junit.BeforeClass;
     org.apache.sis.xml.OGCNamespacePrefixMapperTest.class,
     org.apache.sis.xml.MarshallerPoolTest.class,
     org.apache.sis.internal.jaxb.IdentifierMapAdapterTest.class,
-    org.apache.sis.internal.jaxb.IdentifierMapWithSpecialCasesTest.class
+    org.apache.sis.internal.jaxb.IdentifierMapWithSpecialCasesTest.class,
+    org.apache.sis.internal.jaxb.gco.StringAdapterTest.class,
+    org.apache.sis.internal.jaxb.gco.PropertyTypeTest.class
 })
 public final strictfp class UtilityTestSuite extends TestSuite {
     /**

Added: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java?rev=1494708&view=auto
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java (added)
+++ sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java [UTF-8] Wed Jun 19 17:46:14 2013
@@ -0,0 +1,76 @@
+/*
+ * 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.xml;
+
+import java.util.UUID;
+import org.apache.sis.internal.jaxb.Context;
+
+
+/**
+ * A dummy implementation of {@link ReferenceResolver} which authorizes the replacement of metadata objects
+ * by their {@link XLink} or {@link UUID} references. This resolver is used in test cases wanting to verify
+ * identifier substitutions.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.3
+ * @version 0.3
+ * @module
+ */
+public final strictfp class ReferenceResolverMock extends ReferenceResolver {
+    /**
+     * Creates a new reference resolver.
+     */
+    private ReferenceResolverMock() {
+    }
+
+    /**
+     * Creates a new SIS context using a {@code ReferenceResolverMock}.
+     * Callers shall use this method in a {@code try} … {@code finally} block as below:
+     *
+     * {@preformat java
+     *     final Context context = ReferenceResolverMock.begin(true);
+     *     try {
+     *         // So some test
+     *     } finally {
+     *         context.finish();
+     *     }
+     * }
+     *
+     * @param  marshalling {@code true} for marshalling, or {@code false} for unmarshalling.
+     * @return The (un)marshalling context.
+     */
+    public static Context begin(final boolean marshalling) {
+        return new Context(null, new ReferenceResolverMock(), null, null, null, null,
+                marshalling ? Context.MARSHALLING : 0);
+    }
+
+    /**
+     * Unconditionally returns {@code true}.
+     */
+    @Override
+    public <T> boolean canSubstituteByReference(final MarshalContext context, final Class<T> type, final T object, final UUID uuid) {
+        return true;
+    }
+
+    /**
+     * Unconditionally returns {@code true}.
+     */
+    @Override
+    public <T> boolean canSubstituteByReference(final MarshalContext context, final Class<T> type, final T object, final XLink link) {
+        return true;
+    }
+}

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK7/core/sis-utility/src/test/java/org/apache/sis/xml/ReferenceResolverMock.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8