Author: desruisseaux
Date: Fri Mar 15 12:23:48 2013
New Revision: 1456927
URL: http://svn.apache.org/r1456927
Log:
Added tests for ConverterRegistry.
Added:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
(with props)
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
(with props)
Modified:
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/FallbackConverterTest.java
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/NumberConverterTest.java
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
Modified:
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java?rev=1456927&r1=1456926&r2=1456927&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
[UTF-8] (original)
+++
sis/branches/JDK7/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -306,8 +306,8 @@ public class ConverterRegistry {
*/
assert converter.getSourceClass() == key.sourceClass; // Enforced
by parameterized type.
if (existing.getSourceClass() == key.sourceClass) {
- final boolean oldIsExact = existing .getTargetClass() ==
key.targetClass;
- final boolean newIsExact = converter.getTargetClass() ==
key.targetClass;
+ final boolean oldIsExact = isExactlyFor(existing,
key.targetClass);
+ final boolean newIsExact = isExactlyFor(converter,
key.targetClass);
if (oldIsExact & !newIsExact) {
/*
* The existing converter was defined exactly for the
<S,T> classes, while the
@@ -332,6 +332,22 @@ public class ConverterRegistry {
}
/**
+ * Returns {@code true} if the given converter has exactly the given
target class.
+ * If the given converter is a {@link FallbackConverter}, then all
children shall
+ * have the same target type too.
+ */
+ private static boolean isExactlyFor(final ObjectConverter<?,?> converter,
final Class<?> targetClass) {
+ if (converter.getTargetClass() != targetClass) {
+ return false;
+ }
+ if (converter instanceof FallbackConverter<?,?>) {
+ final FallbackConverter<?,?> fc = (FallbackConverter<?,?>)
converter;
+ return isExactlyFor(fc.primary, targetClass) &&
isExactlyFor(fc.fallback, targetClass);
+ }
+ return true;
+ }
+
+ /**
* Returns a converter for exactly the given source and target classes.
* The default implementation invokes {@link #find(Class, Class)}, then
* ensures that the converter source and target classes are the same ones
@@ -459,8 +475,8 @@ public class ConverterRegistry {
* showing this ClassPair, then the actual converter
(source, target) as
* below:
*
- * String ⇨ Number (the ClassPair key)
- * └─String ⇨ Integer (the
ObjectConverter value)
+ * Number ← String (the ClassPair key)
+ * └─Integer ← String (the
ObjectConverter value)
*
* This is the same idea than the formatting done by
FallbackConverter,
* except that there is only one child. Actually this can
be though as
Added:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java?rev=1456927&view=auto
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
(added)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -0,0 +1,327 @@
+/*
+ * 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.converter;
+
+import java.util.Deque;
+import java.util.ArrayDeque;
+import java.io.Serializable;
+import org.apache.sis.util.ObjectConverter;
+import org.apache.sis.util.UnconvertibleObjectException;
+import org.apache.sis.test.DependsOnMethod;
+import org.apache.sis.test.DependsOn;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.apache.sis.test.Assert.*;
+
+
+/**
+ * Tests the {@link ConverterRegistry} implementation. Every tests in this
class uses their own
+ * instance of {@link ConverterRegistry}, so they are not affected by whatever
new converter may
+ * be added or removed from the system-wide registry.
+ *
+ * <p>This test shall not perform any conversion neither serialization. It
shall only ensures
+ * that the converters are properly registered. This is because some {@link
SystemConverter}
+ * methods may query back {@link HeuristicRegistry#SYSTEM} while we want to
keep the tests
+ * isolated.</p>
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @since 0.3 (derived from geotk-3.00)
+ * @version 0.3
+ * @module
+ */
+@DependsOn({FallbackConverterTest.class,
+ org.apache.sis.util.collection.TreeTableFormatTest.class})
+public final strictfp class ConverterRegistryTest extends TestCase {
+ /**
+ * The registry being tested.
+ */
+ private final ConverterRegistry registry = new ConverterRegistry();
+
+ /**
+ * All converters registered in a test case. Only the converter type and
properties
+ * will be verified; no conversion or serialization shall be attempted.
+ */
+ private Deque<ObjectConverter<?,?>> converters = new ArrayDeque<>();
+
+ /**
+ * Registers a converter to test.
+ */
+ private void register(final ObjectConverter<?,?> converter) {
+ converters.add(converter);
+ registry.register(converter);
+ }
+
+ /**
+ * Ensures that all converters tested so far are still registered.
+ */
+ private void assertAllConvertersAreRegistered() {
+ for (final ObjectConverter<?,?> converter : converters) {
+ assertSame(converter, registry.find(converter.getSourceClass(),
converter.getTargetClass()));
+ }
+ }
+
+ /**
+ * Ensures that the current converters is also registered for the given
target class.
+ * The given target may not be the same than the {@link
ObjectConverter#getTargetClass()}.
+ *
+ * @param targetClass The target class to ensure that the converter is
registered for.
+ */
+ private void assertSameConverterForTarget(final Class<?> targetClass) {
+ final ObjectConverter<?,?> converter = converters.peekLast();
+ final Class<?> sourceClass = converter.getSourceClass();
+ final ObjectConverter<?,?> actual;
+ try {
+ actual = registry.find(sourceClass, targetClass);
+ } catch (UnconvertibleObjectException e) {
+ fail("Converter ‘" + converter + "‛ was expected to be applicable
to ‘" +
+ targetClass.getSimpleName() + "‛ but got " + e);
+ return;
+ }
+ assertSame("Same converter shall be applicable to other target.",
converter, actual);
+ }
+
+ /**
+ * Ensures that there is no converter for the given target.
+ *
+ * @param targetClass The target which should not have any registered
converter.
+ */
+ private void assertNoConverterForTarget(final Class<?> targetClass) {
+ final ObjectConverter<?,?> converter = converters.peekLast();
+ final Class<?> sourceClass = converter.getSourceClass();
+ final ObjectConverter<?,?> actual;
+ try {
+ actual = registry.find(sourceClass, targetClass);
+ } catch (UnconvertibleObjectException e) {
+ // This is the expected exception
+ final String message = e.getMessage();
+ assertTrue(message, message.contains(sourceClass.getSimpleName()));
+ assertTrue(message, message.contains(targetClass.getSimpleName()));
+ return;
+ }
+ fail("Expected no converter from ‘" + sourceClass.getSimpleName() + "‛
to ‘" +
+ targetClass.getSimpleName() + "‛ but got " + actual);
+ }
+
+ /**
+ * Ensures that the converter for the given target is an {@link
IdentityConverter}.
+ *
+ * @param targetClass The target for which an identity converter should be
obtained.
+ */
+ private void assertIdentityForTarget(final Class<?> targetClass) {
+ final ObjectConverter<?,?> converter = converters.peekLast();
+ final Class<?> sourceClass = converter.getSourceClass();
+ final ObjectConverter<?,?> actual = registry.find(sourceClass,
targetClass);
+ final String message = sourceClass.getSimpleName() + " ← " +
targetClass.getSimpleName();
+ assertInstanceOf(message, IdentityConverter.class, actual);
+ assertSame(message, sourceClass, actual.getSourceClass());
+ assertSame(message, targetClass, actual.getTargetClass());
+ }
+
+ /**
+ * Asserts that the converter to the given target is a fallback having the
given string
+ * representation.
+ *
+ * @param expected The expected string representation of the fallback.
+ */
+ private void assertFallbackEquals(final Class<?> target, final String
expected) {
+ ObjectConverter<?,?> converter = converters.peekLast();
+ final Class<?> sourceClass = converter.getSourceClass();
+ converter = registry.find(sourceClass, target);
+ assertMultilinesEquals(expected, converter.toString());
+ }
+
+ /**
+ * Tests registration of converters from {@link String} to miscellaneous
objects.
+ * This method tests the addition of many converters because we want to
observe
+ * how {@linkplain #registry} grow in reaction to those additions.
+ */
+ @Test
+ public void testStringToMiscellaneous() {
+ assertAllConvertersAreRegistered();
+ register(StringConverter.Short.INSTANCE);
+ assertSameConverterForTarget(Short .class);
+ assertSameConverterForTarget(Number .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertIdentityForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertMultilinesEquals("After StringConverter.Short",
+ "ConverterRegistry\n" +
+ " ├─Short ← String\n" +
+ " ├─Number ← String\n" + // Same instance than above,
applied to Number target.
+ " │ └─Short ← String\n" +
+ " ├─Object ← String\n" +
+ " ├─Comparable ← String\n" +
+ " └─Serializable ← String\n", registry.toString());
+ /*
+ * Adds String ← Long
+ * Expected side-effect: creation of FallbackConverter[String ← Number]
+ */
+ assertAllConvertersAreRegistered();
+ assertNoConverterForTarget(Long.class);
+ register(StringConverter.Long.INSTANCE);
+ assertSameConverterForTarget(Long .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertIdentityForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertFallbackEquals (Number .class,
+ "Number ← String\n" +
+ " ├─Short ← String\n" +
+ " └─Long ← String\n");
+ assertMultilinesEquals("After StringConverter.Long",
+ "ConverterRegistry\n" +
+ " ├─Short ← String\n" +
+ " ├─Object ← String\n" +
+ " ├─Comparable ← String\n" +
+ " ├─Serializable ← String\n" +
+ " ├─Long ← String\n" +
+ " └─Number ← String\n" + // The FallbackConverter, which
replaced the previous.
+ " ├─Short ← String\n" +
+ " └─Long ← String\n", registry.toString());
+ /*
+ * Adds String ← Boolean
+ * Expected side-effect: none since Boolean is not a Number
+ */
+ assertAllConvertersAreRegistered();
+ assertNoConverterForTarget(Boolean.class);
+ register(StringConverter.Boolean.INSTANCE);
+ assertSameConverterForTarget(Boolean .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertIdentityForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertMultilinesEquals("After StringConverter.Boolean",
+ "ConverterRegistry\n" +
+ " ├─Short ← String\n" +
+ " ├─Object ← String\n" +
+ " ├─Comparable ← String\n" +
+ " ├─Serializable ← String\n" +
+ " ├─Long ← String\n" +
+ " ├─Number ← String\n" +
+ " │ ├─Short ← String\n" +
+ " │ └─Long ← String\n" +
+ " └─Boolean ← String\n", registry.toString());
+ /*
+ * Adds String ← Number
+ * Expected side-effect: replacement of the FallbackConverter
+ */
+ assertAllConvertersAreRegistered();
+ register(StringConverter.Number.INSTANCE);
+ assertSameConverterForTarget(Number .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertIdentityForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertMultilinesEquals("After StringConverter.Number",
+ "ConverterRegistry\n" +
+ " ├─Short ← String\n" +
+ " ├─Object ← String\n" +
+ " ├─Comparable ← String\n" +
+ " ├─Serializable ← String\n" +
+ " ├─Long ← String\n" +
+ " ├─Number ← String\n" + // Replaced the FallbackConverter.
+ " └─Boolean ← String\n", registry.toString());
+ /*
+ * Adds String ← Float
+ * Expected side-effect: none
+ */
+ assertAllConvertersAreRegistered();
+ assertNoConverterForTarget(Float.class);
+ register(StringConverter.Float.INSTANCE);
+ assertSameConverterForTarget(Float .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertIdentityForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertMultilinesEquals("After StringConverter.Float",
+ "ConverterRegistry\n" +
+ " ├─Short ← String\n" +
+ " ├─Object ← String\n" +
+ " ├─Comparable ← String\n" +
+ " ├─Serializable ← String\n" +
+ " ├─Long ← String\n" +
+ " ├─Number ← String\n" +
+ " ├─Boolean ← String\n" +
+ " └─Float ← String\n", registry.toString());
+ /*
+ * Final check.
+ */
+ assertAllConvertersAreRegistered();
+ }
+
+ /**
+ * Tests registration of converters between {@link Number} and
miscellaneous objects.
+ * This method tests the addition of many converters because we want to
observe
+ * how {@linkplain #registry} grow in reaction to those additions.
+ */
+ @Test
+ @DependsOnMethod("testStringToMiscellaneous")
+ public void testNumberToMiscellaneous() {
+ assertAllConvertersAreRegistered();
+ register(ObjectToString.NUMBER);
+ assertSameConverterForTarget(String .class);
+ assertIdentityForTarget (Object .class);
+ assertNoConverterForTarget (Cloneable .class);
+ assertNoConverterForTarget (Comparable .class);
+ assertIdentityForTarget (Serializable.class);
+ assertSameConverterForTarget(CharSequence.class);
+ assertMultilinesEquals("After ObjectToString.Number",
+ "ConverterRegistry\n" +
+ " ├─String ← Number\n" +
+ " ├─CharSequence ← Number\n" +
+ " │ └─String ← Number\n" +
+ " ├─Object ← Number\n" +
+ " └─Serializable ← Number\n", registry.toString());
+ /*
+ * Adds String ← Number
+ * Expected side-effect: none
+ */
+ assertAllConvertersAreRegistered();
+ register(StringConverter.Number.INSTANCE);
+ assertSameConverterForTarget(Number.class);
+ assertMultilinesEquals("After StringConverter.Number",
+ "ConverterRegistry\n" +
+ " ├─String ← Number\n" +
+ " ├─CharSequence ← Number\n" +
+ " │ └─String ← Number\n" +
+ " ├─Object ← Number\n" +
+ " ├─Serializable ← Number\n" +
+ " └─Number ← String\n", registry.toString());
+ /*
+ * Adds Number ← Float
+ * Expected side-effect: none
+ */
+ assertAllConvertersAreRegistered();
+ register(new NumberConverter<>(Number.class, Float.class));
+ assertSameConverterForTarget(Float.class);
+ assertMultilinesEquals("After NumberConverter.Float",
+ "ConverterRegistry\n" +
+ " ├─String ← Number\n" +
+ " ├─CharSequence ← Number\n" +
+ " │ └─String ← Number\n" +
+ " ├─Object ← Number\n" +
+ " ├─Serializable ← Number\n" +
+ " ├─Number ← String\n" +
+ " └─Float ← Number\n", registry.toString());
+ /*
+ * Final check.
+ */
+ assertAllConvertersAreRegistered();
+ }
+}
Propchange:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/ConverterRegistryTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Modified:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/FallbackConverterTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/FallbackConverterTest.java?rev=1456927&r1=1456926&r2=1456927&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/FallbackConverterTest.java
[UTF-8] (original)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/FallbackConverterTest.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -38,7 +38,8 @@ import static org.apache.sis.test.Assert
* @version 0.3
* @module
*/
-@DependsOn(org.apache.sis.util.collection.TreeTableFormatTest.class)
+@DependsOn({StringConverterTest.class,
+ org.apache.sis.util.collection.TreeTableFormatTest.class})
public final strictfp class FallbackConverterTest extends TestCase {
/**
* Conversions that are expected to be supported.
Added:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java?rev=1456927&view=auto
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
(added)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -0,0 +1,50 @@
+/*
+ * 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.converter;
+
+import org.apache.sis.util.ObjectConverter;
+import org.apache.sis.test.DependsOn;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.opengis.test.Assert.*;
+import static org.apache.sis.internal.converter.HeuristicRegistry.SYSTEM;
+
+
+/**
+ * Tests the {@link HeuristicRegistry#SYSTEM} constant.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @since 0.3 (derived from geotk-3.00)
+ * @version 0.3
+ * @module
+ */
+@DependsOn(ConverterRegistryTest.class)
+public final strictfp class HeuristicRegistryTest extends TestCase {
+ /**
+ * Tests the creation of {@link NumberConverter}.
+ */
+ @Test
+ public void testSystem() {
+ final ObjectConverter<Float,Double> c1 = SYSTEM.findExact(Float.class,
Double.class);
+ final ObjectConverter<Double,Float> c2 =
SYSTEM.findExact(Double.class, Float.class);
+ assertInstanceOf("Double ← Float", NumberConverter.class, c1);
+ assertInstanceOf("Float ← Double", NumberConverter.class, c2);
+ assertSame("inverse()", c2, c1.inverse());
+ assertSame("inverse()", c1, c2.inverse());
+ }
+}
Propchange:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/HeuristicRegistryTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Modified:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/NumberConverterTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/NumberConverterTest.java?rev=1456927&r1=1456926&r2=1456927&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/NumberConverterTest.java
[UTF-8] (original)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/internal/converter/NumberConverterTest.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -21,6 +21,7 @@ import java.math.BigDecimal;
import org.apache.sis.math.FunctionProperty;
import org.apache.sis.util.ObjectConverter;
import org.apache.sis.util.UnconvertibleObjectException;
+import org.apache.sis.test.DependsOn;
import org.apache.sis.test.TestCase;
import org.junit.Test;
@@ -35,6 +36,7 @@ import static org.apache.sis.test.Assert
* @version 0.3
* @module
*/
+@DependsOn(HeuristicRegistryTest.class)
public final strictfp class NumberConverterTest extends TestCase {
/**
* Creates a {@link NumberConverter} for the given source and target
classes.
Modified:
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java?rev=1456927&r1=1456926&r2=1456927&view=diff
==============================================================================
---
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
[UTF-8] (original)
+++
sis/branches/JDK7/sis-utility/src/test/java/org/apache/sis/test/suite/UtilityTestSuite.java
[UTF-8] Fri Mar 15 12:23:48 2013
@@ -95,8 +95,10 @@ import org.junit.runners.Suite;
org.apache.sis.internal.converter.URLConverterTest.class,
org.apache.sis.internal.converter.FileConverterTest.class,
org.apache.sis.internal.converter.StringConverterTest.class,
- org.apache.sis.internal.converter.NumberConverterTest.class,
org.apache.sis.internal.converter.FallbackConverterTest.class,
+ org.apache.sis.internal.converter.ConverterRegistryTest.class,
+ org.apache.sis.internal.converter.HeuristicRegistryTest.class,
+ org.apache.sis.internal.converter.NumberConverterTest.class, // Shall be
after HeuristicRegistryTest.
// XML most basic types.
org.apache.sis.xml.XLinkTest.class,