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.hamcrest.MatcherAssert.assertThat;
022
023import org.apache.hadoop.hbase.testclassification.SmallTests;
024import org.junit.jupiter.api.Tag;
025import org.junit.jupiter.api.Test;
026
027@Tag(SmallTests.TAG)
028public class TestPaging {
029
030  @Test
031  public void testArrowUpAndArrowDown() {
032    Paging paging = new Paging();
033    paging.updatePageSize(3);
034    paging.updateRecordsSize(5);
035
036    assertPaging(paging, 0, 0, 3);
037
038    paging.arrowDown();
039    assertPaging(paging, 1, 0, 3);
040
041    paging.arrowDown();
042    assertPaging(paging, 2, 0, 3);
043
044    paging.arrowDown();
045    assertPaging(paging, 3, 1, 4);
046
047    paging.arrowDown();
048    assertPaging(paging, 4, 2, 5);
049
050    paging.arrowDown();
051    assertPaging(paging, 4, 2, 5);
052
053    paging.arrowUp();
054    assertPaging(paging, 3, 2, 5);
055
056    paging.arrowUp();
057    assertPaging(paging, 2, 2, 5);
058
059    paging.arrowUp();
060    assertPaging(paging, 1, 1, 4);
061
062    paging.arrowUp();
063    assertPaging(paging, 0, 0, 3);
064
065    paging.arrowUp();
066    assertPaging(paging, 0, 0, 3);
067  }
068
069  @Test
070  public void testPageUpAndPageDown() {
071    Paging paging = new Paging();
072    paging.updatePageSize(3);
073    paging.updateRecordsSize(8);
074
075    assertPaging(paging, 0, 0, 3);
076
077    paging.pageDown();
078    assertPaging(paging, 3, 3, 6);
079
080    paging.pageDown();
081    assertPaging(paging, 6, 5, 8);
082
083    paging.pageDown();
084    assertPaging(paging, 7, 5, 8);
085
086    paging.pageDown();
087    assertPaging(paging, 7, 5, 8);
088
089    paging.pageUp();
090    assertPaging(paging, 4, 4, 7);
091
092    paging.pageUp();
093    assertPaging(paging, 1, 1, 4);
094
095    paging.pageUp();
096    assertPaging(paging, 0, 0, 3);
097
098    paging.pageUp();
099    assertPaging(paging, 0, 0, 3);
100  }
101
102  @Test
103  public void testInit() {
104    Paging paging = new Paging();
105    paging.updatePageSize(3);
106    paging.updateRecordsSize(5);
107
108    assertPaging(paging, 0, 0, 3);
109
110    paging.pageDown();
111    paging.pageDown();
112    paging.pageDown();
113    paging.pageDown();
114    paging.init();
115
116    assertPaging(paging, 0, 0, 3);
117  }
118
119  @Test
120  public void testWhenPageSizeGraterThanRecordsSize() {
121    Paging paging = new Paging();
122    paging.updatePageSize(5);
123    paging.updateRecordsSize(3);
124
125    assertPaging(paging, 0, 0, 3);
126
127    paging.arrowDown();
128    assertPaging(paging, 1, 0, 3);
129
130    paging.arrowDown();
131    assertPaging(paging, 2, 0, 3);
132
133    paging.arrowDown();
134    assertPaging(paging, 2, 0, 3);
135
136    paging.arrowUp();
137    assertPaging(paging, 1, 0, 3);
138
139    paging.arrowUp();
140    assertPaging(paging, 0, 0, 3);
141
142    paging.arrowUp();
143    assertPaging(paging, 0, 0, 3);
144
145    paging.pageDown();
146    assertPaging(paging, 2, 0, 3);
147
148    paging.pageDown();
149    assertPaging(paging, 2, 0, 3);
150
151    paging.pageUp();
152    assertPaging(paging, 0, 0, 3);
153
154    paging.pageUp();
155    assertPaging(paging, 0, 0, 3);
156  }
157
158  @Test
159  public void testWhenPageSizeIsZero() {
160    Paging paging = new Paging();
161    paging.updatePageSize(0);
162    paging.updateRecordsSize(5);
163
164    assertPaging(paging, 0, 0, 0);
165
166    paging.arrowDown();
167    assertPaging(paging, 1, 0, 0);
168
169    paging.arrowUp();
170    assertPaging(paging, 0, 0, 0);
171
172    paging.pageDown();
173    assertPaging(paging, 0, 0, 0);
174
175    paging.pageUp();
176    assertPaging(paging, 0, 0, 0);
177  }
178
179  @Test
180  public void testWhenRecordsSizeIsZero() {
181    Paging paging = new Paging();
182    paging.updatePageSize(3);
183    paging.updateRecordsSize(0);
184
185    assertPaging(paging, 0, 0, 0);
186
187    paging.arrowDown();
188    assertPaging(paging, 0, 0, 0);
189
190    paging.arrowUp();
191    assertPaging(paging, 0, 0, 0);
192
193    paging.pageDown();
194    assertPaging(paging, 0, 0, 0);
195
196    paging.pageUp();
197    assertPaging(paging, 0, 0, 0);
198  }
199
200  @Test
201  public void testWhenChangingPageSizeDynamically() {
202    Paging paging = new Paging();
203    paging.updatePageSize(3);
204    paging.updateRecordsSize(5);
205
206    assertPaging(paging, 0, 0, 3);
207
208    paging.arrowDown();
209    assertPaging(paging, 1, 0, 3);
210
211    paging.updatePageSize(2);
212    assertPaging(paging, 1, 0, 2);
213
214    paging.arrowDown();
215    assertPaging(paging, 2, 1, 3);
216
217    paging.arrowDown();
218    assertPaging(paging, 3, 2, 4);
219
220    paging.updatePageSize(4);
221    assertPaging(paging, 3, 1, 5);
222
223    paging.updatePageSize(5);
224    assertPaging(paging, 3, 0, 5);
225
226    paging.updatePageSize(0);
227    assertPaging(paging, 3, 0, 0);
228
229    paging.arrowDown();
230    assertPaging(paging, 4, 0, 0);
231
232    paging.arrowUp();
233    assertPaging(paging, 3, 0, 0);
234
235    paging.pageDown();
236    assertPaging(paging, 3, 0, 0);
237
238    paging.pageUp();
239    assertPaging(paging, 3, 0, 0);
240
241    paging.updatePageSize(1);
242    assertPaging(paging, 3, 3, 4);
243  }
244
245  @Test
246  public void testWhenChangingRecordsSizeDynamically() {
247    Paging paging = new Paging();
248    paging.updatePageSize(3);
249    paging.updateRecordsSize(5);
250
251    assertPaging(paging, 0, 0, 3);
252
253    paging.updateRecordsSize(2);
254    assertPaging(paging, 0, 0, 2);
255    assertThat(paging.getCurrentPosition(), is(0));
256    assertThat(paging.getPageStartPosition(), is(0));
257    assertThat(paging.getPageEndPosition(), is(2));
258
259    paging.arrowDown();
260    assertPaging(paging, 1, 0, 2);
261
262    paging.updateRecordsSize(3);
263    assertPaging(paging, 1, 0, 3);
264
265    paging.arrowDown();
266    assertPaging(paging, 2, 0, 3);
267
268    paging.updateRecordsSize(1);
269    assertPaging(paging, 0, 0, 1);
270
271    paging.updateRecordsSize(0);
272    assertPaging(paging, 0, 0, 0);
273
274    paging.arrowDown();
275    assertPaging(paging, 0, 0, 0);
276
277    paging.arrowUp();
278    assertPaging(paging, 0, 0, 0);
279
280    paging.pageDown();
281    assertPaging(paging, 0, 0, 0);
282
283    paging.pageUp();
284    assertPaging(paging, 0, 0, 0);
285  }
286
287  private void assertPaging(Paging paging, int currentPosition, int pageStartPosition,
288    int pageEndPosition) {
289    assertThat(paging.getCurrentPosition(), is(currentPosition));
290    assertThat(paging.getPageStartPosition(), is(pageStartPosition));
291    assertThat(paging.getPageEndPosition(), is(pageEndPosition));
292  }
293}