import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.time.DateTimeException; import java.time.Duration; import java.time.LocalDate; import java.time.LocalTime; import java.time.ZoneOffset; import java.time.chrono.ChronoLocalDate; import java.time.chrono.Chronology; import java.time.chrono.HijrahChronology; import java.time.chrono.IsoChronology; import java.time.chrono.JapaneseChronology; import java.time.chrono.MinguoChronology; import java.time.chrono.ThaiBuddhistChronology; import java.time.temporal.ChronoUnit; import java.time.temporal.Temporal; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAmount; import java.time.temporal.TemporalField; import java.time.temporal.TemporalUnit; import java.time.temporal.ValueRange; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TCKChronoLocalDate { Chronology[][] data_of_calendars() { return new Chronology[][]{ {HijrahChronology.INSTANCE}, {IsoChronology.INSTANCE}, {JapaneseChronology.INSTANCE}, {MinguoChronology.INSTANCE}, {ThaiBuddhistChronology.INSTANCE}}; } public static void main(String... args) { TCKChronoLocalDate self = new TCKChronoLocalDate(); self.test_badTemporalFieldChrono(ThaiBuddhistChronology.INSTANCE); } public void test_badTemporalFieldChrono(Chronology chrono) { LocalDate refDate = LocalDate.of(2013, 1, 1); ChronoLocalDate date = chrono.date(refDate); /**** for (Chronology[] clist : data_of_calendars()) { Chronology chrono2 = clist[0]; ChronoLocalDate date2 = chrono2.date(refDate); TemporalField adjuster = new FixedTemporalField(date2); if (chrono != chrono2) { try { date.with(adjuster, 1); throw new RuntimeException("TemporalField doSet should have thrown a ClassCastException" + date.getClass() + ", can not be cast to " + date2.getClass()); } catch (ClassCastException cce) { // Expected exception; not an error } } else { // Same chronology, ChronoLocalDate result = date.with(adjuster, 1); if (!result.equals(date2)) throw new RuntimeException("TemporalField doSet failed to replace date"); } } ****/ } /** * FixedTemporalField returns a fixed Temporal in all adjustments. * Construct an FixedTemporalField with the Temporal that should be returned from doSet. */ static class FixedTemporalField implements TemporalField { private Temporal temporal; FixedTemporalField(Temporal temporal) { this.temporal = temporal; } @Override public String getName() { return "FixedTemporalField"; } @Override public TemporalUnit getBaseUnit() { throw new UnsupportedOperationException("Not supported yet."); } @Override public TemporalUnit getRangeUnit() { throw new UnsupportedOperationException("Not supported yet."); } @Override public ValueRange range() { throw new UnsupportedOperationException("Not supported yet."); } @Override public boolean isSupportedBy(TemporalAccessor temporal) { throw new UnsupportedOperationException("Not supported yet."); } @Override public ValueRange rangeRefinedBy(TemporalAccessor temporal) { throw new UnsupportedOperationException("Not supported yet."); } @Override public long getFrom(TemporalAccessor temporal) { throw new UnsupportedOperationException("Not supported yet."); } @SuppressWarnings("unchecked") @Override public R adjustInto(R temporal, long newValue) { return (R) this.temporal; } } }