test/java/time/test/java/time/temporal/TestDateTimeBuilderCombinations.java
Print this page
@@ -69,13 +69,17 @@
import static java.time.temporal.ChronoField.EPOCH_DAY;
import static java.time.temporal.ChronoField.EPOCH_MONTH;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.YEAR;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+import java.time.DateTimeException;
import java.time.LocalDate;
-import java.time.format.DateTimeBuilder;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalField;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -96,76 +100,112 @@
{EPOCH_DAY, 12, null, null, null, null, null, null, LocalDate.class, LocalDate.of(1970, 1, 13)},
};
}
@Test(dataProvider = "combine")
- public void test_derive(TemporalField field1, Number value1, TemporalField field2, Number value2,
- TemporalField field3, Number value3, TemporalField field4, Number value4, Class<?> query, Object expectedVal) {
- DateTimeBuilder builder = new DateTimeBuilder(field1, value1.longValue());
+ public void test_derive(final TemporalField field1, final Number value1,
+ final TemporalField field2, final Number value2,
+ final TemporalField field3, final Number value3,
+ final TemporalField field4, final Number value4,
+ Class<?> query, Object expectedVal) {
+ // mock for testing that does not fully comply with TemporalAccessor contract
+ TemporalAccessor test = new TemporalAccessor() {
+ @Override
+ public boolean isSupported(TemporalField field) {
+ return field == field1 || field == field2 || field == field3 || field == field4;
+ }
+ @Override
+ public long getLong(TemporalField field) {
+ if (field == field1) {
+ return value1.longValue();
+ }
+ if (field == field2) {
+ return value2.longValue();
+ }
+ if (field == field3) {
+ return value3.longValue();
+ }
+ if (field == field4) {
+ return value4.longValue();
+ }
+ throw new DateTimeException("Unsupported");
+ }
+ };
+ String str = "";
+ DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();
+ dtfb.appendValue(field1).appendLiteral('-');
+ str += value1 + "-";
if (field2 != null) {
- builder.addFieldValue(field2, value2.longValue());
+ dtfb.appendValue(field2).appendLiteral('-');
+ str += value2 + "-";
}
if (field3 != null) {
- builder.addFieldValue(field3, value3.longValue());
+ dtfb.appendValue(field3).appendLiteral('-');
+ str += value3 + "-";
}
if (field4 != null) {
- builder.addFieldValue(field4, value4.longValue());
+ dtfb.appendValue(field4).appendLiteral('-');
+ str += value4 + "-";
+ }
+ TemporalAccessor parsed = dtfb.toFormatter().parse(str);
+ if (query == LocalDate.class) {
+ if (expectedVal != null) {
+ assertEquals(parsed.query(LocalDate::from), expectedVal);
+ } else {
+ try {
+ parsed.query(LocalDate::from);
+ fail();
+ } catch (DateTimeException ex) {
+ // expected
+ }
+ }
+ } else {
+ throw new IllegalArgumentException();
}
- builder.resolve();
- assertEquals(builder.extract((Class<?>) query), expectedVal);
}
//-----------------------------------------------------------------------
@DataProvider(name = "normalized")
Object[][] data_normalized() {
return new Object[][] {
- {YEAR, 2127, null, null, null, null, YEAR, 2127},
- {MONTH_OF_YEAR, 12, null, null, null, null, MONTH_OF_YEAR, 12},
- {DAY_OF_YEAR, 127, null, null, null, null, DAY_OF_YEAR, 127},
- {DAY_OF_MONTH, 23, null, null, null, null, DAY_OF_MONTH, 23},
- {DAY_OF_WEEK, 127, null, null, null, null, DAY_OF_WEEK, 127L},
- {ALIGNED_WEEK_OF_YEAR, 23, null, null, null, null, ALIGNED_WEEK_OF_YEAR, 23},
- {ALIGNED_DAY_OF_WEEK_IN_YEAR, 4, null, null, null, null, ALIGNED_DAY_OF_WEEK_IN_YEAR, 4L},
- {ALIGNED_WEEK_OF_MONTH, 4, null, null, null, null, ALIGNED_WEEK_OF_MONTH, 4},
- {ALIGNED_DAY_OF_WEEK_IN_MONTH, 3, null, null, null, null, ALIGNED_DAY_OF_WEEK_IN_MONTH, 3},
- {EPOCH_MONTH, 15, null, null, null, null, EPOCH_MONTH, null},
- {EPOCH_MONTH, 15, null, null, null, null, YEAR, 1971},
- {EPOCH_MONTH, 15, null, null, null, null, MONTH_OF_YEAR, 4},
+ {YEAR, 2127, YEAR, 2127},
+ {MONTH_OF_YEAR, 12, MONTH_OF_YEAR, 12},
+ {DAY_OF_YEAR, 127, DAY_OF_YEAR, 127},
+ {DAY_OF_MONTH, 23, DAY_OF_MONTH, 23},
+ {DAY_OF_WEEK, 127, DAY_OF_WEEK, 127L},
+ {ALIGNED_WEEK_OF_YEAR, 23, ALIGNED_WEEK_OF_YEAR, 23},
+ {ALIGNED_DAY_OF_WEEK_IN_YEAR, 4, ALIGNED_DAY_OF_WEEK_IN_YEAR, 4L},
+ {ALIGNED_WEEK_OF_MONTH, 4, ALIGNED_WEEK_OF_MONTH, 4},
+ {ALIGNED_DAY_OF_WEEK_IN_MONTH, 3, ALIGNED_DAY_OF_WEEK_IN_MONTH, 3},
+ {EPOCH_MONTH, 15, EPOCH_MONTH, null},
+ {EPOCH_MONTH, 15, YEAR, 1971},
+ {EPOCH_MONTH, 15, MONTH_OF_YEAR, 4},
};
}
@Test(dataProvider = "normalized")
- public void test_normalized(TemporalField field1, Number value1, TemporalField field2, Number value2,
- TemporalField field3, Number value3, TemporalField query, Number expectedVal) {
- DateTimeBuilder builder = new DateTimeBuilder(field1, value1.longValue());
- if (field2 != null) {
- builder.addFieldValue(field2, value2.longValue());
+ public void test_normalized(final TemporalField field1, final Number value1, TemporalField expectedField, Number expectedVal) {
+ // mock for testing that does not fully comply with TemporalAccessor contract
+ TemporalAccessor test = new TemporalAccessor() {
+ @Override
+ public boolean isSupported(TemporalField field) {
+ return field == field1;
+ }
+ @Override
+ public long getLong(TemporalField field) {
+ if (field == field1) {
+ return value1.longValue();
}
- if (field3 != null) {
- builder.addFieldValue(field3, value3.longValue());
+ throw new DateTimeException("Unsupported");
}
- builder.resolve();
+ };
+ DateTimeFormatter f = new DateTimeFormatterBuilder().appendValue(field1).toFormatter();
+ String str = value1.toString();
+ TemporalAccessor temporal = f.parse(str);
if (expectedVal != null) {
- assertEquals(builder.getLong(query), expectedVal.longValue());
+ assertEquals(temporal.getLong(expectedField), expectedVal.longValue());
} else {
- assertEquals(builder.containsFieldValue(query), false);
+ assertEquals(temporal.isSupported(expectedField), false);
}
}
- //-----------------------------------------------------------------------
- // TODO: maybe reinstate
-// public void test_split() {
-// DateTimeBuilder builder = new DateTimeBuilder();
-// builder.addCalendrical(LocalDateTime.of(2012, 6, 30, 12, 30));
-// builder.addCalendrical(ZoneOffset.ofHours(2));
-// builder.resolve();
-// assertEquals(builder.build(LocalDate.class), LocalDate.of(2012, 6, 30));
-// assertEquals(builder.build(LocalTime.class), LocalTime.of(12, 30));
-// assertEquals(builder.build(ZoneOffset.class), ZoneOffset.ofHours(2));
-//
-// assertEquals(builder.build(LocalDateTime.class), LocalDateTime.of(2012, 6, 30, 12, 30));
-// assertEquals(builder.build(OffsetDate.class), OffsetDate.of(LocalDate.of(2012, 6, 30), ZoneOffset.ofHours(2)));
-// assertEquals(builder.build(OffsetTime.class), OffsetTime.of(LocalTime.of(12, 30), ZoneOffset.ofHours(2)));
-//// assertEquals(builder.build(OffsetDateTime.class), OffsetDateTime.of(2012, 6, 30, 12, 30, ZoneOffset.ofHours(2)));
-// }
-
}