test/java/time/test/java/time/chrono/TestExampleCode.java

Print this page

        

*** 52,181 **** * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package test.java.time.temporal; ! import static java.time.temporal.ChronoField.DAY_OF_MONTH; ! import static java.time.temporal.ChronoField.MONTH_OF_YEAR; ! import static java.time.temporal.ChronoField.YEAR; ! import static java.time.temporal.ChronoField.YEAR_OF_ERA; ! import static org.testng.Assert.assertEquals; ! ! import java.util.Calendar; ! import java.util.GregorianCalendar; ! import java.util.TimeZone; ! ! import java.time.DayOfWeek; ! import java.time.LocalDate; import java.time.temporal.ChronoUnit; ! import java.time.temporal.ISOChrono; ! import java.time.temporal.WeekFields; ! import java.time.temporal.ChronoLocalDate; - import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** ! * Test. */ ! @Test ! public class TestISOChronoImpl { ! @DataProvider(name = "RangeVersusCalendar") ! Object[][] provider_rangeVersusCalendar() { ! return new Object[][]{ ! {LocalDate.of(1900, 1, 4), LocalDate.of(2100, 1, 8)}, ! //{LocalDate.of(1583, 1, 1), LocalDate.of(2100, 1, 1)}, ! }; ! } ! ! //----------------------------------------------------------------------- ! // Verify ISO Calendar matches java.util.Calendar for range ! //----------------------------------------------------------------------- ! @Test(groups = {"implementation"}, dataProvider = "RangeVersusCalendar") ! public void test_ISOChrono_vsCalendar(LocalDate isoStartDate, LocalDate isoEndDate) { ! GregorianCalendar cal = new GregorianCalendar(); ! assertEquals(cal.getCalendarType(), "gregory", "Unexpected calendar type"); ! ChronoLocalDate<ISOChrono> isoDate = ISOChrono.INSTANCE.date(isoStartDate); ! ! cal.setTimeZone(TimeZone.getTimeZone("GMT+00")); ! cal.set(Calendar.YEAR, isoDate.get(YEAR)); ! cal.set(Calendar.MONTH, isoDate.get(MONTH_OF_YEAR) - 1); ! cal.set(Calendar.DAY_OF_MONTH, isoDate.get(DAY_OF_MONTH)); ! ! while (isoDate.isBefore(isoEndDate)) { ! assertEquals(isoDate.get(DAY_OF_MONTH), cal.get(Calendar.DAY_OF_MONTH), "Day mismatch in " + isoDate + "; cal: " + cal); ! assertEquals(isoDate.get(MONTH_OF_YEAR), cal.get(Calendar.MONTH) + 1, "Month mismatch in " + isoDate); ! assertEquals(isoDate.get(YEAR_OF_ERA), cal.get(Calendar.YEAR), "Year mismatch in " + isoDate); ! ! isoDate = isoDate.plus(1, ChronoUnit.DAYS); ! cal.add(Calendar.DAY_OF_MONTH, 1); ! } ! } ! ! //----------------------------------------------------------------------- ! // Verify ISO Calendar matches java.util.Calendar ! // DayOfWeek, WeekOfMonth, WeekOfYear for range ! //----------------------------------------------------------------------- ! @Test(groups = {"implementation"}, dataProvider = "RangeVersusCalendar") ! public void test_DayOfWeek_ISOChrono_vsCalendar(LocalDate isoStartDate, LocalDate isoEndDate) { ! GregorianCalendar cal = new GregorianCalendar(); ! assertEquals(cal.getCalendarType(), "gregory", "Unexpected calendar type"); ! ChronoLocalDate<ISOChrono> isoDate = ISOChrono.INSTANCE.date(isoStartDate); ! ! for (DayOfWeek firstDayOfWeek : DayOfWeek.values()) { ! for (int minDays = 1; minDays <= 7; minDays++) { ! WeekFields weekDef = WeekFields.of(firstDayOfWeek, minDays); ! cal.setFirstDayOfWeek(Math.floorMod(firstDayOfWeek.getValue(), 7) + 1); ! cal.setMinimalDaysInFirstWeek(minDays); ! ! cal.setTimeZone(TimeZone.getTimeZone("GMT+00")); ! cal.set(Calendar.YEAR, isoDate.get(YEAR)); ! cal.set(Calendar.MONTH, isoDate.get(MONTH_OF_YEAR) - 1); ! cal.set(Calendar.DAY_OF_MONTH, isoDate.get(DAY_OF_MONTH)); ! ! while (isoDate.isBefore(isoEndDate)) { ! assertEquals(isoDate.get(DAY_OF_MONTH), cal.get(Calendar.DAY_OF_MONTH), "Day mismatch in " + isoDate + "; cal: " + cal); ! assertEquals(isoDate.get(MONTH_OF_YEAR), cal.get(Calendar.MONTH) + 1, "Month mismatch in " + isoDate); ! assertEquals(isoDate.get(YEAR_OF_ERA), cal.get(Calendar.YEAR), "Year mismatch in " + isoDate); ! int jDOW = Math.floorMod(cal.get(Calendar.DAY_OF_WEEK) - 2, 7) + 1; ! int isoDOW = isoDate.get(weekDef.dayOfWeek()); ! if (jDOW != isoDOW) { ! System.err.printf(" DOW vs Calendar jdow: %s, isoDate(DOW): %s, isoDate: %s, WeekDef: %s%n", jDOW, isoDOW, isoDate, weekDef); ! } ! assertEquals(jDOW, isoDOW, "Calendar DayOfWeek does not match ISO DayOfWeek"); ! ! int jweekOfMonth = cal.get(Calendar.WEEK_OF_MONTH); ! int isoWeekOfMonth = isoDate.get(weekDef.weekOfMonth()); ! if (jweekOfMonth != isoWeekOfMonth) { ! System.err.printf(" WeekOfMonth jWeekOfMonth: %s, isoWeekOfMonth: %s, isoDate: %s, %s%n", ! jweekOfMonth, isoWeekOfMonth, isoDate, weekDef); ! } ! assertEquals(jweekOfMonth, isoWeekOfMonth, "Calendar WeekOfMonth does not match ISO WeekOfMonth"); ! ! int jweekOfYear = cal.get(Calendar.WEEK_OF_YEAR); ! int isoWeekOfYear = isoDate.get(weekDef.weekOfYear()); ! if (jweekOfYear != isoWeekOfYear) { ! // TBD: Issue #186 Remove misleading output pending resolution ! // System.err.printf(" Mismatch WeekOfYear jweekOfYear: %s, isoWeekOfYear: %s, isoDate: %s, WeekDef: %s%n", jweekOfYear, isoWeekOfYear, isoDate, weekDef); } - //assertEquals(jweekOfYear, isoWeekOfYear, "Calendar WeekOfYear does not match ISO WeekOfYear"); ! isoDate = isoDate.plus(1, ChronoUnit.DAYS); ! cal.add(Calendar.DAY_OF_MONTH, 1); ! } ! } ! } } /** ! * Return the ISO Day of Week from a java.util.Calendr DAY_OF_WEEK. ! * @param the java.util.Calendar day of week (1=Sunday, 7=Saturday) ! * @return the ISO DayOfWeek */ ! private DayOfWeek toISOfromCalendarDOW(int i) { ! return DayOfWeek.of(Math.floorMod(i - 2, 7) + 1); } } --- 52,165 ---- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ! package test.java.time.chrono; ! import java.time.LocalTime; ! import java.time.chrono.HijrahDate; ! import java.time.chrono.ThaiBuddhistDate; ! import java.time.chrono.ChronoLocalDateTime; ! import java.time.chrono.ChronoLocalDate; ! import java.time.chrono.Chronology; ! import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; ! import java.util.Set; import org.testng.annotations.Test; /** ! * Test case verify that the example code in the package-info.java compiles ! * and runs. */ ! public class TestExampleCode { ! @Test ! public void test_chronoPackageExample() { ! // Print the Thai Buddhist date ! ChronoLocalDate<?> now1 = Chronology.of("ThaiBuddhist").dateNow(); ! int day = now1.get(ChronoField.DAY_OF_MONTH); ! int dow = now1.get(ChronoField.DAY_OF_WEEK); ! int month = now1.get(ChronoField.MONTH_OF_YEAR); ! int year = now1.get(ChronoField.YEAR); ! System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), ! dow, day, month, year); ! ! // Enumerate the list of available calendars and print today for each ! Set<Chronology> chronos = Chronology.getAvailableChronologies(); ! for (Chronology chrono : chronos) { ! ChronoLocalDate<?> date = chrono.dateNow(); ! System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); ! } ! ! // Print today's date and the last day of the year for the Thai Buddhist Calendar. ! ChronoLocalDate<?> first = now1 ! .with(ChronoField.DAY_OF_MONTH, 1) ! .with(ChronoField.MONTH_OF_YEAR, 1); ! ChronoLocalDate<?> last = first ! .plus(1, ChronoUnit.YEARS) ! .minus(1, ChronoUnit.DAYS); ! System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), ! first, last); ! } ! ! @Test ! public void test_calendarPackageExample() { ! ! // Enumerate the list of available calendars and print today for each ! Set<Chronology> chronos = Chronology.getAvailableChronologies(); ! for (Chronology chrono : chronos) { ! ChronoLocalDate<?> date = chrono.dateNow(); ! System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); ! } ! ! // Print the Thai Buddhist date ! ThaiBuddhistDate now1 = ThaiBuddhistDate.now(); ! int day = now1.get(ChronoField.DAY_OF_MONTH); ! int dow = now1.get(ChronoField.DAY_OF_WEEK); ! int month = now1.get(ChronoField.MONTH_OF_YEAR); ! int year = now1.get(ChronoField.YEAR); ! System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), ! dow, day, month, year); ! ! // Print today's date and the last day of the year for the Thai Buddhist Calendar. ! ThaiBuddhistDate first = now1 ! .with(ChronoField.DAY_OF_MONTH, 1) ! .with(ChronoField.MONTH_OF_YEAR, 1); ! ThaiBuddhistDate last = first ! .plus(1, ChronoUnit.YEARS) ! .minus(1, ChronoUnit.DAYS); ! System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), ! first, last); ! } ! ! @Test ! public void test_library() { ! HijrahDate date = HijrahDate.now(); ! HijrahDate next = next(date); ! ChronoLocalDateTime<HijrahDate> noonTomorrow = tomorrowNoon(date); ! System.out.printf(" now: %s, noon tomorrow: %s%n", date, noonTomorrow); } ! /** ! * Simple function based on a date, returning a ChronoDate of the same type. ! * @param <D> a parameterized ChronoLocalDate ! * @param date a specific date extending ChronoLocalDate ! * @return a new date in the same chronology. ! */ ! private <D extends ChronoLocalDate<D>> D next(D date) { ! return date.plus(1, ChronoUnit.DAYS); } /** ! * Simple function based on a date, returning a ChronoLocalDateTime of the ! * same chronology. ! * @param <D> a parameterized ChronoLocalDate ! * @param date a specific date extending ChronoLocalDate ! * @return a [@code ChronoLocalDateTime<D>} using the change chronology. */ ! private <D extends ChronoLocalDate<D>> ChronoLocalDateTime<D> tomorrowNoon(D date) { ! return date.plus(1, ChronoUnit.DAYS).atTime(LocalTime.of(12, 0)); } }