This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 51cfa9cbab075c91455e9d7188f79f9e92132a2a
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Sat Jul 16 19:04:36 2022 +0200

    Better error message for invalid sexagesimal angles.
---
 .../org/apache/sis/measure/SexagesimalConverter.java   | 14 ++++++--------
 .../java/org/apache/sis/util/resources/Errors.java     | 12 ++++++------
 .../org/apache/sis/util/resources/Errors.properties    |  2 +-
 .../org/apache/sis/util/resources/Errors_fr.properties |  2 +-
 .../apache/sis/measure/SexagesimalConverterTest.java   | 18 +++++++++++++++++-
 5 files changed, 31 insertions(+), 17 deletions(-)

diff --git 
a/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
 
b/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
index bb87fd296a..0e9122189e 100644
--- 
a/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
+++ 
b/core/sis-utility/src/main/java/org/apache/sis/measure/SexagesimalConverter.java
@@ -20,7 +20,6 @@ import javax.measure.Unit;
 import javax.measure.quantity.Angle;
 import javax.measure.UnitConverter;
 import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.math.MathFunctions;
 
@@ -40,7 +39,7 @@ import static org.apache.sis.math.MathFunctions.truncate;
  * This class and all inner classes are immutable, and thus inherently 
thread-safe.
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 1.0
+ * @version 1.2
  * @since   0.3
  * @module
  */
@@ -280,7 +279,7 @@ class SexagesimalConverter extends AbstractConverter {
                     if (min >= 0) deg++; else deg--;
                     min = 0;
                 } else {
-                    throw illegalField(angle, min, 
Vocabulary.Keys.AngularMinutes);
+                    throw illegalField(angle, min, 0);
                 }
             }
             if (sec <= -60 || sec >= 60) {                              // Do 
not enter for NaN
@@ -288,7 +287,7 @@ class SexagesimalConverter extends AbstractConverter {
                     if (sec >= 0) min++; else min--;
                     sec = 0;
                 } else {
-                    throw illegalField(angle, sec, 
Vocabulary.Keys.AngularSeconds);
+                    throw illegalField(angle, sec, 1);
                 }
             }
             return (sec/60 + min)/60 + deg;
@@ -299,12 +298,11 @@ class SexagesimalConverter extends AbstractConverter {
          *
          * @param  value  the user-supplied angle value.
          * @param  field  the value of the illegal field.
-         * @param  unit   the vocabulary key for the field (minutes or 
seconds).
+         * @param  unit   0 for minutes or 1 for seconds.
          * @return the exception to throw.
          */
-        private static IllegalArgumentException illegalField(final double 
value, final double field, final short unit) {
-            return new 
IllegalArgumentException(Errors.format(Errors.Keys.IllegalArgumentField_4,
-                    "angle", value, Vocabulary.format(unit), field));
+        private static IllegalArgumentException illegalField(final double 
value, final double field, final int unit) {
+            return new 
IllegalArgumentException(Errors.format(Errors.Keys.IllegalSexagesimalField_3, 
value, unit, field));
         }
     }
 }
