You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DateTimeServiceTest.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package com.vaadin.client;
  2. import static org.junit.Assert.assertEquals;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import org.junit.Test;
  8. public class DateTimeServiceTest {
  9. final long MILLISECONDS_PER_DAY = 24 * 3600 * 1000;
  10. static Map<Date, Integer> isoWeekNumbers = new HashMap<>();
  11. static {
  12. isoWeekNumbers.put(getDate(2005, 02, 02), 5);
  13. isoWeekNumbers.put(getDate(2005, 1, 1), 53);
  14. isoWeekNumbers.put(getDate(2005, 1, 2), 53);
  15. isoWeekNumbers.put(getDate(2005, 1, 3), 1);
  16. isoWeekNumbers.put(getDate(2005, 1, 4), 1);
  17. isoWeekNumbers.put(getDate(2005, 1, 5), 1);
  18. isoWeekNumbers.put(getDate(2005, 1, 6), 1);
  19. isoWeekNumbers.put(getDate(2005, 1, 7), 1);
  20. isoWeekNumbers.put(getDate(2005, 1, 8), 1);
  21. isoWeekNumbers.put(getDate(2005, 1, 9), 1);
  22. isoWeekNumbers.put(getDate(2005, 1, 10), 2);
  23. isoWeekNumbers.put(getDate(2005, 12, 31), 52);
  24. isoWeekNumbers.put(getDate(2005, 12, 30), 52);
  25. isoWeekNumbers.put(getDate(2005, 12, 29), 52);
  26. isoWeekNumbers.put(getDate(2005, 12, 28), 52);
  27. isoWeekNumbers.put(getDate(2005, 12, 27), 52);
  28. isoWeekNumbers.put(getDate(2005, 12, 26), 52);
  29. isoWeekNumbers.put(getDate(2005, 12, 25), 51);
  30. isoWeekNumbers.put(getDate(2007, 1, 1), 1);
  31. isoWeekNumbers.put(getDate(2007, 12, 30), 52);
  32. isoWeekNumbers.put(getDate(2007, 12, 31), 1);
  33. isoWeekNumbers.put(getDate(2008, 1, 1), 1);
  34. isoWeekNumbers.put(getDate(2008, 12, 28), 52);
  35. isoWeekNumbers.put(getDate(2008, 12, 29), 1);
  36. isoWeekNumbers.put(getDate(2008, 12, 30), 1);
  37. isoWeekNumbers.put(getDate(2008, 12, 31), 1);
  38. isoWeekNumbers.put(getDate(2009, 1, 1), 1);
  39. isoWeekNumbers.put(getDate(2009, 12, 31), 53);
  40. isoWeekNumbers.put(getDate(2010, 1, 1), 53);
  41. isoWeekNumbers.put(getDate(2010, 1, 2), 53);
  42. isoWeekNumbers.put(getDate(2010, 1, 3), 53);
  43. isoWeekNumbers.put(getDate(2010, 1, 4), 1);
  44. isoWeekNumbers.put(getDate(2010, 1, 5), 1);
  45. isoWeekNumbers.put(getDate(2010, 10, 10), 40);
  46. isoWeekNumbers.put(getDate(2015, 3, 24), 13);
  47. isoWeekNumbers.put(getDate(2015, 3, 31), 14);
  48. isoWeekNumbers.put(getDate(2015, 10, 13), 42);
  49. isoWeekNumbers.put(getDate(2015, 10, 20), 43);
  50. isoWeekNumbers.put(getDate(2015, 10, 27), 44);
  51. isoWeekNumbers.put(getDate(2026, 3, 24), 13);
  52. isoWeekNumbers.put(getDate(2026, 3, 31), 14);
  53. isoWeekNumbers.put(getDate(2026, 10, 13), 42);
  54. isoWeekNumbers.put(getDate(2026, 10, 20), 43);
  55. isoWeekNumbers.put(getDate(2026, 10, 27), 44);
  56. }
  57. /**
  58. * Test all dates from 1990-1992 + some more and see that {@link Calendar}
  59. * calculates the ISO week number like we do.
  60. *
  61. */
  62. @Test
  63. public void testISOWeekNumbers() {
  64. Calendar c = Calendar.getInstance();
  65. c.set(1990, 1, 1);
  66. long start = c.getTimeInMillis();
  67. for (int i = 0; i < 1000; i++) {
  68. Date d = new Date(start + i * MILLISECONDS_PER_DAY);
  69. int expected = getCalendarISOWeekNr(d);
  70. int calculated = DateTimeService.getISOWeekNumber(d);
  71. assertEquals(d + " should be week " + expected, expected,
  72. calculated);
  73. }
  74. }
  75. /**
  76. * Verify that special cases are handled correctly by us (and
  77. * {@link Calendar}).
  78. *
  79. */
  80. @Test
  81. public void testSampleISOWeekNumbers() {
  82. for (Date d : isoWeekNumbers.keySet()) {
  83. // System.out.println("Sample: " + d);
  84. int expected = isoWeekNumbers.get(d);
  85. int calculated = DateTimeService.getISOWeekNumber(d);
  86. assertEquals(
  87. d + " should be week " + expected
  88. + " (Java Calendar is wrong?)",
  89. expected, getCalendarISOWeekNr(d));
  90. assertEquals(d + " should be week " + expected, expected,
  91. calculated);
  92. }
  93. }
  94. private int getCalendarISOWeekNr(Date d) {
  95. Calendar c = Calendar.getInstance();
  96. c.setFirstDayOfWeek(Calendar.MONDAY);
  97. c.setMinimalDaysInFirstWeek(4);
  98. c.setTime(d);
  99. return c.get(Calendar.WEEK_OF_YEAR);
  100. }
  101. private static Date getDate(int year, int month, int date) {
  102. Calendar c = Calendar.getInstance();
  103. c.clear();
  104. c.set(year, month - 1, date);
  105. return c.getTime();
  106. }
  107. }