This is an automated email from the ASF dual-hosted git repository.
sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-validator.git
The following commit(s) were added to refs/heads/master by this push:
new 78a9ebca Locale-dependent tests: calculate expected results as output
varies between JVMs
78a9ebca is described below
commit 78a9ebca83a66620fb71a921b48f9068e398d760
Author: Sebb <[email protected]>
AuthorDate: Sat Dec 21 17:51:02 2024 +0000
Locale-dependent tests: calculate expected results as output varies between
JVMs
---
pom.xml | 35 +---------
src/changes/changes.xml | 1 +
.../validator/routines/CalendarValidatorTest.java | 76 +++++++++++++++++----
.../validator/routines/CurrencyValidatorTest.java | 79 ++++++++++++++++------
.../validator/routines/DateValidatorTest.java | 26 ++-----
.../validator/routines/TimeValidatorTest.java | 39 ++++++++---
6 files changed, 157 insertions(+), 99 deletions(-)
diff --git a/pom.xml b/pom.xml
index 88e5a001..700b0e60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
<commons.jacoco.instructionRatio>0.87</commons.jacoco.instructionRatio>
<commons.jacoco.methodRatio>0.81</commons.jacoco.methodRatio>
<commons.jacoco.branchRatio>0.74</commons.jacoco.branchRatio>
- <commons.jacoco.lineRatio>0.78</commons.jacoco.lineRatio>
+ <commons.jacoco.lineRatio>0.78</commons.jacoco.lineRatio>
<commons.jacoco.complexityRatio>0.71</commons.jacoco.complexityRatio>
</properties>
@@ -316,37 +316,6 @@
</plugins>
</build>
</profile>
- <profile>
- <id>jdk9-cldr</id>
- <activation>
- <jdk>[1.9,)</jdk>
- </activation>
- <!--
- Temporary fix to allow tests to work under Java 9+, which changed to
use CLDR names.
- This causes several Date/Time tests to fail, as some language strings
have changed.
- e.g. German now uses "Dez." rather than "Dez" for the short version of
"December"
- (see: TimeValidatorTest#testTimeZone)
- Is the test data wrong, or should the code still be able to parse "Dez"?
- -->
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <!--
- systemPropertyVariables are set too late in Surefire
- versions after 2.21.0 and before 3.0-M4 (but only on Windows!)
- Use the command-line instead to ensure the property is set
early enough
-
- Use ${argLine} to get JaCoCo to work properly.
- -->
- <argLine>${argLine} -Djava.locale.providers=COMPAT,SPI</argLine>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
</profiles>
<developers>
@@ -426,7 +395,7 @@
<email>ggregory at apache.org</email>
<url>https://www.garygregory.com</url>
<organization>The Apache Software Foundation</organization>
- <organizationUrl>https://www.apache.org/</organizationUrl>
+ <organizationUrl>https://www.apache.org/</organizationUrl>
<roles>
<role>PMC Member</role>
</roles>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c2b05205..e327602f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -64,6 +64,7 @@ The <action> type attribute can be add,update,fix,remove.
<body>
<release version="1.10.0" date="YYYY-MM-DD" description="This is a
maintenance and bug fix release; requires Java 8.">
<!-- FIX -->
+ <action type="fix" dev="sebb">Locale-dependent tests: calculate expected
results as output varies between JVMs</action>
<action type="fix" dev="sebb">Locale default tests: ensure original is
restored on failure</action>
<action type="fix" dev="ggregory" due-to="Johannes Weberhofer">Fix order
of actual and expected parameters in assertEquals() #246.</action>
<action type="fix" dev="ggregory" due-to="Johannes
Weberhofer">InetAddressValidator does not need its instance variable, so uses a
touch less memory.</action>
diff --git
a/src/test/java/org/apache/commons/validator/routines/CalendarValidatorTest.java
b/src/test/java/org/apache/commons/validator/routines/CalendarValidatorTest.java
index 44a21e0f..3bc3a76a 100644
---
a/src/test/java/org/apache/commons/validator/routines/CalendarValidatorTest.java
+++
b/src/test/java/org/apache/commons/validator/routines/CalendarValidatorTest.java
@@ -26,6 +26,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.text.DateFormat;
import java.text.Format;
+import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
@@ -115,8 +116,12 @@ public class CalendarValidatorTest extends
AbstractCalendarValidatorTest {
final Locale locale = Locale.GERMAN;
final String pattern = "yyyy-MM-dd";
final String patternVal = "2005-12-31";
- final String germanVal = "31 Dez 2005";
final String germanPattern = "dd MMM yyyy";
+ // Don't rely on specific German format - it varies between JVMs
+ DateFormat df = new SimpleDateFormat(germanPattern, locale);
+ Calendar cal = Calendar.getInstance(Locale.US);
+ cal.set(2005, 11, 31); // month is 0-based
+ final String germanVal = df.format(cal.getTime());
final String localeVal = "31.12.2005";
final String defaultVal = "12/31/05";
final String xxxx = "XXXX";
@@ -228,7 +233,7 @@ public class CalendarValidatorTest extends
AbstractCalendarValidatorTest {
// invalid compare
final Exception e = assertThrows(IllegalArgumentException.class, () ->
calValidator.compare(value, value, -1), "Invalid Compare field");
- assertEquals(e.getMessage(), "Invalid field: -1", "check message");
+ assertEquals("Invalid field: -1", e.getMessage(), "check message");
}
/**
@@ -237,6 +242,16 @@ public class CalendarValidatorTest extends
AbstractCalendarValidatorTest {
@Test
public void testDateTimeStyle() {
Locale.setDefault(Locale.UK);
+ // Formats vary between JVMs, so create the test strings using the
current JVM
+ final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.SHORT);
+ final Calendar cal = Calendar.getInstance();
+ cal.set(2005, 11, 31, 14, 23); // month is 0-based
+ final String val = df.format(cal.getTime());
+
+ final DateFormat usdf =
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US);
+ final Calendar uscal = Calendar.getInstance(Locale.US);
+ uscal.set(2005, 11, 31, 14, 23); // month is 0-based
+ final String usval = usdf.format(uscal.getTime());
final AbstractCalendarValidator dateTimeValidator = new
AbstractCalendarValidator(true, DateFormat.SHORT, DateFormat.SHORT) {
private static final long serialVersionUID = 1L;
@@ -246,8 +261,8 @@ public class CalendarValidatorTest extends
AbstractCalendarValidatorTest {
return value;
}
};
- assertTrue(dateTimeValidator.isValid("31/12/05 14:23"), "validate(A)
default");
- assertTrue(dateTimeValidator.isValid("12/31/05 2:23 PM", Locale.US),
"validate(A) locale ");
+ assertTrue(dateTimeValidator.isValid(val), "validate(A) default");
+ assertTrue(dateTimeValidator.isValid(usval, Locale.US), "validate(A)
locale ");
}
/**
@@ -259,20 +274,51 @@ public class CalendarValidatorTest extends
AbstractCalendarValidatorTest {
// Set the default Locale
Locale.setDefault(Locale.UK);
- final Calendar cal20050101 = createCalendar(GMT, 20051231, 11500);
+ final Calendar cal20051231 = createCalendar(GMT, 20051231, 11500);
+ // validator defaults to SHORT, but the format varies between JVMs
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
+ final String val = df.format(cal20051231.getTime());
+ final DateFormat dfus = DateFormat.getDateInstance(DateFormat.SHORT,
Locale.US);
+ final String usval = dfus.format(cal20051231.getTime());
+ final String germanPattern = "dd MMM yyyy";
+ final DateFormat dedf = new SimpleDateFormat(germanPattern,
Locale.GERMAN);
+ final String deval = dedf.format(cal20051231.getTime());
assertNull(calValidator.format(null), "null");
- assertEquals("31/12/05", calValidator.format(cal20050101), "default");
- assertEquals("12/31/05", calValidator.format(cal20050101, Locale.US),
"locale");
- assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd HH:mm"),
"2005-12-31 01:15", "patternA");
- assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd z"),
"2005-12-31 GMT", "patternB");
- assertEquals("31 Dez 2005", calValidator.format(cal20050101, "dd MMM
yyyy", Locale.GERMAN), "both");
+ assertEquals(val, calValidator.format(cal20051231), "default");
+ assertEquals(usval, calValidator.format(cal20051231, Locale.US),
"locale");
+ assertEquals(calValidator.format(cal20051231, "yyyy-MM-dd HH:mm"),
"2005-12-31 01:15", "patternA");
+ assertEquals(calValidator.format(cal20051231, "yyyy-MM-dd z"),
"2005-12-31 GMT", "patternB");
+ assertEquals(deval, calValidator.format(cal20051231, germanPattern,
Locale.GERMAN), "both");
// EST Time Zone
- assertEquals("30/12/05", calValidator.format(cal20050101, EST), "EST
default");
- assertEquals("12/30/05", calValidator.format(cal20050101, Locale.US,
EST), "EST locale");
- assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd HH:mm",
EST), "2005-12-30 20:15", "EST patternA");
- assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd z", EST),
"2005-12-30 EST", "EST patternB");
- assertEquals("30 Dez 2005", calValidator.format(cal20050101, "dd MMM
yyyy", Locale.GERMAN, EST), "EST both");
+ final DateFormat dfest = DateFormat.getDateInstance(DateFormat.SHORT);
+ dfest.setTimeZone(EST);
+ final String valest = dfest.format(cal20051231.getTime());
+
+ final DateFormat dfusest =
DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
+ dfusest.setTimeZone(EST);
+ final String valusest = dfusest.format(cal20051231.getTime());
+
+ final DateFormat dedfest = new SimpleDateFormat(germanPattern,
Locale.GERMAN);
+ dedfest.setTimeZone(EST);
+ final String devalest = dedfest.format(cal20051231.getTime());
+
+ assertEquals(valest, calValidator.format(cal20051231, EST), "EST
default");
+ assertEquals(valusest, calValidator.format(cal20051231, Locale.US,
EST), "EST locale");
+
+ final String patternA = "yyyy-MM-dd HH:mm";
+ final DateFormat dfA = new SimpleDateFormat(patternA);
+ dfA.setTimeZone(EST);
+ final String valA = dfA.format(cal20051231.getTime());
+ assertEquals(valA, calValidator.format(cal20051231, patternA, EST),
"EST patternA");
+
+ final String patternB = "yyyy-MM-dd z";
+ final DateFormat dfB = new SimpleDateFormat(patternB);
+ dfB.setTimeZone(EST);
+ final String valB = dfB.format(cal20051231.getTime());
+
+ assertEquals(valB, calValidator.format(cal20051231, patternB, EST),
"EST patternB");
+ assertEquals(devalest, calValidator.format(cal20051231, germanPattern,
Locale.GERMAN, EST), "EST both");
}
}
diff --git
a/src/test/java/org/apache/commons/validator/routines/CurrencyValidatorTest.java
b/src/test/java/org/apache/commons/validator/routines/CurrencyValidatorTest.java
index 509601d8..20d491fe 100644
---
a/src/test/java/org/apache/commons/validator/routines/CurrencyValidatorTest.java
+++
b/src/test/java/org/apache/commons/validator/routines/CurrencyValidatorTest.java
@@ -18,10 +18,12 @@ package org.apache.commons.validator.routines;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertNull;
import java.math.BigDecimal;
import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
import java.util.Locale;
import org.junit.jupiter.api.AfterEach;
@@ -88,14 +90,19 @@ public class CurrencyValidatorTest {
final CurrencyValidator validator = new CurrencyValidator();
final BigDecimal expected = new BigDecimal("1234.00");
final BigDecimal negative = new BigDecimal("-1234.00");
+ // Generate the exected strings, as these vary between JVMs
+ final String ukPlus =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234);
+ final String ukMinus =
NumberFormat.getCurrencyInstance(Locale.UK).format(-1234);
+ final String usPlus =
NumberFormat.getCurrencyInstance(Locale.US).format(1234);
+ final String usMinus =
NumberFormat.getCurrencyInstance(Locale.US).format(-1234);
- assertEquals(expected, validator.validate(ukPound + "1,234"), "Default
locale");
+ assertEquals(expected, validator.validate(ukPlus), "Default locale");
- assertEquals(expected, validator.validate(ukPound + "1,234",
Locale.UK), "UK locale");
- assertEquals(negative, validator.validate("-" + ukPound + "1,234",
Locale.UK), "UK negative");
+ assertEquals(expected, validator.validate(ukPlus, Locale.UK), "UK
locale");
+ assertEquals(negative, validator.validate(ukMinus, Locale.UK), "UK
negative");
- assertEquals(expected, validator.validate(usDollar + "1,234",
Locale.US), "US locale");
- assertEquals(negative, validator.validate("(" + usDollar + "1,234)",
Locale.US), "US negative");
+ assertEquals(expected, validator.validate(usPlus, Locale.US), "US
locale");
+ assertEquals(negative, validator.validate(usMinus, Locale.US), "US
negative");
}
/**
@@ -105,6 +112,11 @@ public class CurrencyValidatorTest {
public void testInvalid() {
final BigDecimalValidator validator = CurrencyValidator.getInstance();
+ final String ukPlus =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234.56);
+ final String usPlus =
NumberFormat.getCurrencyInstance(Locale.US).format(1234.56);
+ final String ukMinus =
NumberFormat.getCurrencyInstance(Locale.UK).format(-1234.56);
+ final String usMinus =
NumberFormat.getCurrencyInstance(Locale.US).format(-1234.56);
+
// Invalid Missing
assertFalse(validator.isValid(null), "isValid() Null Value");
assertFalse(validator.isValid(""), "isValid() Empty Value");
@@ -112,12 +124,20 @@ public class CurrencyValidatorTest {
assertNull(validator.validate(""), "validate() Empty Value");
// Invalid UK
- assertFalse(validator.isValid(usDollar + "1,234.56", Locale.UK), "UK
wrong symbol");
- assertFalse(validator.isValid("(" + ukPound + "1,234.56)", Locale.UK),
"UK wrong negative");
+ assertFalse(validator.isValid(usPlus, Locale.UK), "UK wrong symbol: "
+ usPlus);
+ if (ukMinus.startsWith("-")) {
+ assertFalse(validator.isValid("(" + ukPound + "1,234.56)",
Locale.UK), "UK wrong negative: " + ukMinus);
+ } else {
+ assertFalse(validator.isValid("-" + ukPound + "1,234.56",
Locale.UK), "UK wrong negative: " + ukMinus);
+ }
// Invalid US
- assertFalse(validator.isValid(ukPound + "1,234.56", Locale.US), "US
wrong symbol");
- assertFalse(validator.isValid("-" + usDollar + "1,234.56", Locale.US),
"US wrong negative");
+ assertFalse(validator.isValid(ukPlus, Locale.US), "US wrong symbol: "
+ ukPlus);
+ if (usMinus.startsWith("-")) {
+ assertFalse(validator.isValid("(" + usDollar + "1,234.56)",
Locale.US), "UK wrong negative: " + usMinus);
+ } else {
+ assertFalse(validator.isValid("-" + usDollar + "1,234.56",
Locale.US), "UK wrong negative: " + usMinus);
+ }
}
/**
@@ -165,20 +185,37 @@ public class CurrencyValidatorTest {
final BigDecimal noDecimal = new BigDecimal("1234.00");
final BigDecimal oneDecimal = new BigDecimal("1234.50");
- assertEquals(expected, validator.validate(ukPound + "1,234.56"),
"Default locale");
-
- assertEquals(expected, validator.validate(ukPound + "1,234.56",
Locale.UK), "UK locale");
- assertEquals(negative, validator.validate("-" + ukPound + "1,234.56",
Locale.UK), "UK negative");
- assertEquals(noDecimal, validator.validate(ukPound + "1,234",
Locale.UK), "UK no decimal");
- assertEquals(oneDecimal, validator.validate(ukPound + "1,234.5",
Locale.UK), "UK 1 decimal");
- assertEquals(expected, validator.validate(ukPound + "1,234.567",
Locale.UK), "UK 3 decimal");
+ // Generate the exected strings, as these vary between JVMs
+ final String ukPlus =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234.56);
+ final String ukPlus0Decimal =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234);
+ final String ukPlus1Decimal =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234.5);
+ // Note that NumberFormat may perform rounding up or truncation, so we
cheat
+ final String ukPlus3Decimal =
NumberFormat.getCurrencyInstance(Locale.UK).format(1234.56) + "7";
+ final String ukMinus =
NumberFormat.getCurrencyInstance(Locale.UK).format(-1234.56);
+ final String usPlus =
NumberFormat.getCurrencyInstance(Locale.US).format(1234.56);
+ final String usPlus0Decimal =
NumberFormat.getCurrencyInstance(Locale.US).format(1234);
+ final String usPlus1Decimal =
NumberFormat.getCurrencyInstance(Locale.US).format(1234.5);
+ // Note that NumberFormat may perform rounding up or truncation, so we
cheat
+ final String usPlus3Decimal =
NumberFormat.getCurrencyInstance(Locale.US).format(1234.56) + "7";
+ final String usMinus =
NumberFormat.getCurrencyInstance(Locale.US).format(-1234.56);
+
+ assertEquals(expected, validator.validate(ukPlus), "Default locale");
+
+ assertEquals(expected, validator.validate(ukPlus, Locale.UK), "UK
locale");
+ assertEquals(negative, validator.validate(ukMinus, Locale.UK), "UK
negative");
+ assertEquals(noDecimal, validator.validate(ukPlus0Decimal, Locale.UK),
"UK no decimal");
+ assertEquals(oneDecimal, validator.validate(ukPlus1Decimal,
Locale.UK), "UK 1 decimal");
+ assertEquals(expected, validator.validate(ukPlus3Decimal, Locale.UK),
"UK 3 decimal: " + ukPlus3Decimal);
+ // TODO: The following expects the value to be truncated, rather than
rounded up - is that correct?
+ assertEquals(expected, validator.validate(ukPlus3Decimal, Locale.UK),
"UK 3 decimal: " + ukPlus3Decimal);
assertEquals(expected, validator.validate("1,234.56", Locale.UK), "UK
no symbol");
- assertEquals(expected, validator.validate(usDollar + "1,234.56",
Locale.US), "US locale");
- assertEquals(negative, validator.validate("(" + usDollar +
"1,234.56)", Locale.US), "US negative");
- assertEquals(noDecimal, validator.validate(usDollar + "1,234",
Locale.US), "US no decimal");
- assertEquals(oneDecimal, validator.validate(usDollar + "1,234.5",
Locale.US), "US 1 decimal");
- assertEquals(expected, validator.validate(usDollar + "1,234.567",
Locale.US), "US 3 decimal");
+ assertEquals(expected, validator.validate(usPlus, Locale.US), "US
locale");
+ assertEquals(negative, validator.validate(usMinus, Locale.US), "US
negative");
+ assertEquals(noDecimal, validator.validate(usPlus0Decimal, Locale.US),
"US no decimal");
+ assertEquals(oneDecimal, validator.validate(usPlus1Decimal,
Locale.US), "US 1 decimal");
+ // TODO: The following expects the value to be truncated, rather than
rounded up - is that correct?
+ assertEquals(expected, validator.validate(usPlus3Decimal, Locale.US),
"US 3 decimal: " + usPlus3Decimal);
assertEquals(expected, validator.validate("1,234.56", Locale.US), "US
no symbol");
}
}
diff --git
a/src/test/java/org/apache/commons/validator/routines/DateValidatorTest.java
b/src/test/java/org/apache/commons/validator/routines/DateValidatorTest.java
index 6d965d71..c3f57765 100644
--- a/src/test/java/org/apache/commons/validator/routines/DateValidatorTest.java
+++ b/src/test/java/org/apache/commons/validator/routines/DateValidatorTest.java
@@ -19,16 +19,16 @@ package org.apache.commons.validator.routines;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
-import org.apache.commons.lang3.SystemProperties;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -139,8 +139,12 @@ public class DateValidatorTest extends
AbstractCalendarValidatorTest {
final Locale locale = Locale.GERMAN;
final String pattern = "yyyy-MM-dd";
final String patternVal = "2005-12-31";
- final String germanVal = "31 Dez 2005";
final String germanPattern = "dd MMM yyyy";
+ // Don't rely on specific German format - it varies between JVMs
+ final DateFormat df = new SimpleDateFormat(germanPattern, locale);
+ final Calendar cal = Calendar.getInstance(Locale.US);
+ cal.set(2005, 11, 31); // month is 0-based
+ final String germanVal = df.format(cal.getTime());
final String localeVal = "31.12.2005";
final String defaultVal = "12/31/05";
final String xxxx = "XXXX";
@@ -176,20 +180,4 @@ public class DateValidatorTest extends
AbstractCalendarValidatorTest {
assertEquals(expectedZone,
DateValidator.getInstance().validate(patternVal, pattern, zone), "validate(C)
pattern");
assertEquals(expectedZone,
DateValidator.getInstance().validate(germanVal, germanPattern, Locale.GERMAN,
zone), "validate(C) both");
}
-
- /**
- * Check that locale providers are set up correctly If not, the parse will
fail
- */
- @Test
- public void testLocaleProviders() throws Exception {
- final String localeProviders =
SystemProperties.getJavaLocaleProviders();
- if (localeProviders != null) { // may be null before Java 9
- assertTrue(localeProviders.startsWith("COMPAT"),
"java.locale.providers must start with COMPAT");
- }
- final String txt = "3/20/15 10:59:00 PM"; // This relies on the locale
format prior to Java 9 to parse correctly
- final DateFormat dateformat =
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
- dateformat.setTimeZone(TimeZone.getTimeZone("GMT"));
- final Date date = dateformat.parse(txt);
- assertNotNull(date);
- }
}
diff --git
a/src/test/java/org/apache/commons/validator/routines/TimeValidatorTest.java
b/src/test/java/org/apache/commons/validator/routines/TimeValidatorTest.java
index bbeca924..243e2aca 100644
--- a/src/test/java/org/apache/commons/validator/routines/TimeValidatorTest.java
+++ b/src/test/java/org/apache/commons/validator/routines/TimeValidatorTest.java
@@ -22,6 +22,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
@@ -183,11 +185,17 @@ public class TimeValidatorTest {
// Set the default Locale
Locale.setDefault(Locale.UK);
+ // The JVM format varies; calculate expected results
+ final Calendar cal = createTime(null, 164923, 0);
+ final DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
+ final String val = df.format(cal.getTime());
+ final DateFormat dfus = DateFormat.getTimeInstance(DateFormat.SHORT,
Locale.US);
+ final String valus = dfus.format(cal.getTime());
final Object test = TimeValidator.getInstance().validate("16:49:23",
"HH:mm:ss");
assertNotNull(test, "Test Date ");
assertEquals("16-49-23", validator.format(test, "HH-mm-ss"), "Format
pattern");
- assertEquals("4:49 PM", validator.format(test, Locale.US), "Format
locale");
- assertEquals("16:49", validator.format(test), "Format default");
+ assertEquals(valus, validator.format(test, Locale.US), "Format
locale");
+ assertEquals(val, validator.format(test), "Format default");
}
/**
@@ -282,16 +290,25 @@ public class TimeValidatorTest {
result = null;
// Locale, diff TimeZone
- result = validator.validate("7:18 PM", Locale.US, EST);
- assertNotNull(result, "locale result");
- assertEquals(EST, result.getTimeZone(), "locale zone");
- assertEquals(19, result.get(Calendar.HOUR_OF_DAY), "locale hour");
- assertEquals(18, result.get(Calendar.MINUTE), "locale minute");
+ final DateFormat usdf = DateFormat.getTimeInstance(DateFormat.SHORT,
Locale.US);
+ final Calendar uscal = Calendar.getInstance(Locale.US);
+ uscal.set(2005, 0, 1, 19, 18); // month is 0-based
+ final String usVal = usdf.format(uscal.getTime());
+ result = validator.validate(usVal, Locale.US, EST);
+ assertNotNull(result, "locale result: " + usVal);
+ assertEquals(EST, result.getTimeZone(), "locale zone: " + usVal);
+ assertEquals(19, result.get(Calendar.HOUR_OF_DAY), "locale hour: " +
usVal);
+ assertEquals(18, result.get(Calendar.MINUTE), "locale minute: " +
usVal);
result = null;
+ final String dateTimePattern = "dd/MMM/yy HH-mm";
+ final Calendar decal = Calendar.getInstance(Locale.GERMAN);
+ decal.set(2005, 11, 31, 21, 05); // month is 0-based
+ final String germanSample = new SimpleDateFormat(dateTimePattern,
Locale.GERMAN).format(decal.getTime());
+
// Locale & Pattern, diff TimeZone
- result = validator.validate("31/Dez/05 21-05", "dd/MMM/yy HH-mm",
Locale.GERMAN, EST);
- assertNotNull(result, "pattern result");
+ result = validator.validate(germanSample, dateTimePattern,
Locale.GERMAN, EST);
+ assertNotNull(result, "pattern result: " + germanSample);
assertEquals(EST, result.getTimeZone(), "pattern zone");
assertEquals(2005, result.get(Calendar.YEAR), "pattern day");
assertEquals(11, result.get(Calendar.MONTH), "pattern day"); // months
are 0-11
@@ -301,8 +318,8 @@ public class TimeValidatorTest {
result = null;
// Locale & Pattern, default TimeZone
- result = validator.validate("31/Dez/05 21-05", "dd/MMM/yy HH-mm",
Locale.GERMAN);
- assertNotNull(result, "pattern result");
+ result = validator.validate(germanSample, dateTimePattern,
Locale.GERMAN);
+ assertNotNull(result, "pattern result: " + germanSample);
assertEquals(GMT, result.getTimeZone(), "pattern zone");
assertEquals(2005, result.get(Calendar.YEAR), "pattern day");
assertEquals(11, result.get(Calendar.MONTH), "pattern day"); // months
are 0-11