Skip to content

Commit c79566b

Browse files
committed
richer test cases
1 parent 4f81150 commit c79566b

File tree

2 files changed

+230
-1
lines changed

2 files changed

+230
-1
lines changed

mug/src/main/java/com/google/mu/time/DateTimeFormats.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@
107107
* formatOf("<Tue>, dd MM yyyy HH:mm:ss.SSS <America/New_York>");
108108
* }</pre>
109109
*
110+
* <p>i18n isn't supported.
111+
*
110112
* @since 7.1
111113
*/
112114
public final class DateTimeFormats {

mug/src/test/java/com/google/mu/time/DateTimeFormatsTest.java

Lines changed: 228 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
package com.google.mu.time;
1616

1717
import static com.google.common.truth.Truth.assertThat;
18+
import static com.google.common.truth.Truth.assertWithMessage;
1819
import static com.google.mu.time.DateTimeFormats.formatOf;
1920
import static org.junit.Assert.assertThrows;
2021

2122
import java.time.DateTimeException;
23+
import java.time.DayOfWeek;
2224
import java.time.Instant;
2325
import java.time.LocalDate;
2426
import java.time.LocalDateTime;
@@ -471,7 +473,28 @@ public void localTimeExamples(
471473
String example) {
472474
DateTimeFormatter formatter = DateTimeFormats.formatOf(example);
473475
LocalTime time = LocalTime.parse(example, formatter);
474-
assertThat(time.format(formatter)).isEqualTo(example);
476+
assertWithMessage("Using format %s", formatter).that(time.format(formatter)).isEqualTo(example);
477+
}
478+
479+
@Test
480+
@SuppressWarnings("DateTimeExampleStringCheck")
481+
public void allZerosLocalTime(
482+
@TestParameter({
483+
"00:00:00",
484+
"00:00:00.0",
485+
"00:00:00.00",
486+
"00:00:00.000",
487+
"00:00:00.0000",
488+
"00:00:00.00000",
489+
"00:00:00.000000",
490+
"00:00:00.0000000",
491+
"00:00:00.00000000",
492+
"00:00:00.000000000",
493+
})
494+
String example) {
495+
DateTimeFormatter formatter = DateTimeFormats.formatOf(example);
496+
LocalTime time = LocalTime.parse(example, formatter);
497+
assertWithMessage("Using format %s", formatter).that(time.format(formatter)).isEqualTo("00:00:00");
475498
}
476499

477500
@Test
@@ -486,6 +509,12 @@ public void localDateExamplesFromDifferentFormatters(
486509
assertThat(LocalDate.parse(example, DateTimeFormats.formatOf(example))).isEqualTo(day);
487510
}
488511

512+
@Test
513+
public void localDateWithWeekdayExamples() {
514+
ZonedDateTime date = DateTimeFormats.parseZonedDateTime("Mon, 2007-12-31 00:00:00 America/New_York");
515+
assertThat(date.getDayOfWeek()).isEqualTo(DayOfWeek.MONDAY);
516+
}
517+
489518
@Test
490519
public void zonedDateTimeExamplesFromDifferentFormatters(
491520
@TestParameter({
@@ -977,6 +1006,204 @@ public void typoInExample() {
9771006
DateTimeException.class, () -> formatOf("<Febuary Wedenesday>, <2021/20/30>"));
9781007
}
9791008

1009+
@Test public void fuzzTests() {
1010+
assertLocalDate("2005-04-27", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2005-04-27"));
1011+
assertLocalDate("2004-10-27", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2004-10-27"));
1012+
assertLocalDate("1993/07/05", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1993-07-05"));
1013+
assertLocalDate("Tue, 2016-09-20", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2016-09-20"));
1014+
assertLocalDate("2009/09/23", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2009-09-23"));
1015+
assertLocalDate("2027-04-02", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2027-04-02"));
1016+
assertZonedDateTime("1994-08-03 19:32:42 UTC", "yyyy-MM-dd HH:mm:ss zzz")
1017+
.isEqualTo(ZonedDateTime.parse("1994-08-03T19:32:42+00:00[UTC]"));
1018+
assertLocalDate("Thu, 2011-06-09", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2011-06-09"));
1019+
assertLocalDate("2021-01-11", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2021-01-11"));
1020+
assertZonedDateTime("2000-04-28 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1021+
.isEqualTo(ZonedDateTime.parse("2000-04-28T19:32:00+00:00[UTC]"));
1022+
assertLocalDate("2018-08-13", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2018-08-13"));
1023+
assertLocalDate("Mon, 2022-07-25", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2022-07-25"));
1024+
assertLocalDate("Mon, 2019-09-09", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2019-09-09"));
1025+
assertLocalDate("2024-08-04", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2024-08-04"));
1026+
assertLocalDate("2027/11/13", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2027-11-13"));
1027+
assertLocalDate("2008-06-03", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2008-06-03"));
1028+
assertLocalDate("Wed, 2014-01-08", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2014-01-08"));
1029+
assertLocalDate("Wed, 2004-03-24", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2004-03-24"));
1030+
assertLocalDate("2023/06/04", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2023-06-04"));
1031+
assertLocalDate("2023-12-18", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-12-18"));
1032+
assertLocalDate("1998-05-17", "yyyy-MM-dd").isEqualTo(LocalDate.parse("1998-05-17"));
1033+
assertLocalDate("Fri, 2023-05-05", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-05-05"));
1034+
assertLocalDate("Wed, 1991-11-27", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("1991-11-27"));
1035+
assertZonedDateTime("Sat, 2027-06-05 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1036+
.isEqualTo(ZonedDateTime.parse("2027-06-05T19:32:00+00:00[UTC]"));
1037+
assertLocalDate("2002/03/04", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2002-03-04"));
1038+
assertZonedDateTime("2003-01-12 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1039+
.isEqualTo(ZonedDateTime.parse("2003-01-12T19:32:00+00:00[UTC]"));
1040+
assertLocalDate("2020-06-11", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-06-11"));
1041+
assertLocalDate("1991/08/20", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1991-08-20"));
1042+
assertLocalDate("2015-03-23", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2015-03-23"));
1043+
assertLocalDate("2019/01/25", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2019-01-25"));
1044+
assertLocalDate("2005/05/14", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2005-05-14"));
1045+
assertZonedDateTime("Sun, 2011-09-18 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1046+
.isEqualTo(ZonedDateTime.parse("2011-09-18T19:32:42+00:00[UTC]"));
1047+
assertLocalDate("1992/05/10", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1992-05-10"));
1048+
assertLocalDate("Fri, 2027-12-03", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2027-12-03"));
1049+
assertLocalDate("Fri, 2020-05-15", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-05-15"));
1050+
assertLocalDate("Sun, 2020-10-25", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-10-25"));
1051+
assertLocalDate("1999/12/15", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1999-12-15"));
1052+
assertZonedDateTime("Thu, 1997-02-06 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1053+
.isEqualTo(ZonedDateTime.parse("1997-02-06T19:32:42+00:00[UTC]"));
1054+
assertLocalDate("Thu, 2021-08-05", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2021-08-05"));
1055+
assertLocalDate("Wed, 2007-01-10", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2007-01-10"));
1056+
assertLocalDate("1998/11/17", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1998-11-17"));
1057+
assertLocalDate("2026-08-27", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2026-08-27"));
1058+
assertLocalDate("Tue, 2016-08-02", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2016-08-02"));
1059+
assertLocalDate("1991/07/24", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1991-07-24"));
1060+
assertLocalDate("1994-06-06", "yyyy-MM-dd").isEqualTo(LocalDate.parse("1994-06-06"));
1061+
assertLocalDate("2007/05/06", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2007-05-06"));
1062+
assertLocalDate("2020/07/07", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2020-07-07"));
1063+
assertZonedDateTime("2025-08-06 19:32:42.4 UTC", "yyyy-MM-dd HH:mm:ss.S zzz")
1064+
.isEqualTo(ZonedDateTime.parse("2025-08-06T19:32:42.4+00:00[UTC]"));
1065+
assertLocalDate("Tue, 1992-08-04", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("1992-08-04"));
1066+
assertLocalDate("2014/01/20", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2014-01-20"));
1067+
assertLocalDate("2028/03/09", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2028-03-09"));
1068+
assertZonedDateTime("2003-09-08 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1069+
.isEqualTo(ZonedDateTime.parse("2003-09-08T19:32:00+00:00[UTC]"));
1070+
assertLocalDate("Sat, 2020-04-11", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-04-11"));
1071+
assertLocalDate("2029-05-03", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2029-05-03"));
1072+
assertLocalDate("2001/10/17", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2001-10-17"));
1073+
assertLocalDate("2029/06/04", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2029-06-04"));
1074+
assertLocalDate("Thu, 2023-03-16", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-03-16"));
1075+
assertLocalDate("2022/12/01", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2022-12-01"));
1076+
assertLocalDate("Thu, 2024-08-01", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2024-08-01"));
1077+
assertZonedDateTime("2001-04-25 19:32:42.47 UTC", "yyyy-MM-dd HH:mm:ss.SS zzz")
1078+
.isEqualTo(ZonedDateTime.parse("2001-04-25T19:32:42.47+00:00[UTC]"));
1079+
assertLocalDate("1997/02/28", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1997-02-28"));
1080+
assertLocalDate("2014-01-17", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2014-01-17"));
1081+
assertLocalDate("Thu, 2022-07-14", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2022-07-14"));
1082+
assertLocalDate("2013-05-26", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2013-05-26"));
1083+
assertLocalDate("2026/07/14", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2026-07-14"));
1084+
assertLocalDate("2003-01-11", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2003-01-11"));
1085+
assertZonedDateTime("Mon, 2003-10-20 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1086+
.isEqualTo(ZonedDateTime.parse("2003-10-20T19:32:00+00:00[UTC]"));
1087+
assertLocalDate("Sun, 2023-12-03", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-12-03"));
1088+
assertLocalDate("2007-12-07", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2007-12-07"));
1089+
assertLocalDate("1993/08/09", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1993-08-09"));
1090+
assertLocalDate("2000-03-09", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2000-03-09"));
1091+
assertLocalDate("2003/08/12", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2003-08-12"));
1092+
assertLocalDate("Sun, 1995-12-03", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("1995-12-03"));
1093+
assertZonedDateTime("Tue, 2014-08-05 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1094+
.isEqualTo(ZonedDateTime.parse("2014-08-05T19:32:42+00:00[UTC]"));
1095+
assertLocalDate("1998/05/05", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1998-05-05"));
1096+
assertLocalDate("Tue, 2014-02-04", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2014-02-04"));
1097+
assertLocalDate("2017/06/28", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2017-06-28"));
1098+
assertLocalDate("Fri, 2027-02-12", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2027-02-12"));
1099+
assertLocalDate("Wed, 2007-08-08", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2007-08-08"));
1100+
assertLocalDate("Sat, 2004-06-05", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2004-06-05"));
1101+
assertLocalDate("2009-04-17", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2009-04-17"));
1102+
assertLocalDate("Wed, 2028-12-20", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2028-12-20"));
1103+
assertZonedDateTime("Fri, 1999-01-22 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1104+
.isEqualTo(ZonedDateTime.parse("1999-01-22T19:32:00+00:00[UTC]"));
1105+
assertLocalDate("2010-05-23", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2010-05-23"));
1106+
assertLocalDate("2012/02/18", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2012-02-18"));
1107+
assertLocalDate("2028/05/12", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2028-05-12"));
1108+
assertLocalDate("2016-05-26", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2016-05-26"));
1109+
assertLocalDate("1994/08/27", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1994-08-27"));
1110+
assertLocalDate("1995-08-16", "yyyy-MM-dd").isEqualTo(LocalDate.parse("1995-08-16"));
1111+
assertLocalDate("2019-11-04", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2019-11-04"));
1112+
assertLocalDate("2020-07-01", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-07-01"));
1113+
assertLocalDate("2025/03/23", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2025-03-23"));
1114+
assertLocalDate("Wed, 2013-10-02", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2013-10-02"));
1115+
assertLocalDate("2003/12/14", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2003-12-14"));
1116+
assertLocalDate("2014-06-23", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2014-06-23"));
1117+
assertLocalDate("1992-04-21", "yyyy-MM-dd").isEqualTo(LocalDate.parse("1992-04-21"));
1118+
}
1119+
1120+
@Test
1121+
public void fuzzTestsWithZoneAndWeekdays() {
1122+
assertLocalDate("2005-04-27", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2005-04-27"));
1123+
assertLocalDate("2004-10-27", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2004-10-27"));
1124+
assertLocalDate("1993/07/05", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1993-07-05"));
1125+
assertLocalDate("Tue, 2016-09-20", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2016-09-20"));
1126+
assertLocalDate("2009/09/23", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2009-09-23"));
1127+
assertLocalDate("2027-04-02", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2027-04-02"));
1128+
assertZonedDateTime("1994-08-03 19:32:42 UTC", "yyyy-MM-dd HH:mm:ss zzz")
1129+
.isEqualTo(ZonedDateTime.parse("1994-08-03T19:32:42+00:00[UTC]"));
1130+
assertLocalDate("Thu, 2011-06-09", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2011-06-09"));
1131+
assertLocalDate("2021-01-11", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2021-01-11"));
1132+
assertZonedDateTime("2000-04-28 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1133+
.isEqualTo(ZonedDateTime.parse("2000-04-28T19:32:00+00:00[UTC]"));
1134+
assertLocalDate("2018-08-13", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2018-08-13"));
1135+
assertLocalDate("Mon, 2022-07-25", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2022-07-25"));
1136+
assertLocalDate("Mon, 2019-09-09", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2019-09-09"));
1137+
assertLocalDate("2024-08-04", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2024-08-04"));
1138+
assertLocalDate("2027/11/13", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2027-11-13"));
1139+
assertLocalDate("2008-06-03", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2008-06-03"));
1140+
assertLocalDate("Wed, 2014-01-08", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2014-01-08"));
1141+
assertLocalDate("Wed, 2004-03-24", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2004-03-24"));
1142+
assertLocalDate("2023/06/04", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2023-06-04"));
1143+
assertZonedDateTime("Thu, 1994-03-24 19:32:42.4 UTC", "E, yyyy-MM-dd HH:mm:ss.S zzz")
1144+
.isEqualTo(ZonedDateTime.parse("1994-03-24T19:32:42.4+00:00[UTC]"));
1145+
assertLocalDate("2023-12-18", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-12-18"));
1146+
assertLocalDate("1998-05-17", "yyyy-MM-dd").isEqualTo(LocalDate.parse("1998-05-17"));
1147+
assertLocalDate("Fri, 2023-05-05", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2023-05-05"));
1148+
assertLocalDate("Wed, 1991-11-27", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("1991-11-27"));
1149+
assertZonedDateTime("Sat, 2027-06-05 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1150+
.isEqualTo(ZonedDateTime.parse("2027-06-05T19:32:00+00:00[UTC]"));
1151+
assertLocalDate("2002/03/04", "yyyy/MM/dd").isEqualTo(LocalDate.parse("2002-03-04"));
1152+
assertZonedDateTime("2003-01-12 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1153+
.isEqualTo(ZonedDateTime.parse("2003-01-12T19:32:00+00:00[UTC]"));
1154+
assertLocalDate("2020-06-11", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-06-11"));
1155+
assertLocalDate("1991/08/20", "yyyy/MM/dd").isEqualTo(LocalDate.parse("1991-08-20"));
1156+
assertLocalDate("2015-03-23", "yyyy-MM-dd").isEqualTo(LocalDate.parse("2015-03-23"));
1157+
assertZonedDateTime("Sun, 2011-09-18 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1158+
.isEqualTo(ZonedDateTime.parse("2011-09-18T19:32:42+00:00[UTC]"));
1159+
assertLocalDate("Fri, 2027-12-03", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2027-12-03"));
1160+
assertLocalDate("Fri, 2020-05-15", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-05-15"));
1161+
assertLocalDate("Sun, 2020-10-25", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-10-25"));
1162+
assertZonedDateTime("Thu, 1997-02-06 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1163+
.isEqualTo(ZonedDateTime.parse("1997-02-06T19:32:42+00:00[UTC]"));
1164+
assertLocalDate("Tue, 2016-08-02", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2016-08-02"));
1165+
assertZonedDateTime("2025-08-06 19:32:42.4 UTC", "yyyy-MM-dd HH:mm:ss.S zzz")
1166+
.isEqualTo(ZonedDateTime.parse("2025-08-06T19:32:42.4+00:00[UTC]"));
1167+
assertZonedDateTime("2003-09-08 19:32 UTC", "yyyy-MM-dd HH:mm zzz")
1168+
.isEqualTo(ZonedDateTime.parse("2003-09-08T19:32:00+00:00[UTC]"));
1169+
assertLocalDate("Sat, 2020-04-11", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2020-04-11"));
1170+
assertLocalDate("Thu, 2024-08-01", "E, yyyy-MM-dd").isEqualTo(LocalDate.parse("2024-08-01"));
1171+
assertZonedDateTime("2001-04-25 19:32:42.47 UTC", "yyyy-MM-dd HH:mm:ss.SS zzz")
1172+
.isEqualTo(ZonedDateTime.parse("2001-04-25T19:32:42.47+00:00[UTC]"));
1173+
assertZonedDateTime("Mon, 2003-10-20 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1174+
.isEqualTo(ZonedDateTime.parse("2003-10-20T19:32:00+00:00[UTC]"));
1175+
assertZonedDateTime("Tue, 2014-08-05 19:32:42 UTC", "E, yyyy-MM-dd HH:mm:ss zzz")
1176+
.isEqualTo(ZonedDateTime.parse("2014-08-05T19:32:42+00:00[UTC]"));
1177+
assertZonedDateTime("Fri, 1999-01-22 19:32 UTC", "E, yyyy-MM-dd HH:mm zzz")
1178+
.isEqualTo(ZonedDateTime.parse("1999-01-22T19:32:00+00:00[UTC]"));
1179+
}
1180+
1181+
@Test
1182+
public void singleDigitSecond_notSupported() {
1183+
assertThrows(DateTimeException.class, () -> formatOf("12:00:1"));
1184+
}
1185+
1186+
@Test
1187+
public void ambiguousMonthAndDay() {
1188+
assertThrows(DateTimeException.class, () -> formatOf("01/02/03"));
1189+
assertThrows(DateTimeException.class, () -> formatOf("01/02/2003"));
1190+
}
1191+
1192+
@Test
1193+
public void trailingDotAfterSecond_notSupported() {
1194+
assertThrows(DateTimeException.class, () -> formatOf("2023-01-01T00:00:00."));
1195+
}
1196+
1197+
private static <T> ComparableSubject<ZonedDateTime> assertZonedDateTime(
1198+
@CompileTimeConstant String example, String equivalentPattern) {
1199+
String pattern = DateTimeFormats.inferDateTimePattern(example);
1200+
assertThat(pattern).isEqualTo(equivalentPattern);
1201+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
1202+
ZonedDateTime dateTime = ZonedDateTime.parse(example, formatter);
1203+
assertThat(dateTime.format(formatter)).isEqualTo(example);
1204+
return assertThat(dateTime);
1205+
}
1206+
9801207
private static ComparableSubject<LocalDateTime> assertLocalDateTime(
9811208
@CompileTimeConstant String example, String equivalentPattern) {
9821209
String pattern = DateTimeFormats.inferDateTimePattern(example);

0 commit comments

Comments
 (0)