1/*
2 * Copyright 2012 AndroidPlot.com
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 com.androidplot.ui;
18
19import android.graphics.RectF;
20import com.androidplot.mock.MockRectF;
21import com.androidplot.ui.FixedTableModel;
22import com.androidplot.ui.TableOrder;
23import mockit.*;
24import org.junit.Before;
25import org.junit.Test;
26
27import java.util.Iterator;
28
29import static junit.framework.Assert.*;
30
31public class FixedTableModelTest {
32    @Before
33    public void setUp() throws Exception {
34        Mockit.setUpMocks(MockRectF.class);
35    }
36
37    @Test
38    public void testConstructor() throws Exception {
39        FixedTableModel model = new FixedTableModel(100, 100, null);
40        // TODO
41    }
42
43    @Test
44    public void testIterator() throws Exception {
45        FixedTableModel model = new FixedTableModel(100, 100, TableOrder.COLUMN_MAJOR);
46
47        RectF tableRect = new RectF(0, 0, 1000, 2000);
48
49        Iterator<RectF> it = model.getIterator(tableRect, 5);
50
51        assertTrue(it.hasNext());
52        RectF cellRect = it.next();
53
54        assertTrue(it.hasNext());
55        cellRect = it.next();
56
57        assertTrue(it.hasNext());
58        cellRect = it.next();
59
60        assertTrue(it.hasNext());
61        cellRect = it.next();
62
63        assertTrue(it.hasNext());
64        cellRect = it.next();
65
66        assertFalse(it.hasNext());
67        try {
68            cellRect = it.next();
69            fail("Expected IndexOutOfBoundsException");
70        } catch(IndexOutOfBoundsException ex) {
71            // this was expected
72        }
73    }
74
75    @Test
76    public void testColumnMajor() throws Exception {
77        FixedTableModel model = new FixedTableModel(300, 500, TableOrder.COLUMN_MAJOR);
78
79        RectF tableRect = new RectF(0, 0, 1000, 2000);
80
81        // test the numElement limit:
82        Iterator<RectF> it = model.getIterator(tableRect, 5);
83        assertTrue(it.hasNext());
84        RectF cellRect = it.next();
85        assertEquals(0f, cellRect.left);
86        assertEquals(0f, cellRect.top);
87        assertEquals(300f, cellRect.right);
88        assertEquals(500f, cellRect.bottom);
89
90        assertTrue(it.hasNext());
91        cellRect = it.next();
92        assertEquals(300f, cellRect.left);
93        assertEquals(0f, cellRect.top);
94        assertEquals(600f, cellRect.right);
95        assertEquals(500f, cellRect.bottom);
96
97        assertTrue(it.hasNext());
98        cellRect = it.next();
99        assertEquals(600f, cellRect.left);
100        assertEquals(0f, cellRect.top);
101        assertEquals(900f, cellRect.right);
102        assertEquals(500f, cellRect.bottom);
103
104        assertTrue(it.hasNext());
105        cellRect = it.next();
106        assertEquals(0f, cellRect.left);
107        assertEquals(500f, cellRect.top);
108        assertEquals(300f, cellRect.right);
109        assertEquals(1000f, cellRect.bottom);
110
111        assertTrue(it.hasNext());
112        cellRect = it.next();
113        assertEquals(300f, cellRect.left);
114        assertEquals(500f, cellRect.top);
115        assertEquals(600f, cellRect.right);
116        assertEquals(1000f, cellRect.bottom);
117
118        assertFalse(it.hasNext());
119
120        // test border limit:
121        it = model.getIterator(tableRect, 25);
122        assertTrue(it.hasNext());
123        cellRect = it.next();
124        assertEquals(0f, cellRect.left);
125        assertEquals(0f, cellRect.top);
126        assertEquals(300f, cellRect.right);
127        assertEquals(500f, cellRect.bottom);
128
129        assertTrue(it.hasNext());
130        cellRect = it.next();
131        assertEquals(300f, cellRect.left);
132        assertEquals(0f, cellRect.top);
133        assertEquals(600f, cellRect.right);
134        assertEquals(500f, cellRect.bottom);
135
136        assertTrue(it.hasNext());
137        cellRect = it.next();
138        assertEquals(600f, cellRect.left);
139        assertEquals(0f, cellRect.top);
140        assertEquals(900f, cellRect.right);
141        assertEquals(500f, cellRect.bottom);
142
143        assertTrue(it.hasNext());
144        cellRect = it.next();
145        assertEquals(0f, cellRect.left);
146        assertEquals(500f, cellRect.top);
147        assertEquals(300f, cellRect.right);
148        assertEquals(1000f, cellRect.bottom);
149
150        assertTrue(it.hasNext());
151        cellRect = it.next();
152        assertEquals(300f, cellRect.left);
153        assertEquals(500f, cellRect.top);
154        assertEquals(600f, cellRect.right);
155        assertEquals(1000f, cellRect.bottom);
156
157        assertTrue(it.hasNext());
158        cellRect = it.next();
159        assertEquals(600f, cellRect.left);
160        assertEquals(500f, cellRect.top);
161        assertEquals(900f, cellRect.right);
162        assertEquals(1000f, cellRect.bottom);
163
164        assertTrue(it.hasNext());
165        cellRect = it.next();
166        assertEquals(0f, cellRect.left);
167        assertEquals(1000f, cellRect.top);
168        assertEquals(300f, cellRect.right);
169        assertEquals(1500f, cellRect.bottom);
170
171        assertTrue(it.hasNext());
172        cellRect = it.next();
173        assertEquals(300f, cellRect.left);
174        assertEquals(1000f, cellRect.top);
175        assertEquals(600f, cellRect.right);
176        assertEquals(1500f, cellRect.bottom);
177
178        assertTrue(it.hasNext());
179        cellRect = it.next();
180        assertEquals(600f, cellRect.left);
181        assertEquals(1000f, cellRect.top);
182        assertEquals(900f, cellRect.right);
183        assertEquals(1500f, cellRect.bottom);
184
185        assertTrue(it.hasNext());
186        cellRect = it.next();
187        assertEquals(0f, cellRect.left);
188        assertEquals(1500f, cellRect.top);
189        assertEquals(300f, cellRect.right);
190        assertEquals(2000f, cellRect.bottom);
191
192        assertTrue(it.hasNext());
193        cellRect = it.next();
194        assertEquals(300f, cellRect.left);
195        assertEquals(1500f, cellRect.top);
196        assertEquals(600f, cellRect.right);
197        assertEquals(2000f, cellRect.bottom);
198
199        assertTrue(it.hasNext());
200        cellRect = it.next();
201        assertEquals(600f, cellRect.left);
202        assertEquals(1500f, cellRect.top);
203        assertEquals(900f, cellRect.right);
204        assertEquals(2000f, cellRect.bottom);
205
206        //we've reached the limit
207        assertFalse(it.hasNext());
208    }
209
210    @Test
211    public void testRowMajor() throws Exception {
212        FixedTableModel model = new FixedTableModel(300, 500, TableOrder.ROW_MAJOR);
213
214        RectF tableRect = new RectF(0, 0, 1000, 2000);
215
216        // test the numElement limit:
217        Iterator<RectF> it = model.getIterator(tableRect, 5);
218        assertTrue(it.hasNext());
219        RectF cellRect = it.next();
220        assertEquals(0f, cellRect.left);
221        assertEquals(0f, cellRect.top);
222        assertEquals(300f, cellRect.right);
223        assertEquals(500f, cellRect.bottom);
224
225        assertTrue(it.hasNext());
226        cellRect = it.next();
227        assertEquals(0f, cellRect.left);
228        assertEquals(500f, cellRect.top);
229        assertEquals(300f, cellRect.right);
230        assertEquals(1000f, cellRect.bottom);
231
232        assertTrue(it.hasNext());
233        cellRect = it.next();
234        assertEquals(0f, cellRect.left);
235        assertEquals(1000f, cellRect.top);
236        assertEquals(300f, cellRect.right);
237        assertEquals(1500f, cellRect.bottom);
238
239        assertTrue(it.hasNext());
240        cellRect = it.next();
241        assertEquals(0f, cellRect.left);
242        assertEquals(1500f, cellRect.top);
243        assertEquals(300f, cellRect.right);
244        assertEquals(2000f, cellRect.bottom);
245
246        // next column over
247        assertTrue(it.hasNext());
248        cellRect = it.next();
249        assertEquals(300f, cellRect.left);
250        assertEquals(0f, cellRect.top);
251        assertEquals(600f, cellRect.right);
252        assertEquals(500f, cellRect.bottom);
253    }
254}