1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.util;
18
19import junit.framework.TestCase;
20
21import java.util.Calendar;
22import android.test.suitebuilder.annotation.SmallTest;
23
24/**
25 * Unit tests for {@link DayOfMonthCursor}.
26 */
27public class DayOfMonthCursorTest extends TestCase {
28
29    @SmallTest
30    public void testMonthRows() {
31        DayOfMonthCursor mc = new DayOfMonthCursor(2007,
32                Calendar.SEPTEMBER, 11, Calendar.SUNDAY);
33
34        assertArraysEqual(new int[]{26, 27, 28, 29, 30, 31, 1},
35                mc.getDigitsForRow(0));
36        assertArraysEqual(new int[]{2, 3, 4, 5, 6, 7, 8},
37                mc.getDigitsForRow(1));
38        assertArraysEqual(new int[]{30, 1, 2, 3, 4, 5, 6},
39                mc.getDigitsForRow(5));
40    }
41
42    @SmallTest
43    public void testMoveLeft() {
44        DayOfMonthCursor mc = new DayOfMonthCursor(2007,
45                Calendar.SEPTEMBER, 3, Calendar.SUNDAY);
46
47        assertEquals(Calendar.SEPTEMBER, mc.getMonth());
48        assertEquals(3, mc.getSelectedDayOfMonth());
49        assertEquals(1, mc.getSelectedRow());
50        assertEquals(1, mc.getSelectedColumn());
51
52        // move left, still same row
53        assertFalse(mc.left());
54        assertEquals(2, mc.getSelectedDayOfMonth());
55        assertEquals(1, mc.getSelectedRow());
56        assertEquals(0, mc.getSelectedColumn());
57
58        // wrap over to previous column, same month
59        assertFalse(mc.left());
60        assertEquals(1, mc.getSelectedDayOfMonth());
61        assertEquals(0, mc.getSelectedRow());
62        assertEquals(6, mc.getSelectedColumn());
63
64        // wrap to previous month
65        assertTrue(mc.left());
66        assertEquals(Calendar.AUGUST, mc.getMonth());
67        assertEquals(31, mc.getSelectedDayOfMonth());
68        assertEquals(4, mc.getSelectedRow());
69        assertEquals(5, mc.getSelectedColumn());
70    }
71
72    @SmallTest
73    public void testMoveRight() {
74        DayOfMonthCursor mc = new DayOfMonthCursor(2007,
75                Calendar.SEPTEMBER, 28, Calendar.SUNDAY);
76
77        assertEquals(Calendar.SEPTEMBER, mc.getMonth());
78        assertEquals(28, mc.getSelectedDayOfMonth());
79        assertEquals(4, mc.getSelectedRow());
80        assertEquals(5, mc.getSelectedColumn());
81
82        // same row
83        assertFalse(mc.right());
84        assertEquals(29, mc.getSelectedDayOfMonth());
85        assertEquals(4, mc.getSelectedRow());
86        assertEquals(6, mc.getSelectedColumn());
87
88        // wrap to next column, same month
89        assertFalse(mc.right());
90        assertEquals(30, mc.getSelectedDayOfMonth());
91        assertEquals(5, mc.getSelectedRow());
92        assertEquals(0, mc.getSelectedColumn());
93
94        // next month
95        assertTrue(mc.right());
96        assertEquals(Calendar.OCTOBER, mc.getMonth());
97        assertEquals(1, mc.getSelectedDayOfMonth());
98        assertEquals(0, mc.getSelectedRow());
99        assertEquals(1, mc.getSelectedColumn());
100    }
101
102    @SmallTest
103    public void testMoveUp() {
104        DayOfMonthCursor mc = new DayOfMonthCursor(2007,
105                Calendar.SEPTEMBER, 13, Calendar.SUNDAY);
106
107        assertEquals(Calendar.SEPTEMBER, mc.getMonth());
108        assertEquals(13, mc.getSelectedDayOfMonth());
109        assertEquals(2, mc.getSelectedRow());
110        assertEquals(4, mc.getSelectedColumn());
111
112        // up, same month
113        assertFalse(mc.up());
114        assertEquals(6, mc.getSelectedDayOfMonth());
115        assertEquals(1, mc.getSelectedRow());
116        assertEquals(4, mc.getSelectedColumn());
117
118        // up, flips back
119        assertTrue(mc.up());
120        assertEquals(Calendar.AUGUST, mc.getMonth());
121        assertEquals(30, mc.getSelectedDayOfMonth());
122        assertEquals(4, mc.getSelectedRow());
123        assertEquals(4, mc.getSelectedColumn());
124    }
125
126    @SmallTest
127    public void testMoveDown() {
128        DayOfMonthCursor mc = new DayOfMonthCursor(2007,
129                Calendar.SEPTEMBER, 23, Calendar.SUNDAY);
130
131        assertEquals(Calendar.SEPTEMBER, mc.getMonth());
132        assertEquals(23, mc.getSelectedDayOfMonth());
133        assertEquals(4, mc.getSelectedRow());
134        assertEquals(0, mc.getSelectedColumn());
135
136        // down, same month
137        assertFalse(mc.down());
138        assertEquals(30, mc.getSelectedDayOfMonth());
139        assertEquals(5, mc.getSelectedRow());
140        assertEquals(0, mc.getSelectedColumn());
141
142        // down, next month
143        assertTrue(mc.down());
144        assertEquals(Calendar.OCTOBER, mc.getMonth());
145        assertEquals(7, mc.getSelectedDayOfMonth());
146        assertEquals(1, mc.getSelectedRow());
147        assertEquals(0, mc.getSelectedColumn());
148    }
149
150    private void assertArraysEqual(int[] expected, int[] actual) {
151        assertEquals("array length", expected.length, actual.length);
152        for (int i = 0; i < expected.length; i++) {
153            assertEquals("index " + i,
154                    expected[i], actual[i]);
155        }
156    }
157}
158