|
27 | 27 | import java.time.ZoneId;
|
28 | 28 | import java.time.ZoneOffset;
|
29 | 29 | import java.time.ZonedDateTime;
|
| 30 | +import java.time.format.DateTimeFormatterBuilder; |
| 31 | +import java.time.format.ResolverStyle; |
| 32 | +import java.util.Locale; |
30 | 33 | import java.util.concurrent.atomic.AtomicBoolean;
|
31 | 34 | import java.util.function.LongSupplier;
|
32 | 35 |
|
33 | 36 | import static org.hamcrest.Matchers.containsString;
|
| 37 | +import static org.hamcrest.Matchers.equalTo; |
34 | 38 | import static org.hamcrest.Matchers.is;
|
35 | 39 |
|
36 | 40 | public class JavaDateMathParserTests extends ESTestCase {
|
37 | 41 |
|
38 | 42 | private final DateFormatter formatter = DateFormatter.forPattern("date_optional_time||epoch_millis");
|
39 | 43 | private final DateMathParser parser = formatter.toDateMathParser();
|
40 | 44 |
|
| 45 | + |
| 46 | + public void testRoundUpParserBasedOnList() { |
| 47 | + DateFormatter formatter = new JavaDateFormatter("test", new DateTimeFormatterBuilder() |
| 48 | + .appendPattern("uuuu-MM-dd") |
| 49 | + .toFormatter(Locale.ROOT), |
| 50 | + new DateTimeFormatterBuilder() |
| 51 | + .appendPattern("uuuu-MM-dd'T'HH:mm:ss.S").appendZoneOrOffsetId().toFormatter(Locale.ROOT) |
| 52 | + .withResolverStyle(ResolverStyle.STRICT), |
| 53 | + new DateTimeFormatterBuilder() |
| 54 | + .appendPattern("uuuu-MM-dd'T'HH:mm:ss.S").appendOffset("+HHmm", "Z").toFormatter(Locale.ROOT) |
| 55 | + .withResolverStyle(ResolverStyle.STRICT)); |
| 56 | + Instant parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00.0+0000", () -> 0L, true, (ZoneId) null); |
| 57 | + assertThat(parsed.toEpochMilli(), equalTo(0L)); |
| 58 | + } |
| 59 | + |
| 60 | + public void testMergingOfMultipleParsers() { |
| 61 | + //date_time has 2 parsers, date_time_no_millis has 4. Parsing with rounding should be able to use all of them |
| 62 | + DateFormatter formatter = DateFormatter.forPattern("date_time||date_time_no_millis"); |
| 63 | + //date_time 2 parsers |
| 64 | + Instant parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00.0+00:00", () -> 0L, true, (ZoneId) null); |
| 65 | + assertThat(parsed.toEpochMilli(), equalTo(0L)); |
| 66 | + |
| 67 | + |
| 68 | + parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00.0+0000", () -> 0L, true, (ZoneId) null); |
| 69 | + assertThat(parsed.toEpochMilli(), equalTo(0L)); |
| 70 | + |
| 71 | + //date_time_no_millis 4 parsers |
| 72 | + parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00+00:00", () -> 0L, true, (ZoneId) null); |
| 73 | + assertThat(parsed.toEpochMilli(), equalTo(999L));//defaulting millis |
| 74 | + |
| 75 | + parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00+0000", () -> 0L, true, (ZoneId) null); |
| 76 | + assertThat(parsed.toEpochMilli(), equalTo(999L));//defaulting millis |
| 77 | + |
| 78 | + parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00UTC+00:00", () -> 0L, true, (ZoneId) null); |
| 79 | + assertThat(parsed.toEpochMilli(), equalTo(999L));//defaulting millis |
| 80 | + |
| 81 | + // this one is actually still using parser number 3. I don't see a combination to use parser number 4 |
| 82 | + parsed = formatter.toDateMathParser().parse("1970-01-01T00:00:00", () -> 0L, true, (ZoneId) null); |
| 83 | + assertThat(parsed.toEpochMilli(), equalTo(999L));//defaulting millis |
| 84 | + } |
| 85 | + |
41 | 86 | public void testOverridingLocaleOrZoneAndCompositeRoundUpParser() {
|
42 | 87 | //the pattern has to be composite and the match should not be on the first one
|
43 | 88 | DateFormatter formatter = DateFormatter.forPattern("date||epoch_millis").withLocale(randomLocale(random()));
|
|
0 commit comments