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 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. }
  46. /**
  47. * Test all dates from 1990-1992 + some more and see that {@link Calendar}
  48. * calculates the ISO week number like we do.
  49. *
  50. */
  51. public void testISOWeekNumbers() {
  52. Calendar c = Calendar.getInstance();
  53. c.set(1990, 1, 1);
  54. long start = c.getTimeInMillis();
  55. for (int i = 0; i < 1000; i++) {
  56. Date d = new Date(start + i * MILLISECONDS_PER_DAY);
  57. int expected = getCalendarISOWeekNr(d);
  58. int calculated = DateTimeService.getISOWeekNumber(d);
  59. assertEquals(d + " should be week " + expected, expected,
  60. calculated);
  61. }
  62. }
  63. /**
  64. * Verify that special cases are handled correctly by us (and
  65. * {@link Calendar}).
  66. *
  67. */
  68. public void testSampleISOWeekNumbers() {
  69. for (Date d : isoWeekNumbers.keySet()) {
  70. // System.out.println("Sample: " + d);
  71. int expected = isoWeekNumbers.get(d);
  72. int calculated = DateTimeService.getISOWeekNumber(d);
  73. assertEquals(d + " should be week " + expected
  74. + " (Java Calendar is wrong?)", expected,
  75. getCalendarISOWeekNr(d));
  76. assertEquals(d + " should be week " + expected, expected,
  77. calculated);
  78. }
  79. }
  80. private int getCalendarISOWeekNr(Date d) {
  81. Calendar c = Calendar.getInstance();
  82. c.setFirstDayOfWeek(Calendar.MONDAY);
  83. c.setMinimalDaysInFirstWeek(4);
  84. c.setTime(d);
  85. return c.get(Calendar.WEEK_OF_YEAR);
  86. }
  87. private static Date getDate(int year, int month, int date) {
  88. Calendar c = Calendar.getInstance();
  89. c.clear();
  90. c.set(year, month - 1, date);
  91. return c.getTime();
  92. }
  93. }