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)));
-//    }
-
 }