summaryrefslogtreecommitdiffstats
path: root/client/tests/src/com/vaadin/client/DateTimeServiceTest.java
blob: e5e6cbd7dbeac87bf12b5151159ea3008174dce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.vaadin.client;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.junit.Assert;
import org.junit.Test;

public class DateTimeServiceTest {

    final long MILLISECONDS_PER_DAY = 24 * 3600 * 1000;

    static Map<Date, Integer> isoWeekNumbers = new HashMap<Date, Integer>();
    static {
        isoWeekNumbers.put(getDate(2005, 02, 02), 5);

        isoWeekNumbers.put(getDate(2005, 1, 1), 53);
        isoWeekNumbers.put(getDate(2005, 1, 2), 53);
        isoWeekNumbers.put(getDate(2005, 1, 3), 1);
        isoWeekNumbers.put(getDate(2005, 1, 4), 1);
        isoWeekNumbers.put(getDate(2005, 1, 5), 1);
        isoWeekNumbers.put(getDate(2005, 1, 6), 1);
        isoWeekNumbers.put(getDate(2005, 1, 7), 1);
        isoWeekNumbers.put(getDate(2005, 1, 8), 1);
        isoWeekNumbers.put(getDate(2005, 1, 9), 1);
        isoWeekNumbers.put(getDate(2005, 1, 10), 2);
        isoWeekNumbers.put(getDate(2005, 12, 31), 52);
        isoWeekNumbers.put(getDate(2005, 12, 30), 52);
        isoWeekNumbers.put(getDate(2005, 12, 29), 52);
        isoWeekNumbers.put(getDate(2005, 12, 28), 52);
        isoWeekNumbers.put(getDate(2005, 12, 27), 52);
        isoWeekNumbers.put(getDate(2005, 12, 26), 52);
        isoWeekNumbers.put(getDate(2005, 12, 25), 51);
        isoWeekNumbers.put(getDate(2007, 1, 1), 1);
        isoWeekNumbers.put(getDate(2007, 12, 30), 52);
        isoWeekNumbers.put(getDate(2007, 12, 31), 1);
        isoWeekNumbers.put(getDate(2008, 1, 1), 1);
        isoWeekNumbers.put(getDate(2008, 12, 28), 52);
        isoWeekNumbers.put(getDate(2008, 12, 29), 1);
        isoWeekNumbers.put(getDate(2008, 12, 30), 1);
        isoWeekNumbers.put(getDate(2008, 12, 31), 1);
        isoWeekNumbers.put(getDate(2009, 1, 1), 1);
        isoWeekNumbers.put(getDate(2009, 12, 31), 53);
        isoWeekNumbers.put(getDate(2010, 1, 1), 53);
        isoWeekNumbers.put(getDate(2010, 1, 2), 53);
        isoWeekNumbers.put(getDate(2010, 1, 3), 53);
        isoWeekNumbers.put(getDate(2010, 1, 4), 1);
        isoWeekNumbers.put(getDate(2010, 1, 5), 1);
        isoWeekNumbers.put(getDate(2010, 10, 10), 40);
        isoWeekNumbers.put(getDate(2015, 3, 24), 13);
        isoWeekNumbers.put(getDate(2015, 3, 31), 14);
        isoWeekNumbers.put(getDate(2015, 10, 13), 42);
        isoWeekNumbers.put(getDate(2015, 10, 20), 43);
        isoWeekNumbers.put(getDate(2015, 10, 27), 44);
        isoWeekNumbers.put(getDate(2026, 3, 24), 13);
        isoWeekNumbers.put(getDate(2026, 3, 31), 14);
        isoWeekNumbers.put(getDate(2026, 10, 13), 42);
        isoWeekNumbers.put(getDate(2026, 10, 20), 43);
        isoWeekNumbers.put(getDate(2026, 10, 27), 44);

    }

    /**
     * Test all dates from 1990-1992 + some more and see that {@link Calendar}
     * calculates the ISO week number like we do.
     * 
     */
    @Test
    public void testISOWeekNumbers() {
        Calendar c = Calendar.getInstance();
        c.set(1990, 1, 1);
        long start = c.getTimeInMillis();

        for (int i = 0; i < 1000; i++) {
            Date d = new Date(start + i * MILLISECONDS_PER_DAY);
            int expected = getCalendarISOWeekNr(d);
            int calculated = DateTimeService.getISOWeekNumber(d);
            Assert.assertEquals(d + " should be week " + expected, expected,
                    calculated);

        }
    }

    /**
     * Verify that special cases are handled correctly by us (and
     * {@link Calendar}).
     * 
     */
    @Test
    public void testSampleISOWeekNumbers() {
        for (Date d : isoWeekNumbers.keySet()) {
            // System.out.println("Sample: " + d);
            int expected = isoWeekNumbers.get(d);
            int calculated = DateTimeService.getISOWeekNumber(d);
            Assert.assertEquals(d + " should be week " + expected
                    + " (Java Calendar is wrong?)", expected,
                    getCalendarISOWeekNr(d));
            Assert.assertEquals(d + " should be week " + expected, expected,
                    calculated);

        }
    }

    private int getCalendarISOWeekNr(Date d) {
        Calendar c = Calendar.getInstance();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setMinimalDaysInFirstWeek(4);
        c.setTime(d);

        return c.get(Calendar.WEEK_OF_YEAR);
    }

    private static Date getDate(int year, int month, int date) {
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(year, month - 1, date);
        return c.getTime();
    }

}