diff --git 
a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java 
b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
index 739c255be8..7b3d1dfe90 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
@@ -339,12 +339,6 @@ public final class Errors extends IndexedResourceBundle {
          */
         public static final short IllegalArgumentClass_3 = 43;
 
-        /**
-         * Argument ‘{0}’ can not take the “{1}” value, because the ‘{2}’ 
field can not take the “{3}”
-         * value.
-         */
-        public static final short IllegalArgumentField_4 = 44;
-
         /**
          * Argument ‘{0}’ can not take the “{1}” value.
          */
@@ -435,6 +429,12 @@ public final class Errors extends IndexedResourceBundle {
          */
         public static final short IllegalRange_2 = 60;
 
+        /**
+         * Sexagesimal angle {0,number} is illegal because the 
{1,choice,0#minutes|1#seconds} field can
+         * not take the {2,number} value.
+         */
+        public static final short IllegalSexagesimalField_3 = 44;
+
         /**
          * Value {1} for “{0}” is not a valid Unicode code point.
          */
diff --git 
a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
 
b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
index c0b3168576..8ea926426d 100644
--- 
a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
+++ 
b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
@@ -79,7 +79,6 @@ ForbiddenAttribute_2              = Attribute \u201c{0}\u201d 
is not allowed for
 ForbiddenProperty_1               = Property \u201c{0}\u201d is not allowed.
 IllegalArgumentClass_2            = Argument \u2018{0}\u2019 can not be an 
instance of \u2018{1}\u2019.
 IllegalArgumentClass_3            = Argument \u2018{0}\u2019 can not be an 
instance of \u2018{2}\u2019. Expected an instance of \u2018{1}\u2019 or derived 
type.
-IllegalArgumentField_4            = Argument \u2018{0}\u2019 can not take the 
\u201c{1}\u201d value, because the \u2018{2}\u2019 field can not take the 
\u201c{3}\u201d value.
 IllegalArgumentValue_2            = Argument \u2018{0}\u2019 can not take the 
\u201c{1}\u201d value.
 IllegalBitsPattern_1              = Illegal bits pattern: {0}.
 IllegalCharacter_2                = The \u201c{1}\u201d character can not be 
used for \u201c{0}\u201d.
@@ -98,6 +97,7 @@ IllegalPropertyValue_2            = Property \u201c{0}\u201d 
can not take the \u
 IllegalPropertyValueClass_2       = Property \u201c{0}\u201d does not accept 
instances of \u2018{1}\u2019.
 IllegalPropertyValueClass_3       = Expected an instance of \u2018{1}\u2019 
for the \u201c{0}\u201d property, but got an instance of \u2018{2}\u2019.
 IllegalRange_2                    = Range [{0} \u2026 {1}] is not valid.
+IllegalSexagesimalField_3         = Sexagesimal angle {0,number} is illegal 
because the {1,choice,0#minutes|1#seconds} field can not take the {2,number} 
value.
 IllegalUnicodeCodePoint_2         = Value {1} for \u201c{0}\u201d is not a 
valid Unicode code point.
 IllegalValueForProperty_2         = Illegal value for property \u201c{1}\u201d 
in \u201c{0}\u201d.
 IncompatibleFormat_2              = Can not use the {1} format with 
\u201c{0}\u201d.
diff --git 
a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
 
b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
index b93ab77358..673dd4df77 100644
--- 
a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
+++ 
b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
@@ -76,7 +76,6 @@ ForbiddenAttribute_2              = L\u2019attribut 
\u00ab\u202f{0}\u202f\u00bb
 ForbiddenProperty_1               = La propri\u00e9t\u00e9 
\u00ab\u202f{0}\u202f\u00bb n\u2019est pas autoris\u00e9e.
 IllegalArgumentClass_2            = L\u2019argument \u2018{0}\u2019 ne peut 
pas \u00eatre de type \u2018{1}\u2019.
 IllegalArgumentClass_3            = L\u2019argument \u2018{0}\u2019 ne peut 
pas \u00eatre de type \u2018{2}\u2019. Une instance de \u2018{1}\u2019 ou 
d\u2019un type d\u00e9riv\u00e9 \u00e9tait attendue.
-IllegalArgumentField_4            = L\u2019argument \u2018{0}\u2019 
n\u2019accepte pas la valeur \u00ab\u202f{1}\u202f\u00bb parce que le champs 
\u2018{2}\u2019 ne peut pas prendre la valeur \u00ab\u202f{3}\u202f\u00bb.
 IllegalArgumentValue_2            = L\u2019argument \u2018{0}\u2019 
n\u2019accepte pas la valeur \u00ab\u202f{1}\u202f\u00bb.
 IllegalBitsPattern_1              = Pattern de bits invalide\u00a0: {0}.
 IllegalClass_2                    = La classe \u2018{1}\u2019 est 
ill\u00e9gale. Il doit s\u2019agir d\u2019une classe \u2018{0}\u2019 ou 
d\u00e9riv\u00e9e.
@@ -95,6 +94,7 @@ IllegalPropertyValue_2            = La propri\u00e9t\u00e9 
\u00ab\u202f{0}\u202f
 IllegalPropertyValueClass_2       = La propri\u00e9t\u00e9 
\u00ab\u202f{0}\u202f\u00bb n\u2019accepte pas les valeurs de type 
\u2018{1}\u2019.
 IllegalPropertyValueClass_3       = Une instance \u2018{1}\u2019 \u00e9tait 
attendue pour la propri\u00e9t\u00e9 \u00ab\u202f{0}\u202f\u00bb, mais la 
valeur donn\u00e9e est une instance de \u2018{2}\u2019.
 IllegalRange_2                    = La plage [{0} \u2026 {1}] n\u2019est pas 
valide.
+IllegalSexagesimalField_3         = L\u2019angle sexag\u00e9simal {0,number} 
est invalide parce que le champs des {1,choice,0#minutes|1#secondes} ne peut 
pas prendre la valeur {2,number}.
 IllegalUnicodeCodePoint_2         = La valeur {1} de 
\u00ab\u202f{0}\u202f\u00bb n\u2019est pas un code Unicode valide.
 IllegalValueForProperty_2         = Valeur ill\u00e9gale pour la 
propri\u00e9t\u00e9 \u00ab\u202f{1}\u202f\u00bb dans 
\u00ab\u202f{0}\u202f\u00bb.
 IncompatibleFormat_2              = Le format {1} ne s\u2019applique pas 
\u00e0 \u00ab\u202f{0}\u202f\u00bb.
diff --git 
a/core/sis-utility/src/test/java/org/apache/sis/measure/SexagesimalConverterTest.java
 
b/core/sis-utility/src/test/java/org/apache/sis/measure/SexagesimalConverterTest.java
index 041dfd50ef..fa5d2f3cbb 100644
--- 
a/core/sis-utility/src/test/java/org/apache/sis/measure/SexagesimalConverterTest.java
+++ 
b/core/sis-utility/src/test/java/org/apache/sis/measure/SexagesimalConverterTest.java
@@ -30,7 +30,7 @@ import static org.junit.Assert.*;
  * Test the {@link SexagesimalConverter} class.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -92,6 +92,22 @@ public final strictfp class SexagesimalConverterTest extends 
TestCase {
         checkConversion(44.505590277777777, Units.DEGREE, 443020.125, 
DMS_SCALED);
     }
 
+    /**
+     * Tests the error message on attempt to convert an illegal value.
+     */
+    @Test
+    public void testErrorMessage() {
+        final UnitConverter converter = DMS.getConverterTo(Units.DEGREE);
+        assertEquals(10.5, converter.convert(10.3), STRICT);
+        try {
+            converter.convert(10.7);
+            fail("Conversion of illegal value should not be allowed.");
+        } catch (IllegalArgumentException e) {
+            final String message = e.getMessage();
+            assertNotNull(message);     // Can not test message content 
because it is locale-sensitive.
+        }
+    }
+
     /**
      * Tests the fix for rounding error in conversion of 46°57'8.66".
      * This fix is necessary for avoiding a 4 cm error with Apache SIS

Reply via email to