001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.hadoop.hbase.hbtop.screen.top;
019
020import static org.hamcrest.CoreMatchers.is;
021import static org.junit.Assert.assertThat;
022
023import org.apache.hadoop.hbase.HBaseClassTestRule;
024import org.apache.hadoop.hbase.testclassification.SmallTests;
025import org.junit.ClassRule;
026import org.junit.Test;
027import org.junit.experimental.categories.Category;
028
029
030@Category(SmallTests.class)
031public class PagingTest {
032
033  @ClassRule
034  public static final HBaseClassTestRule CLASS_RULE =
035    HBaseClassTestRule.forClass(PagingTest.class);
036
037  @Test
038  public void testArrowUpAndArrowDown() {
039    Paging paging = new Paging();
040    paging.updatePageSize(3);
041    paging.updateRecordsSize(5);
042
043    assertPaging(paging, 0, 0, 3);
044
045    paging.arrowDown();
046    assertPaging(paging, 1, 0, 3);
047
048    paging.arrowDown();
049    assertPaging(paging, 2, 0, 3);
050
051    paging.arrowDown();
052    assertPaging(paging, 3, 1, 4);
053
054    paging.arrowDown();
055    assertPaging(paging, 4, 2, 5);
056
057    paging.arrowDown();
058    assertPaging(paging, 4, 2, 5);
059
060    paging.arrowUp();
061    assertPaging(paging, 3, 2, 5);
062
063    paging.arrowUp();
064    assertPaging(paging, 2, 2, 5);
065
066    paging.arrowUp();
067    assertPaging(paging, 1, 1, 4);
068
069    paging.arrowUp();
070    assertPaging(paging, 0, 0, 3);
071
072    paging.arrowUp();
073    assertPaging(paging, 0, 0, 3);
074  }
075
076  @Test
077  public void testPageUpAndPageDown() {
078    Paging paging = new Paging();
079    paging.updatePageSize(3);
080    paging.updateRecordsSize(8);
081
082    assertPaging(paging, 0, 0, 3);
083
084    paging.pageDown();
085    assertPaging(paging, 3, 3, 6);
086
087    paging.pageDown();
088    assertPaging(paging, 6, 5, 8);
089
090    paging.pageDown();
091    assertPaging(paging, 7, 5, 8);
092
093    paging.pageDown();
094    assertPaging(paging, 7, 5, 8);
095
096    paging.pageUp();
097    assertPaging(paging, 4, 4, 7);
098
099    paging.pageUp();
100    assertPaging(paging, 1, 1, 4);
101
102    paging.pageUp();
103    assertPaging(paging, 0, 0, 3);
104
105    paging.pageUp();
106    assertPaging(paging, 0, 0, 3);
107  }
108
109  @Test
110  public void testInit() {
111    Paging paging = new Paging();
112    paging.updatePageSize(3);
113    paging.updateRecordsSize(5);
114
115    assertPaging(paging, 0, 0, 3);
116
117    paging.pageDown();
118    paging.pageDown();
119    paging.pageDown();
120    paging.pageDown();
121    paging.init();
122
123    assertPaging(paging, 0, 0, 3);
124  }
125
126  @Test
127  public void testWhenPageSizeGraterThanRecordsSize() {
128    Paging paging = new Paging();
129    paging.updatePageSize(5);
130    paging.updateRecordsSize(3);
131
132    assertPaging(paging, 0, 0, 3);
133
134    paging.arrowDown();
135    assertPaging(paging, 1, 0, 3);
136
137    paging.arrowDown();
138    assertPaging(paging, 2, 0, 3);
139
140    paging.arrowDown();
141    assertPaging(paging, 2, 0, 3);
142
143    paging.arrowUp();
144    assertPaging(paging, 1, 0, 3);
145
146    paging.arrowUp();
147    assertPaging(paging, 0, 0, 3);
148
149    paging.arrowUp();
150    assertPaging(paging, 0, 0, 3);
151
152    paging.pageDown();
153    assertPaging(paging, 2, 0, 3);
154
155    paging.pageDown();
156    assertPaging(paging, 2, 0, 3);
157
158    paging.pageUp();
159    assertPaging(paging, 0, 0, 3);
160
161    paging.pageUp();
162    assertPaging(paging, 0, 0, 3);
163  }
164
165  @Test
166  public void testWhenPageSizeIsZero() {
167    Paging paging = new Paging();
168    paging.updatePageSize(0);
169    paging.updateRecordsSize(5);
170
171    assertPaging(paging, 0, 0, 0);
172
173    paging.arrowDown();
174    assertPaging(paging, 1, 0, 0);
175
176    paging.arrowUp();
177    assertPaging(paging, 0, 0, 0);
178
179    paging.pageDown();
180    assertPaging(paging, 0, 0, 0);
181
182    paging.pageUp();
183    assertPaging(paging, 0, 0, 0);
184  }
185
186  @Test
187  public void testWhenRecordsSizeIsZero() {
188    Paging paging = new Paging();
189    paging.updatePageSize(3);
190    paging.updateRecordsSize(0);
191
192    assertPaging(paging, 0, 0, 0);
193
194    paging.arrowDown();
195    assertPaging(paging, 0, 0, 0);
196
197    paging.arrowUp();
198    assertPaging(paging, 0, 0, 0);
199
200    paging.pageDown();
201    assertPaging(paging, 0, 0, 0);
202
203    paging.pageUp();
204    assertPaging(paging, 0, 0, 0);
205  }
206
207  @Test
208  public void testWhenChangingPageSizeDynamically() {
209    Paging paging = new Paging();
210    paging.updatePageSize(3);
211    paging.updateRecordsSize(5);
212
213    assertPaging(paging, 0, 0, 3);
214
215    paging.arrowDown();
216    assertPaging(paging, 1, 0, 3);
217
218    paging.updatePageSize(2);
219    assertPaging(paging, 1, 0, 2);
220
221    paging.arrowDown();
222    assertPaging(paging, 2, 1, 3);
223
224    paging.arrowDown();
225    assertPaging(paging, 3, 2, 4);
226
227    paging.updatePageSize(4);
228    assertPaging(paging, 3, 1, 5);
229
230    paging.updatePageSize(5);
231    assertPaging(paging, 3, 0, 5);
232
233    paging.updatePageSize(0);
234    assertPaging(paging, 3, 0, 0);
235
236    paging.arrowDown();
237    assertPaging(paging, 4, 0, 0);
238
239    paging.arrowUp();
240    assertPaging(paging, 3, 0, 0);
241
242    paging.pageDown();
243    assertPaging(paging, 3, 0, 0);
244
245    paging.pageUp();
246    assertPaging(paging, 3, 0, 0);
247
248    paging.updatePageSize(1);
249    assertPaging(paging, 3, 3, 4);
250  }
251
252  @Test
253  public void testWhenChangingRecordsSizeDynamically() {
254    Paging paging = new Paging();
255    paging.updatePageSize(3);
256    paging.updateRecordsSize(5);
257
258    assertPaging(paging, 0, 0, 3);
259
260    paging.updateRecordsSize(2);
261    assertPaging(paging, 0, 0, 2);
262    assertThat(paging.getCurrentPosition(), is(0));
263    assertThat(paging.getPageStartPosition(), is(0));
264    assertThat(paging.getPageEndPosition(), is(2));
265
266    paging.arrowDown();
267    assertPaging(paging, 1, 0, 2);
268
269    paging.updateRecordsSize(3);
270    assertPaging(paging, 1, 0, 3);
271
272    paging.arrowDown();
273    assertPaging(paging, 2, 0, 3);
274
275    paging.updateRecordsSize(1);
276    assertPaging(paging, 0, 0, 1);
277
278    paging.updateRecordsSize(0);
279    assertPaging(paging, 0, 0, 0);
280
281    paging.arrowDown();
282    assertPaging(paging, 0, 0, 0);
283
284    paging.arrowUp();
285    assertPaging(paging, 0, 0, 0);
286
287    paging.pageDown();
288    assertPaging(paging, 0, 0, 0);
289
290    paging.pageUp();
291    assertPaging(paging, 0, 0, 0);
292  }
293
294  private void assertPaging(Paging paging, int currentPosition, int pageStartPosition,
295    int pageEndPosition) {
296    assertThat(paging.getCurrentPosition(), is(currentPosition));
297    assertThat(paging.getPageStartPosition(), is(pageStartPosition));
298    assertThat(paging.getPageEndPosition(), is(pageEndPosition));
299  }
300}