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.4KB

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