Created
June 24, 2013 09:29
-
-
Save jodastephen/5848884 to your computer and use it in GitHub Desktop.
ThreeTen318
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# HG changeset patch | |
# User scolebourne | |
# Date 1371832843 -3600 | |
# Node ID f7573f51e6f97ad8f3610797215c45a37ced541c | |
# Parent ab19cc860f048b2cc5f67b63c506860bc981fe1b | |
Additional tests and fixes for strict/smart/lenient resolving | |
Issue #318 | |
diff --git a/src/share/classes/java/time/chrono/Chronology.java b/src/share/classes/java/time/chrono/Chronology.java | |
--- a/src/share/classes/java/time/chrono/Chronology.java | |
+++ b/src/share/classes/java/time/chrono/Chronology.java | |
@@ -1122,9 +1122,10 @@ | |
ValueRange domRange = range(DAY_OF_MONTH); | |
int dom = domRange.checkValidIntValue(fieldValues.remove(DAY_OF_MONTH), DAY_OF_MONTH); | |
if (resolverStyle == ResolverStyle.SMART) { // previous valid | |
- if (dom > domRange.getSmallestMaximum()) { | |
- dom = (int) domRange.getSmallestMaximum(); | |
- return date(y, moy, dom).with(TemporalAdjuster.lastDayOfMonth()); | |
+ try { | |
+ return date(y, moy, dom); | |
+ } catch (DateTimeException ex) { | |
+ return date(y, moy, 1).with(TemporalAdjuster.lastDayOfMonth()); | |
} | |
} | |
return date(y, moy, dom); | |
diff --git a/src/share/classes/java/time/chrono/HijrahChronology.java b/src/share/classes/java/time/chrono/HijrahChronology.java | |
--- a/src/share/classes/java/time/chrono/HijrahChronology.java | |
+++ b/src/share/classes/java/time/chrono/HijrahChronology.java | |
@@ -71,8 +71,10 @@ | |
import java.time.Instant; | |
import java.time.LocalDate; | |
import java.time.ZoneId; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.TemporalAccessor; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
import java.util.Arrays; | |
import java.util.HashMap; | |
@@ -550,7 +552,7 @@ | |
} | |
@Override | |
- public Era eraOf(int eraValue) { | |
+ public HijrahEra eraOf(int eraValue) { | |
switch (eraValue) { | |
case 1: | |
return HijrahEra.AH; | |
@@ -580,6 +582,8 @@ | |
case YEAR: | |
case YEAR_OF_ERA: | |
return ValueRange.of(getMinimumYear(), getMaximumYear()); | |
+ case ERA: | |
+ return ValueRange.of(1, 1); | |
default: | |
return field.range(); | |
} | |
@@ -587,6 +591,13 @@ | |
return field.range(); | |
} | |
+ //----------------------------------------------------------------------- | |
+ @Override // override for return type | |
+ public HijrahDate resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) { | |
+ return (HijrahDate) super.resolveDate(fieldValues, resolverStyle); | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
/** | |
* Check the validity of a year. | |
* | |
diff --git a/src/share/classes/java/time/chrono/IsoChronology.java b/src/share/classes/java/time/chrono/IsoChronology.java | |
--- a/src/share/classes/java/time/chrono/IsoChronology.java | |
+++ b/src/share/classes/java/time/chrono/IsoChronology.java | |
@@ -389,7 +389,7 @@ | |
} | |
@Override | |
- public Era eraOf(int eraValue) { | |
+ public IsoEra eraOf(int eraValue) { | |
return IsoEra.of(eraValue); | |
} | |
diff --git a/src/share/classes/java/time/chrono/JapaneseChronology.java b/src/share/classes/java/time/chrono/JapaneseChronology.java | |
--- a/src/share/classes/java/time/chrono/JapaneseChronology.java | |
+++ b/src/share/classes/java/time/chrono/JapaneseChronology.java | |
@@ -63,13 +63,16 @@ | |
import java.time.LocalDate; | |
import java.time.Year; | |
import java.time.ZoneId; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.TemporalAccessor; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
import java.util.Arrays; | |
import java.util.Calendar; | |
import java.util.List; | |
import java.util.Locale; | |
+import java.util.Map; | |
import sun.util.calendar.CalendarSystem; | |
import sun.util.calendar.LocalGregorianCalendar; | |
@@ -327,7 +330,7 @@ | |
* @throws DateTimeException if {@code eraValue} is invalid | |
*/ | |
@Override | |
- public Era eraOf(int eraValue) { | |
+ public JapaneseEra eraOf(int eraValue) { | |
return JapaneseEra.of(eraValue); | |
} | |
@@ -391,4 +394,10 @@ | |
jcal.getLeastMaximum(fieldIndex), jcal.getMaximum(fieldIndex)); | |
} | |
+ //----------------------------------------------------------------------- | |
+ @Override // override for return type | |
+ public JapaneseDate resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) { | |
+ return (JapaneseDate) super.resolveDate(fieldValues, resolverStyle); | |
+ } | |
+ | |
} | |
diff --git a/src/share/classes/java/time/chrono/MinguoChronology.java b/src/share/classes/java/time/chrono/MinguoChronology.java | |
--- a/src/share/classes/java/time/chrono/MinguoChronology.java | |
+++ b/src/share/classes/java/time/chrono/MinguoChronology.java | |
@@ -65,12 +65,15 @@ | |
import java.time.Instant; | |
import java.time.LocalDate; | |
import java.time.ZoneId; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.TemporalAccessor; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
import java.util.Arrays; | |
import java.util.List; | |
import java.util.Locale; | |
+import java.util.Map; | |
/** | |
* The Minguo calendar system. | |
@@ -292,7 +295,7 @@ | |
} | |
@Override | |
- public Era eraOf(int eraValue) { | |
+ public MinguoEra eraOf(int eraValue) { | |
return MinguoEra.of(eraValue); | |
} | |
@@ -321,4 +324,10 @@ | |
return field.range(); | |
} | |
+ //----------------------------------------------------------------------- | |
+ @Override // override for return type | |
+ public MinguoDate resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) { | |
+ return (MinguoDate) super.resolveDate(fieldValues, resolverStyle); | |
+ } | |
+ | |
} | |
diff --git a/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java b/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java | |
--- a/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java | |
+++ b/src/share/classes/java/time/chrono/ThaiBuddhistChronology.java | |
@@ -65,13 +65,16 @@ | |
import java.time.Instant; | |
import java.time.LocalDate; | |
import java.time.ZoneId; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.TemporalAccessor; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
import java.util.Arrays; | |
import java.util.HashMap; | |
import java.util.List; | |
import java.util.Locale; | |
+import java.util.Map; | |
/** | |
* The Thai Buddhist calendar system. | |
@@ -328,7 +331,7 @@ | |
} | |
@Override | |
- public Era eraOf(int eraValue) { | |
+ public ThaiBuddhistEra eraOf(int eraValue) { | |
return ThaiBuddhistEra.of(eraValue); | |
} | |
@@ -357,4 +360,10 @@ | |
return field.range(); | |
} | |
+ //----------------------------------------------------------------------- | |
+ @Override // override for return type | |
+ public ThaiBuddhistDate resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) { | |
+ return (ThaiBuddhistDate) super.resolveDate(fieldValues, resolverStyle); | |
+ } | |
+ | |
} | |
diff --git a/test/java/time/tck/java/time/chrono/TCKHijrahChronology.java b/test/java/time/tck/java/time/chrono/TCKHijrahChronology.java | |
--- a/test/java/time/tck/java/time/chrono/TCKHijrahChronology.java | |
+++ b/test/java/time/tck/java/time/chrono/TCKHijrahChronology.java | |
@@ -81,9 +81,16 @@ | |
import java.time.chrono.IsoChronology; | |
import java.time.chrono.MinguoChronology; | |
import java.time.chrono.MinguoDate; | |
+import java.time.chrono.ThaiBuddhistChronology; | |
+import java.time.chrono.ThaiBuddhistDate; | |
+import java.time.format.ResolverStyle; | |
+import java.time.temporal.ChronoField; | |
import java.time.temporal.ChronoUnit; | |
import java.time.temporal.TemporalAdjuster; | |
+import java.time.temporal.TemporalField; | |
+import java.util.HashMap; | |
import java.util.List; | |
+import java.util.Map; | |
import org.testng.Assert; | |
import org.testng.annotations.DataProvider; | |
@@ -397,4 +404,98 @@ | |
assertFalse(HijrahChronology.INSTANCE.equals(IsoChronology.INSTANCE)); | |
} | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yearOfEra") | |
+ Object[][] data_resolve_yearOfEra() { | |
+ return new Object[][] { | |
+ // era only | |
+ {ResolverStyle.STRICT, -1, null, null, null, null}, | |
+ {ResolverStyle.SMART, -1, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, null, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, null, null, null, null}, | |
+ {ResolverStyle.SMART, 0, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, 0, null, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.SMART, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.LENIENT, 1, null, null, ChronoField.ERA, 1}, | |
+ | |
+ {ResolverStyle.STRICT, 2, null, null, null, null}, | |
+ {ResolverStyle.SMART, 2, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, null, null, null, null}, | |
+ | |
+ // era and year-of-era | |
+ {ResolverStyle.STRICT, -1, 1434, null, null, null}, | |
+ {ResolverStyle.SMART, -1, 1434, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, 1434, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, 1434, null, null, null}, | |
+ {ResolverStyle.SMART, 0, 1434, null, null, null}, | |
+ {ResolverStyle.LENIENT, 0, 1434, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 1, 1434, null, ChronoField.YEAR, 1434}, | |
+ {ResolverStyle.SMART, 1, 1434, null, ChronoField.YEAR, 1434}, | |
+ {ResolverStyle.LENIENT, 1, 1434, null, ChronoField.YEAR, 1434}, | |
+ | |
+ {ResolverStyle.STRICT, 2, 1434, null, null, null}, | |
+ {ResolverStyle.SMART, 2, 1434, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, 1434, null, null, null}, | |
+ | |
+ // year-of-era only | |
+ {ResolverStyle.STRICT, null, 1434, null, ChronoField.YEAR_OF_ERA, 1434}, | |
+ {ResolverStyle.SMART, null, 1434, null, ChronoField.YEAR, 1434}, | |
+ {ResolverStyle.LENIENT, null, 1434, null, ChronoField.YEAR, 1434}, | |
+ | |
+ {ResolverStyle.STRICT, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.SMART, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.LENIENT, null, Integer.MAX_VALUE, null, ChronoField.YEAR, Integer.MAX_VALUE}, | |
+ | |
+ // year-of-era and year | |
+ {ResolverStyle.STRICT, null, 1434, 1434, ChronoField.YEAR, 1434}, | |
+ {ResolverStyle.SMART, null, 1434, 1434, ChronoField.YEAR, 1434}, | |
+ {ResolverStyle.LENIENT, null, 1434, 1434, ChronoField.YEAR, 1434}, | |
+ | |
+ {ResolverStyle.STRICT, null, 1434, -1433, null, null}, | |
+ {ResolverStyle.SMART, null, 1434, -1433, null, null}, | |
+ {ResolverStyle.LENIENT, null, 1434, -1433, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, null, 1434, 1435, null, null}, | |
+ {ResolverStyle.SMART, null, 1434, 1435, null, null}, | |
+ {ResolverStyle.LENIENT, null, 1434, 1435, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, null, 1434, -1435, null, null}, | |
+ {ResolverStyle.SMART, null, 1434, -1435, null, null}, | |
+ {ResolverStyle.LENIENT, null, 1434, -1435, null, null}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yearOfEra") | |
+ public void test_resolve_yearOfEra(ResolverStyle style, Integer e, Integer yoe, Integer y, ChronoField field, Integer expected) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ if (e != null) { | |
+ fieldValues.put(ChronoField.ERA, (long) e); | |
+ } | |
+ if (yoe != null) { | |
+ fieldValues.put(ChronoField.YEAR_OF_ERA, (long) yoe); | |
+ } | |
+ if (y != null) { | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ } | |
+ if (field != null) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ assertEquals(date, null); | |
+ assertEquals(fieldValues.get(field), (Long) expected.longValue()); | |
+ assertEquals(fieldValues.size(), 1); | |
+ } else { | |
+ try { | |
+ HijrahChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
} | |
diff --git a/test/java/time/tck/java/time/chrono/TCKIsoChronology.java b/test/java/time/tck/java/time/chrono/TCKIsoChronology.java | |
--- a/test/java/time/tck/java/time/chrono/TCKIsoChronology.java | |
+++ b/test/java/time/tck/java/time/chrono/TCKIsoChronology.java | |
@@ -378,6 +378,11 @@ | |
{2012, 1, -30, date(2011, 12, 1), false, false}, | |
{2012, 1, -12, date(2011, 12, 19), false, false}, | |
{2012, 1, 1, date(2012, 1, 1), true, true}, | |
+ {2012, 1, 27, date(2012, 1, 27), true, true}, | |
+ {2012, 1, 28, date(2012, 1, 28), true, true}, | |
+ {2012, 1, 29, date(2012, 1, 29), true, true}, | |
+ {2012, 1, 30, date(2012, 1, 30), true, true}, | |
+ {2012, 1, 31, date(2012, 1, 31), true, true}, | |
{2012, 1, 59, date(2012, 2, 28), false, false}, | |
{2012, 1, 60, date(2012, 2, 29), false, false}, | |
{2012, 1, 61, date(2012, 3, 1), false, false}, | |
diff --git a/test/java/time/tck/java/time/chrono/TCKMinguoChronology.java b/test/java/time/tck/java/time/chrono/TCKMinguoChronology.java | |
--- a/test/java/time/tck/java/time/chrono/TCKMinguoChronology.java | |
+++ b/test/java/time/tck/java/time/chrono/TCKMinguoChronology.java | |
@@ -84,13 +84,19 @@ | |
import java.time.chrono.MinguoChronology; | |
import java.time.chrono.MinguoDate; | |
import java.time.chrono.MinguoEra; | |
+import java.time.chrono.MinguoChronology; | |
+import java.time.chrono.MinguoDate; | |
import java.time.chrono.ThaiBuddhistChronology; | |
import java.time.chrono.ThaiBuddhistDate; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.ChronoUnit; | |
import java.time.temporal.TemporalAccessor; | |
import java.time.temporal.TemporalAdjuster; | |
+import java.time.temporal.TemporalField; | |
+import java.util.HashMap; | |
import java.util.List; | |
+import java.util.Map; | |
import org.testng.Assert; | |
import org.testng.annotations.DataProvider; | |
@@ -546,4 +552,409 @@ | |
assertFalse(MinguoChronology.INSTANCE.equals(IsoChronology.INSTANCE)); | |
} | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yearOfEra") | |
+ Object[][] data_resolve_yearOfEra() { | |
+ return new Object[][] { | |
+ // era only | |
+ {ResolverStyle.STRICT, -1, null, null, null, null}, | |
+ {ResolverStyle.SMART, -1, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, null, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, null, null, ChronoField.ERA, 0}, | |
+ {ResolverStyle.SMART, 0, null, null, ChronoField.ERA, 0}, | |
+ {ResolverStyle.LENIENT, 0, null, null, ChronoField.ERA, 0}, | |
+ | |
+ {ResolverStyle.STRICT, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.SMART, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.LENIENT, 1, null, null, ChronoField.ERA, 1}, | |
+ | |
+ {ResolverStyle.STRICT, 2, null, null, null, null}, | |
+ {ResolverStyle.SMART, 2, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, null, null, null, null}, | |
+ | |
+ // era and year-of-era | |
+ {ResolverStyle.STRICT, -1, 2012, null, null, null}, | |
+ {ResolverStyle.SMART, -1, 2012, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, 2012, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.SMART, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.LENIENT, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ | |
+ {ResolverStyle.STRICT, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.SMART, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, 2, 2012, null, null, null}, | |
+ {ResolverStyle.SMART, 2, 2012, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, 2012, null, null, null}, | |
+ | |
+ // year-of-era only | |
+ {ResolverStyle.STRICT, null, 2012, null, ChronoField.YEAR_OF_ERA, 2012}, | |
+ {ResolverStyle.SMART, null, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, null, 2012, null, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.SMART, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.LENIENT, null, Integer.MAX_VALUE, null, ChronoField.YEAR, Integer.MAX_VALUE}, | |
+ | |
+ // year-of-era and year | |
+ {ResolverStyle.STRICT, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.SMART, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.SMART, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.LENIENT, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, 2013, null, null}, | |
+ {ResolverStyle.SMART, null, 2012, 2013, null, null}, | |
+ {ResolverStyle.LENIENT, null, 2012, 2013, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, -2013, null, null}, | |
+ {ResolverStyle.SMART, null, 2012, -2013, null, null}, | |
+ {ResolverStyle.LENIENT, null, 2012, -2013, null, null}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yearOfEra") | |
+ public void test_resolve_yearOfEra(ResolverStyle style, Integer e, Integer yoe, Integer y, ChronoField field, Integer expected) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ if (e != null) { | |
+ fieldValues.put(ChronoField.ERA, (long) e); | |
+ } | |
+ if (yoe != null) { | |
+ fieldValues.put(ChronoField.YEAR_OF_ERA, (long) yoe); | |
+ } | |
+ if (y != null) { | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ } | |
+ if (field != null) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ assertEquals(date, null); | |
+ assertEquals(fieldValues.get(field), (Long) expected.longValue()); | |
+ assertEquals(fieldValues.size(), 1); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_ymd") | |
+ Object[][] data_resolve_ymd() { | |
+ return new Object[][] { | |
+ {2012 - YDIFF, 1, -365, date(2010 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, -364, date(2011 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 1, -31, date(2011 - YDIFF, 11, 30), false, false}, | |
+ {2012 - YDIFF, 1, -30, date(2011 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 1, -12, date(2011 - YDIFF, 12, 19), false, false}, | |
+ {2012 - YDIFF, 1, 1, date(2012 - YDIFF, 1, 1), true, true}, | |
+ {2012 - YDIFF, 1, 27, date(2012 - YDIFF, 1, 27), true, true}, | |
+ {2012 - YDIFF, 1, 28, date(2012 - YDIFF, 1, 28), true, true}, | |
+ {2012 - YDIFF, 1, 29, date(2012 - YDIFF, 1, 29), true, true}, | |
+ {2012 - YDIFF, 1, 30, date(2012 - YDIFF, 1, 30), true, true}, | |
+ {2012 - YDIFF, 1, 31, date(2012 - YDIFF, 1, 31), true, true}, | |
+ {2012 - YDIFF, 1, 59, date(2012 - YDIFF, 2, 28), false, false}, | |
+ {2012 - YDIFF, 1, 60, date(2012 - YDIFF, 2, 29), false, false}, | |
+ {2012 - YDIFF, 1, 61, date(2012 - YDIFF, 3, 1), false, false}, | |
+ {2012 - YDIFF, 1, 365, date(2012 - YDIFF, 12, 30), false, false}, | |
+ {2012 - YDIFF, 1, 366, date(2012 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, 367, date(2013 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 1, 367 + 364, date(2013 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, 367 + 365, date(2014 - YDIFF, 1, 1), false, false}, | |
+ | |
+ {2012 - YDIFF, 2, 1, date(2012 - YDIFF, 2, 1), true, true}, | |
+ {2012 - YDIFF, 2, 28, date(2012 - YDIFF, 2, 28), true, true}, | |
+ {2012 - YDIFF, 2, 29, date(2012 - YDIFF, 2, 29), true, true}, | |
+ {2012 - YDIFF, 2, 30, date(2012 - YDIFF, 3, 1), date(2012 - YDIFF, 2, 29), false}, | |
+ {2012 - YDIFF, 2, 31, date(2012 - YDIFF, 3, 2), date(2012 - YDIFF, 2, 29), false}, | |
+ {2012 - YDIFF, 2, 32, date(2012 - YDIFF, 3, 3), false, false}, | |
+ | |
+ {2012 - YDIFF, -12, 1, date(2010 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, -11, 1, date(2011 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, -1, 1, date(2011 - YDIFF, 11, 1), false, false}, | |
+ {2012 - YDIFF, 0, 1, date(2011 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, date(2012 - YDIFF, 1, 1), true, true}, | |
+ {2012 - YDIFF, 12, 1, date(2012 - YDIFF, 12, 1), true, true}, | |
+ {2012 - YDIFF, 13, 1, date(2013 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 24, 1, date(2013 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 25, 1, date(2014 - YDIFF, 1, 1), false, false}, | |
+ | |
+ {2012 - YDIFF, 6, -31, date(2012 - YDIFF, 4, 30), false, false}, | |
+ {2012 - YDIFF, 6, -30, date(2012 - YDIFF, 5, 1), false, false}, | |
+ {2012 - YDIFF, 6, -1, date(2012 - YDIFF, 5, 30), false, false}, | |
+ {2012 - YDIFF, 6, 0, date(2012 - YDIFF, 5, 31), false, false}, | |
+ {2012 - YDIFF, 6, 1, date(2012 - YDIFF, 6, 1), true, true}, | |
+ {2012 - YDIFF, 6, 30, date(2012 - YDIFF, 6, 30), true, true}, | |
+ {2012 - YDIFF, 6, 31, date(2012 - YDIFF, 7, 1), date(2012 - YDIFF, 6, 30), false}, | |
+ {2012 - YDIFF, 6, 61, date(2012 - YDIFF, 7, 31), false, false}, | |
+ {2012 - YDIFF, 6, 62, date(2012 - YDIFF, 8, 1), false, false}, | |
+ | |
+ {2011 - YDIFF, 2, 1, date(2011 - YDIFF, 2, 1), true, true}, | |
+ {2011 - YDIFF, 2, 28, date(2011 - YDIFF, 2, 28), true, true}, | |
+ {2011 - YDIFF, 2, 29, date(2011 - YDIFF, 3, 1), date(2011 - YDIFF, 2, 28), false}, | |
+ {2011 - YDIFF, 2, 30, date(2011 - YDIFF, 3, 2), date(2011 - YDIFF, 2, 28), false}, | |
+ {2011 - YDIFF, 2, 31, date(2011 - YDIFF, 3, 3), date(2011 - YDIFF, 2, 28), false}, | |
+ {2011 - YDIFF, 2, 32, date(2011 - YDIFF, 3, 4), false, false}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_lenient(int y, int m, int d, MinguoDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_smart(int y, int m, int d, MinguoDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (Boolean.TRUE.equals(smart)) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else if (smart instanceof MinguoDate) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, smart); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_strict(int y, int m, int d, MinguoDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (strict) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yd") | |
+ Object[][] data_resolve_yd() { | |
+ return new Object[][] { | |
+ {2012 - YDIFF, -365, date(2010 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, -364, date(2011 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, -31, date(2011 - YDIFF, 11, 30), false, false}, | |
+ {2012 - YDIFF, -30, date(2011 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, -12, date(2011 - YDIFF, 12, 19), false, false}, | |
+ {2012 - YDIFF, -1, date(2011 - YDIFF, 12, 30), false, false}, | |
+ {2012 - YDIFF, 0, date(2011 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, date(2012 - YDIFF, 1, 1), true, true}, | |
+ {2012 - YDIFF, 2, date(2012 - YDIFF, 1, 2), true, true}, | |
+ {2012 - YDIFF, 31, date(2012 - YDIFF, 1, 31), true, true}, | |
+ {2012 - YDIFF, 32, date(2012 - YDIFF, 2, 1), true, true}, | |
+ {2012 - YDIFF, 59, date(2012 - YDIFF, 2, 28), true, true}, | |
+ {2012 - YDIFF, 60, date(2012 - YDIFF, 2, 29), true, true}, | |
+ {2012 - YDIFF, 61, date(2012 - YDIFF, 3, 1), true, true}, | |
+ {2012 - YDIFF, 365, date(2012 - YDIFF, 12, 30), true, true}, | |
+ {2012 - YDIFF, 366, date(2012 - YDIFF, 12, 31), true, true}, | |
+ {2012 - YDIFF, 367, date(2013 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 367 + 364, date(2013 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 367 + 365, date(2014 - YDIFF, 1, 1), false, false}, | |
+ | |
+ {2011 - YDIFF, 59, date(2011 - YDIFF, 2, 28), true, true}, | |
+ {2011 - YDIFF, 60, date(2011 - YDIFF, 3, 1), true, true}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_lenient(int y, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_smart(int y, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (smart) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_strict(int y, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (strict) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_ymaa") | |
+ Object[][] data_resolve_ymaa() { | |
+ return new Object[][] { | |
+ {2012 - YDIFF, 1, 1, -365, date(2010 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, 1, -364, date(2011 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, -31, date(2011 - YDIFF, 11, 30), false, false}, | |
+ {2012 - YDIFF, 1, 1, -30, date(2011 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, -12, date(2011 - YDIFF, 12, 19), false, false}, | |
+ {2012 - YDIFF, 1, 1, 1, date(2012 - YDIFF, 1, 1), true, true}, | |
+ {2012 - YDIFF, 1, 1, 59, date(2012 - YDIFF, 2, 28), false, false}, | |
+ {2012 - YDIFF, 1, 1, 60, date(2012 - YDIFF, 2, 29), false, false}, | |
+ {2012 - YDIFF, 1, 1, 61, date(2012 - YDIFF, 3, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, 365, date(2012 - YDIFF, 12, 30), false, false}, | |
+ {2012 - YDIFF, 1, 1, 366, date(2012 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, 1, 367, date(2013 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, 367 + 364, date(2013 - YDIFF, 12, 31), false, false}, | |
+ {2012 - YDIFF, 1, 1, 367 + 365, date(2014 - YDIFF, 1, 1), false, false}, | |
+ | |
+ {2012 - YDIFF, 2, 0, 1, date(2012 - YDIFF, 1, 25), false, false}, | |
+ {2012 - YDIFF, 2, 0, 7, date(2012 - YDIFF, 1, 31), false, false}, | |
+ {2012 - YDIFF, 2, 1, 1, date(2012 - YDIFF, 2, 1), true, true}, | |
+ {2012 - YDIFF, 2, 1, 7, date(2012 - YDIFF, 2, 7), true, true}, | |
+ {2012 - YDIFF, 2, 2, 1, date(2012 - YDIFF, 2, 8), true, true}, | |
+ {2012 - YDIFF, 2, 2, 7, date(2012 - YDIFF, 2, 14), true, true}, | |
+ {2012 - YDIFF, 2, 3, 1, date(2012 - YDIFF, 2, 15), true, true}, | |
+ {2012 - YDIFF, 2, 3, 7, date(2012 - YDIFF, 2, 21), true, true}, | |
+ {2012 - YDIFF, 2, 4, 1, date(2012 - YDIFF, 2, 22), true, true}, | |
+ {2012 - YDIFF, 2, 4, 7, date(2012 - YDIFF, 2, 28), true, true}, | |
+ {2012 - YDIFF, 2, 5, 1, date(2012 - YDIFF, 2, 29), true, true}, | |
+ {2012 - YDIFF, 2, 5, 2, date(2012 - YDIFF, 3, 1), true, false}, | |
+ {2012 - YDIFF, 2, 5, 7, date(2012 - YDIFF, 3, 6), true, false}, | |
+ {2012 - YDIFF, 2, 6, 1, date(2012 - YDIFF, 3, 7), false, false}, | |
+ {2012 - YDIFF, 2, 6, 7, date(2012 - YDIFF, 3, 13), false, false}, | |
+ | |
+ {2012 - YDIFF, 12, 1, 1, date(2012 - YDIFF, 12, 1), true, true}, | |
+ {2012 - YDIFF, 12, 5, 1, date(2012 - YDIFF, 12, 29), true, true}, | |
+ {2012 - YDIFF, 12, 5, 2, date(2012 - YDIFF, 12, 30), true, true}, | |
+ {2012 - YDIFF, 12, 5, 3, date(2012 - YDIFF, 12, 31), true, true}, | |
+ {2012 - YDIFF, 12, 5, 4, date(2013 - YDIFF, 1, 1), true, false}, | |
+ {2012 - YDIFF, 12, 5, 7, date(2013 - YDIFF, 1, 4), true, false}, | |
+ | |
+ {2012 - YDIFF, -12, 1, 1, date(2010 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, -11, 1, 1, date(2011 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, -1, 1, 1, date(2011 - YDIFF, 11, 1), false, false}, | |
+ {2012 - YDIFF, 0, 1, 1, date(2011 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 1, 1, 1, date(2012 - YDIFF, 1, 1), true, true}, | |
+ {2012 - YDIFF, 12, 1, 1, date(2012 - YDIFF, 12, 1), true, true}, | |
+ {2012 - YDIFF, 13, 1, 1, date(2013 - YDIFF, 1, 1), false, false}, | |
+ {2012 - YDIFF, 24, 1, 1, date(2013 - YDIFF, 12, 1), false, false}, | |
+ {2012 - YDIFF, 25, 1, 1, date(2014 - YDIFF, 1, 1), false, false}, | |
+ | |
+ {2011 - YDIFF, 2, 1, 1, date(2011 - YDIFF, 2, 1), true, true}, | |
+ {2011 - YDIFF, 2, 4, 7, date(2011 - YDIFF, 2, 28), true, true}, | |
+ {2011 - YDIFF, 2, 5, 1, date(2011 - YDIFF, 3, 1), true, false}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_lenient(int y, int m, int w, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_smart(int y, int m, int w, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ if (smart) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_strict(int y, int m, int w, int d, MinguoDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ if (strict) { | |
+ MinguoDate date = MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ MinguoChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ private static MinguoDate date(int y, int m, int d) { | |
+ return MinguoDate.of(y, m, d); | |
+ } | |
+ | |
} | |
diff --git a/test/java/time/tck/java/time/chrono/TCKThaiBuddhistChronology.java b/test/java/time/tck/java/time/chrono/TCKThaiBuddhistChronology.java | |
--- a/test/java/time/tck/java/time/chrono/TCKThaiBuddhistChronology.java | |
+++ b/test/java/time/tck/java/time/chrono/TCKThaiBuddhistChronology.java | |
@@ -85,12 +85,16 @@ | |
import java.time.chrono.ThaiBuddhistChronology; | |
import java.time.chrono.ThaiBuddhistDate; | |
import java.time.chrono.ThaiBuddhistEra; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.ChronoUnit; | |
import java.time.temporal.TemporalAdjuster; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
+import java.util.HashMap; | |
import java.util.List; | |
import java.util.Locale; | |
+import java.util.Map; | |
import org.testng.Assert; | |
import org.testng.annotations.DataProvider; | |
@@ -522,4 +526,409 @@ | |
assertFalse(ThaiBuddhistChronology.INSTANCE.equals(IsoChronology.INSTANCE)); | |
} | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yearOfEra") | |
+ Object[][] data_resolve_yearOfEra() { | |
+ return new Object[][] { | |
+ // era only | |
+ {ResolverStyle.STRICT, -1, null, null, null, null}, | |
+ {ResolverStyle.SMART, -1, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, null, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, null, null, ChronoField.ERA, 0}, | |
+ {ResolverStyle.SMART, 0, null, null, ChronoField.ERA, 0}, | |
+ {ResolverStyle.LENIENT, 0, null, null, ChronoField.ERA, 0}, | |
+ | |
+ {ResolverStyle.STRICT, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.SMART, 1, null, null, ChronoField.ERA, 1}, | |
+ {ResolverStyle.LENIENT, 1, null, null, ChronoField.ERA, 1}, | |
+ | |
+ {ResolverStyle.STRICT, 2, null, null, null, null}, | |
+ {ResolverStyle.SMART, 2, null, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, null, null, null, null}, | |
+ | |
+ // era and year-of-era | |
+ {ResolverStyle.STRICT, -1, 2012, null, null, null}, | |
+ {ResolverStyle.SMART, -1, 2012, null, null, null}, | |
+ {ResolverStyle.LENIENT, -1, 2012, null, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.SMART, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.LENIENT, 0, 2012, null, ChronoField.YEAR, -2011}, | |
+ | |
+ {ResolverStyle.STRICT, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.SMART, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, 1, 2012, null, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, 2, 2012, null, null, null}, | |
+ {ResolverStyle.SMART, 2, 2012, null, null, null}, | |
+ {ResolverStyle.LENIENT, 2, 2012, null, null, null}, | |
+ | |
+ // year-of-era only | |
+ {ResolverStyle.STRICT, null, 2012, null, ChronoField.YEAR_OF_ERA, 2012}, | |
+ {ResolverStyle.SMART, null, 2012, null, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, null, 2012, null, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.SMART, null, Integer.MAX_VALUE, null, null, null}, | |
+ {ResolverStyle.LENIENT, null, Integer.MAX_VALUE, null, ChronoField.YEAR, Integer.MAX_VALUE}, | |
+ | |
+ // year-of-era and year | |
+ {ResolverStyle.STRICT, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.SMART, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ {ResolverStyle.LENIENT, null, 2012, 2012, ChronoField.YEAR, 2012}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.SMART, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ {ResolverStyle.LENIENT, null, 2012, -2011, ChronoField.YEAR, -2011}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, 2013, null, null}, | |
+ {ResolverStyle.SMART, null, 2012, 2013, null, null}, | |
+ {ResolverStyle.LENIENT, null, 2012, 2013, null, null}, | |
+ | |
+ {ResolverStyle.STRICT, null, 2012, -2013, null, null}, | |
+ {ResolverStyle.SMART, null, 2012, -2013, null, null}, | |
+ {ResolverStyle.LENIENT, null, 2012, -2013, null, null}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yearOfEra") | |
+ public void test_resolve_yearOfEra(ResolverStyle style, Integer e, Integer yoe, Integer y, ChronoField field, Integer expected) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ if (e != null) { | |
+ fieldValues.put(ChronoField.ERA, (long) e); | |
+ } | |
+ if (yoe != null) { | |
+ fieldValues.put(ChronoField.YEAR_OF_ERA, (long) yoe); | |
+ } | |
+ if (y != null) { | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ } | |
+ if (field != null) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ assertEquals(date, null); | |
+ assertEquals(fieldValues.get(field), (Long) expected.longValue()); | |
+ assertEquals(fieldValues.size(), 1); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, style); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_ymd") | |
+ Object[][] data_resolve_ymd() { | |
+ return new Object[][] { | |
+ {YDIFF + 2012, 1, -365, date(YDIFF + 2010, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, -364, date(YDIFF + 2011, 1, 1), false, false}, | |
+ {YDIFF + 2012, 1, -31, date(YDIFF + 2011, 11, 30), false, false}, | |
+ {YDIFF + 2012, 1, -30, date(YDIFF + 2011, 12, 1), false, false}, | |
+ {YDIFF + 2012, 1, -12, date(YDIFF + 2011, 12, 19), false, false}, | |
+ {YDIFF + 2012, 1, 1, date(YDIFF + 2012, 1, 1), true, true}, | |
+ {YDIFF + 2012, 1, 27, date(YDIFF + 2012, 1, 27), true, true}, | |
+ {YDIFF + 2012, 1, 28, date(YDIFF + 2012, 1, 28), true, true}, | |
+ {YDIFF + 2012, 1, 29, date(YDIFF + 2012, 1, 29), true, true}, | |
+ {YDIFF + 2012, 1, 30, date(YDIFF + 2012, 1, 30), true, true}, | |
+ {YDIFF + 2012, 1, 31, date(YDIFF + 2012, 1, 31), true, true}, | |
+ {YDIFF + 2012, 1, 59, date(YDIFF + 2012, 2, 28), false, false}, | |
+ {YDIFF + 2012, 1, 60, date(YDIFF + 2012, 2, 29), false, false}, | |
+ {YDIFF + 2012, 1, 61, date(YDIFF + 2012, 3, 1), false, false}, | |
+ {YDIFF + 2012, 1, 365, date(YDIFF + 2012, 12, 30), false, false}, | |
+ {YDIFF + 2012, 1, 366, date(YDIFF + 2012, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, 367, date(YDIFF + 2013, 1, 1), false, false}, | |
+ {YDIFF + 2012, 1, 367 + 364, date(YDIFF + 2013, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, 367 + 365, date(YDIFF + 2014, 1, 1), false, false}, | |
+ | |
+ {YDIFF + 2012, 2, 1, date(YDIFF + 2012, 2, 1), true, true}, | |
+ {YDIFF + 2012, 2, 28, date(YDIFF + 2012, 2, 28), true, true}, | |
+ {YDIFF + 2012, 2, 29, date(YDIFF + 2012, 2, 29), true, true}, | |
+ {YDIFF + 2012, 2, 30, date(YDIFF + 2012, 3, 1), date(YDIFF + 2012, 2, 29), false}, | |
+ {YDIFF + 2012, 2, 31, date(YDIFF + 2012, 3, 2), date(YDIFF + 2012, 2, 29), false}, | |
+ {YDIFF + 2012, 2, 32, date(YDIFF + 2012, 3, 3), false, false}, | |
+ | |
+ {YDIFF + 2012, -12, 1, date(YDIFF + 2010, 12, 1), false, false}, | |
+ {YDIFF + 2012, -11, 1, date(YDIFF + 2011, 1, 1), false, false}, | |
+ {YDIFF + 2012, -1, 1, date(YDIFF + 2011, 11, 1), false, false}, | |
+ {YDIFF + 2012, 0, 1, date(YDIFF + 2011, 12, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, date(YDIFF + 2012, 1, 1), true, true}, | |
+ {YDIFF + 2012, 12, 1, date(YDIFF + 2012, 12, 1), true, true}, | |
+ {YDIFF + 2012, 13, 1, date(YDIFF + 2013, 1, 1), false, false}, | |
+ {YDIFF + 2012, 24, 1, date(YDIFF + 2013, 12, 1), false, false}, | |
+ {YDIFF + 2012, 25, 1, date(YDIFF + 2014, 1, 1), false, false}, | |
+ | |
+ {YDIFF + 2012, 6, -31, date(YDIFF + 2012, 4, 30), false, false}, | |
+ {YDIFF + 2012, 6, -30, date(YDIFF + 2012, 5, 1), false, false}, | |
+ {YDIFF + 2012, 6, -1, date(YDIFF + 2012, 5, 30), false, false}, | |
+ {YDIFF + 2012, 6, 0, date(YDIFF + 2012, 5, 31), false, false}, | |
+ {YDIFF + 2012, 6, 1, date(YDIFF + 2012, 6, 1), true, true}, | |
+ {YDIFF + 2012, 6, 30, date(YDIFF + 2012, 6, 30), true, true}, | |
+ {YDIFF + 2012, 6, 31, date(YDIFF + 2012, 7, 1), date(YDIFF + 2012, 6, 30), false}, | |
+ {YDIFF + 2012, 6, 61, date(YDIFF + 2012, 7, 31), false, false}, | |
+ {YDIFF + 2012, 6, 62, date(YDIFF + 2012, 8, 1), false, false}, | |
+ | |
+ {YDIFF + 2011, 2, 1, date(YDIFF + 2011, 2, 1), true, true}, | |
+ {YDIFF + 2011, 2, 28, date(YDIFF + 2011, 2, 28), true, true}, | |
+ {YDIFF + 2011, 2, 29, date(YDIFF + 2011, 3, 1), date(YDIFF + 2011, 2, 28), false}, | |
+ {YDIFF + 2011, 2, 30, date(YDIFF + 2011, 3, 2), date(YDIFF + 2011, 2, 28), false}, | |
+ {YDIFF + 2011, 2, 31, date(YDIFF + 2011, 3, 3), date(YDIFF + 2011, 2, 28), false}, | |
+ {YDIFF + 2011, 2, 32, date(YDIFF + 2011, 3, 4), false, false}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_lenient(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_smart(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (Boolean.TRUE.equals(smart)) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else if (smart instanceof ThaiBuddhistDate) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, smart); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_strict(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (strict) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yd") | |
+ Object[][] data_resolve_yd() { | |
+ return new Object[][] { | |
+ {YDIFF + 2012, -365, date(YDIFF + 2010, 12, 31), false, false}, | |
+ {YDIFF + 2012, -364, date(YDIFF + 2011, 1, 1), false, false}, | |
+ {YDIFF + 2012, -31, date(YDIFF + 2011, 11, 30), false, false}, | |
+ {YDIFF + 2012, -30, date(YDIFF + 2011, 12, 1), false, false}, | |
+ {YDIFF + 2012, -12, date(YDIFF + 2011, 12, 19), false, false}, | |
+ {YDIFF + 2012, -1, date(YDIFF + 2011, 12, 30), false, false}, | |
+ {YDIFF + 2012, 0, date(YDIFF + 2011, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, date(YDIFF + 2012, 1, 1), true, true}, | |
+ {YDIFF + 2012, 2, date(YDIFF + 2012, 1, 2), true, true}, | |
+ {YDIFF + 2012, 31, date(YDIFF + 2012, 1, 31), true, true}, | |
+ {YDIFF + 2012, 32, date(YDIFF + 2012, 2, 1), true, true}, | |
+ {YDIFF + 2012, 59, date(YDIFF + 2012, 2, 28), true, true}, | |
+ {YDIFF + 2012, 60, date(YDIFF + 2012, 2, 29), true, true}, | |
+ {YDIFF + 2012, 61, date(YDIFF + 2012, 3, 1), true, true}, | |
+ {YDIFF + 2012, 365, date(YDIFF + 2012, 12, 30), true, true}, | |
+ {YDIFF + 2012, 366, date(YDIFF + 2012, 12, 31), true, true}, | |
+ {YDIFF + 2012, 367, date(YDIFF + 2013, 1, 1), false, false}, | |
+ {YDIFF + 2012, 367 + 364, date(YDIFF + 2013, 12, 31), false, false}, | |
+ {YDIFF + 2012, 367 + 365, date(YDIFF + 2014, 1, 1), false, false}, | |
+ | |
+ {YDIFF + 2011, 59, date(YDIFF + 2011, 2, 28), true, true}, | |
+ {YDIFF + 2011, 60, date(YDIFF + 2011, 3, 1), true, true}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_lenient(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_smart(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (smart) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_strict(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (strict) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_ymaa") | |
+ Object[][] data_resolve_ymaa() { | |
+ return new Object[][] { | |
+ {YDIFF + 2012, 1, 1, -365, date(YDIFF + 2010, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, 1, -364, date(YDIFF + 2011, 1, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, -31, date(YDIFF + 2011, 11, 30), false, false}, | |
+ {YDIFF + 2012, 1, 1, -30, date(YDIFF + 2011, 12, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, -12, date(YDIFF + 2011, 12, 19), false, false}, | |
+ {YDIFF + 2012, 1, 1, 1, date(YDIFF + 2012, 1, 1), true, true}, | |
+ {YDIFF + 2012, 1, 1, 59, date(YDIFF + 2012, 2, 28), false, false}, | |
+ {YDIFF + 2012, 1, 1, 60, date(YDIFF + 2012, 2, 29), false, false}, | |
+ {YDIFF + 2012, 1, 1, 61, date(YDIFF + 2012, 3, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, 365, date(YDIFF + 2012, 12, 30), false, false}, | |
+ {YDIFF + 2012, 1, 1, 366, date(YDIFF + 2012, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, 1, 367, date(YDIFF + 2013, 1, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, 367 + 364, date(YDIFF + 2013, 12, 31), false, false}, | |
+ {YDIFF + 2012, 1, 1, 367 + 365, date(YDIFF + 2014, 1, 1), false, false}, | |
+ | |
+ {YDIFF + 2012, 2, 0, 1, date(YDIFF + 2012, 1, 25), false, false}, | |
+ {YDIFF + 2012, 2, 0, 7, date(YDIFF + 2012, 1, 31), false, false}, | |
+ {YDIFF + 2012, 2, 1, 1, date(YDIFF + 2012, 2, 1), true, true}, | |
+ {YDIFF + 2012, 2, 1, 7, date(YDIFF + 2012, 2, 7), true, true}, | |
+ {YDIFF + 2012, 2, 2, 1, date(YDIFF + 2012, 2, 8), true, true}, | |
+ {YDIFF + 2012, 2, 2, 7, date(YDIFF + 2012, 2, 14), true, true}, | |
+ {YDIFF + 2012, 2, 3, 1, date(YDIFF + 2012, 2, 15), true, true}, | |
+ {YDIFF + 2012, 2, 3, 7, date(YDIFF + 2012, 2, 21), true, true}, | |
+ {YDIFF + 2012, 2, 4, 1, date(YDIFF + 2012, 2, 22), true, true}, | |
+ {YDIFF + 2012, 2, 4, 7, date(YDIFF + 2012, 2, 28), true, true}, | |
+ {YDIFF + 2012, 2, 5, 1, date(YDIFF + 2012, 2, 29), true, true}, | |
+ {YDIFF + 2012, 2, 5, 2, date(YDIFF + 2012, 3, 1), true, false}, | |
+ {YDIFF + 2012, 2, 5, 7, date(YDIFF + 2012, 3, 6), true, false}, | |
+ {YDIFF + 2012, 2, 6, 1, date(YDIFF + 2012, 3, 7), false, false}, | |
+ {YDIFF + 2012, 2, 6, 7, date(YDIFF + 2012, 3, 13), false, false}, | |
+ | |
+ {YDIFF + 2012, 12, 1, 1, date(YDIFF + 2012, 12, 1), true, true}, | |
+ {YDIFF + 2012, 12, 5, 1, date(YDIFF + 2012, 12, 29), true, true}, | |
+ {YDIFF + 2012, 12, 5, 2, date(YDIFF + 2012, 12, 30), true, true}, | |
+ {YDIFF + 2012, 12, 5, 3, date(YDIFF + 2012, 12, 31), true, true}, | |
+ {YDIFF + 2012, 12, 5, 4, date(YDIFF + 2013, 1, 1), true, false}, | |
+ {YDIFF + 2012, 12, 5, 7, date(YDIFF + 2013, 1, 4), true, false}, | |
+ | |
+ {YDIFF + 2012, -12, 1, 1, date(YDIFF + 2010, 12, 1), false, false}, | |
+ {YDIFF + 2012, -11, 1, 1, date(YDIFF + 2011, 1, 1), false, false}, | |
+ {YDIFF + 2012, -1, 1, 1, date(YDIFF + 2011, 11, 1), false, false}, | |
+ {YDIFF + 2012, 0, 1, 1, date(YDIFF + 2011, 12, 1), false, false}, | |
+ {YDIFF + 2012, 1, 1, 1, date(YDIFF + 2012, 1, 1), true, true}, | |
+ {YDIFF + 2012, 12, 1, 1, date(YDIFF + 2012, 12, 1), true, true}, | |
+ {YDIFF + 2012, 13, 1, 1, date(YDIFF + 2013, 1, 1), false, false}, | |
+ {YDIFF + 2012, 24, 1, 1, date(YDIFF + 2013, 12, 1), false, false}, | |
+ {YDIFF + 2012, 25, 1, 1, date(YDIFF + 2014, 1, 1), false, false}, | |
+ | |
+ {YDIFF + 2011, 2, 1, 1, date(YDIFF + 2011, 2, 1), true, true}, | |
+ {YDIFF + 2011, 2, 4, 7, date(YDIFF + 2011, 2, 28), true, true}, | |
+ {YDIFF + 2011, 2, 5, 1, date(YDIFF + 2011, 3, 1), true, false}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_lenient(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_smart(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ if (smart) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymaa") | |
+ public void test_resolve_ymaa_strict(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w); | |
+ fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d); | |
+ if (strict) { | |
+ ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ private static ThaiBuddhistDate date(int y, int m, int d) { | |
+ return ThaiBuddhistDate.of(y, m, d); | |
+ } | |
+ | |
} | |
diff --git a/test/java/time/test/java/time/chrono/TestUmmAlQuraChronology.java b/test/java/time/test/java/time/chrono/TestUmmAlQuraChronology.java | |
--- a/test/java/time/test/java/time/chrono/TestUmmAlQuraChronology.java | |
+++ b/test/java/time/test/java/time/chrono/TestUmmAlQuraChronology.java | |
@@ -36,9 +36,13 @@ | |
import java.time.chrono.Chronology; | |
import java.time.chrono.HijrahChronology; | |
import java.time.chrono.HijrahDate; | |
+import java.time.format.ResolverStyle; | |
import java.time.temporal.ChronoField; | |
import java.time.temporal.ChronoUnit; | |
+import java.time.temporal.TemporalField; | |
import java.time.temporal.ValueRange; | |
+import java.util.HashMap; | |
+import java.util.Map; | |
import org.testng.annotations.DataProvider; | |
import org.testng.annotations.Test; | |
@@ -222,4 +226,152 @@ | |
void printRange(ValueRange range, Object obj, ChronoField field) { | |
System.err.printf(" range: min: %d, max: %d; of: %s, field: %s%n", range.getMinimum(), range.getMaximum(), obj.toString(), field.toString()); | |
} | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_ymd") | |
+ Object[][] data_resolve_ymd() { | |
+ return new Object[][] { | |
+ {1434, 1, -355, date(1432, 12, 29), false, false}, | |
+ {1434, 1, -354, date(1433, 1, 1), false, false}, | |
+ {1434, 1, -29, date(1433, 11, 30), false, false}, | |
+ {1434, 1, -28, date(1433, 12, 1), false, false}, | |
+ {1434, 1, -12, date(1433, 12, 17), false, false}, | |
+ {1434, 1, -1, date(1433, 12, 28), false, false}, | |
+ {1434, 1, 0, date(1433, 12, 29), false, false}, | |
+ {1434, 1, 1, date(1434, 1, 1), true, true}, | |
+ {1434, 1, 2, date(1434, 1, 2), true, true}, | |
+ {1434, 1, 29, date(1434, 1, 29), true, true}, | |
+ {1434, 1, 30, date(1434, 2, 1), date(1434, 1, 29), false}, | |
+ {1434, 1, 31, date(1434, 2, 2), false, false}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_lenient(int y, int m, int d, HijrahDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_smart(int y, int m, int d, HijrahDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (Boolean.TRUE.equals(smart)) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else if (smart instanceof HijrahDate) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, smart); | |
+ } else { | |
+ try { | |
+ HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_ymd") | |
+ public void test_resolve_ymd_strict(int y, int m, int d, HijrahDate expected, Object smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m); | |
+ fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d); | |
+ if (strict) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ //----------------------------------------------------------------------- | |
+ @DataProvider(name = "resolve_yd") | |
+ Object[][] data_resolve_yd() { | |
+ return new Object[][] { | |
+ {1434, -355, date(1432, 12, 29), false, false}, | |
+ {1434, -354, date(1433, 1, 1), false, false}, | |
+ {1434, -29, date(1433, 11, 30), false, false}, | |
+ {1434, -28, date(1433, 12, 1), false, false}, | |
+ {1434, -12, date(1433, 12, 17), false, false}, | |
+ {1434, -1, date(1433, 12, 28), false, false}, | |
+ {1434, 0, date(1433, 12, 29), false, false}, | |
+ {1434, 1, date(1434, 1, 1), true, true}, | |
+ {1434, 2, date(1434, 1, 2), true, true}, | |
+ {1434, 29, date(1434, 1, 29), true, true}, | |
+ {1434, 30, date(1434, 2, 1), true, true}, | |
+ {1434, 59, date(1434, 2, 30), true, true}, | |
+ }; | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_lenient(int y, int d, HijrahDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_smart(int y, int d, HijrahDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (smart) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ @Test(dataProvider = "resolve_yd") | |
+ public void test_resolve_yd_strict(int y, int d, HijrahDate expected, boolean smart, boolean strict) { | |
+ Map<TemporalField, Long> fieldValues = new HashMap<>(); | |
+ fieldValues.put(ChronoField.YEAR, (long) y); | |
+ fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d); | |
+ if (strict) { | |
+ HijrahDate date = HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ assertEquals(date, expected); | |
+ assertEquals(fieldValues.size(), 0); | |
+ } else { | |
+ try { | |
+ HijrahChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT); | |
+ fail("Should have failed"); | |
+ } catch (DateTimeException ex) { | |
+ // expected | |
+ } | |
+ } | |
+ } | |
+ | |
+ //----------------------------------------------------------------------- | |
+ private static HijrahDate date(int y, int m, int d) { | |
+ return HijrahDate.of(y, m, d); | |
+ } | |
+ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment