/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.core; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.TreeSet; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.reverseOrder; import static java.util.Collections.singleton; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; /** * Tests for {@link Page}. * * @author Yevhenii Voevodin */ public class PageTest { @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Required non-negative value of items before") public void shouldThrowIllegalArgumentWhenItemsBeforeIsNegative() throws Exception { new Page<>(emptyList(), -1, 1, 10); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Required positive value of page size") public void shouldThrowIllegalArgumentWhenPageSizeIsNotPositive() throws Exception { new Page<>(emptyList(), 1, 0, 10); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Required non-negative value of total items") public void shouldThrowIllegalArgumentWhenTotalCountIsNegative() throws Exception { new Page<>(emptyList(), 1, 1, -1); } @Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessageRegExp = "Required non-null items") public void shouldThrownNPEWhenItemsListIsNull() throws Exception { new Page<>(null, 1, 1, 1); } @Test public void pageShouldBeEmptyWhenItIsCreatedWithAneEmptyItemsCollection() throws Exception { assertTrue(new Page<>(emptyList(), 1, 1, 1).isEmpty()); } @Test public void testMiddleDataWindowPage() throws Exception { // item1. <= skipped <- first page start // item2. <= skipped // item3. <- page start <- first page end // item4. // item5. <- page end <- last page start // item6. // item7. <- last page end final Page<String> page = new Page<>(asList("item3", "item4", "item5"), 2, 3, 7); assertFalse(page.isEmpty(), "non-empty page"); assertEquals(page.getItemsCount(), 3, "items size "); assertEquals(page.getSize(), 3, "page size"); assertEquals(page.getTotalItemsCount(), 7, "total elements count"); final Page.PageRef firstRef = page.getFirstPageRef(); assertEquals(firstRef.getPageSize(), 3, "first page size"); assertEquals(firstRef.getItemsBefore(), 0, "first page skip items"); final Page.PageRef lastRef = page.getLastPageRef(); assertEquals(lastRef.getPageSize(), 3, "last page size"); assertEquals(lastRef.getItemsBefore(), 6, "last page skip items"); assertEquals(page.getNumber(), -1, "page number"); assertFalse(page.hasPreviousPage(), "has previous page"); assertFalse(page.hasNextPage(), "page has next page"); assertEquals(page.getItems(), asList("item3", "item4", "item5")); assertEquals(page.getItems(i -> i.substring(4)), asList("3", "4", "5")); assertEquals(new ArrayList<>(page.fill(new TreeSet<>(reverseOrder()))), asList("item5", "item4", "item3")); } @Test public void testMiddlePage() throws Exception { // item1. <- previous page start <- first page start // item2. // item3. <- previous page end <- first page end // item4. <- page start // item5. // item6. <- page end // item7. <- next page start // item8. // item9. <- next page end // item.10 <- last page start/end final Page<String> page = new Page<>(asList("item4", "item5", "item6"), 3, 3, 10); assertFalse(page.isEmpty(), "non-empty page"); assertEquals(page.getItemsCount(), 3, "items size"); assertEquals(page.getSize(), 3, "page size"); assertEquals(page.getTotalItemsCount(), 10, "total elements count"); final Page.PageRef firstRef = page.getFirstPageRef(); assertEquals(firstRef.getPageSize(), 3, "first page size"); assertEquals(firstRef.getItemsBefore(), 0, "first page skip items"); final Page.PageRef lastRef = page.getLastPageRef(); assertEquals(lastRef.getPageSize(), 3, "last page size"); assertEquals(lastRef.getItemsBefore(), 9, "last page skip items"); assertEquals(page.getNumber(), 2, "page number"); assertTrue(page.hasPreviousPage(), "has previous page"); final Page.PageRef prevRef = page.getPreviousPageRef(); assertEquals(prevRef.getItemsBefore(), 0, "items before prev page"); assertEquals(prevRef.getPageSize(), 3, "prev page size"); assertTrue(page.hasNextPage(), "page has next page"); final Page.PageRef nextRef = page.getNextPageRef(); assertEquals(nextRef.getItemsBefore(), 6, "items before next page"); assertEquals(nextRef.getPageSize(), 3, "next page size"); assertEquals(page.getItems(), asList("item4", "item5", "item6")); assertEquals(page.getItems(i -> i.substring(4)), asList("4", "5", "6")); assertEquals(new ArrayList<>(page.fill(new TreeSet<>(reverseOrder()))), asList("item6", "item5", "item4")); } @Test public void testFirstPage() throws Exception { // item1. <- page start // item2. // item3. // item4. // item5. <- page end // item6. <- last page start // item7. <- last page end final Page<String> page = new Page<>(asList("item1", "item2", "item3", "item4", "item5"), 0, 5, 7); assertFalse(page.isEmpty(), "page is empty"); assertEquals(page.getItemsCount(), 5, "items items count"); assertEquals(page.getSize(), 5, "page size"); assertEquals(page.getTotalItemsCount(), 7, "total items"); final Page.PageRef firstRef = page.getFirstPageRef(); assertEquals(firstRef.getPageSize(), 5, "first page size"); assertEquals(firstRef.getItemsBefore(), 0, "first page skip items"); final Page.PageRef lastRef = page.getLastPageRef(); assertEquals(lastRef.getPageSize(), 5, "last page size"); assertEquals(lastRef.getItemsBefore(), 5, "last page skip items"); assertEquals(page.getNumber(), 1, "page number"); assertFalse(page.hasPreviousPage(), "has previous page"); assertTrue(page.hasNextPage(), "page has next page"); final Page.PageRef nextRef = page.getNextPageRef(); assertEquals(nextRef.getPageSize(), 5, "next page size"); assertEquals(nextRef.getItemsBefore(), 5, "next page skip items"); assertEquals(page.getItems(), asList("item1", "item2", "item3", "item4", "item5")); } @Test public void testLastPage() throws Exception { // item1. <- first page start // item2. // item3. <- first page end // item4. <- prev page start // item5. // item6. <- prev page end // item7. <- page start // item8. <- page end final Page<String> page = new Page<>(asList("item7", "item8"), 6, 3, 8); assertFalse(page.isEmpty(), "page is empty"); assertEquals(page.getItemsCount(), 2, "items count"); assertEquals(page.getSize(), 3, "page size"); assertEquals(page.getTotalItemsCount(), 8, "total items"); final Page.PageRef firstRef = page.getFirstPageRef(); assertEquals(firstRef.getPageSize(), 3, "first page size"); assertEquals(firstRef.getItemsBefore(), 0, "first page skip items"); final Page.PageRef lastRef = page.getLastPageRef(); assertEquals(lastRef.getPageSize(), 3, "last page size"); assertEquals(lastRef.getItemsBefore(), 6, "last page skip items"); assertEquals(page.getNumber(), 3, "page number"); assertTrue(page.hasPreviousPage(), "has previous page"); final Page.PageRef prevRef = page.getPreviousPageRef(); assertEquals(prevRef.getPageSize(), 3, "prev page size"); assertEquals(prevRef.getItemsBefore(), 3, "prev page skip items"); assertFalse(page.hasNextPage(), "has next page"); assertEquals(page.getItems(), asList("item7", "item8")); } @Test public void testSmallPage() throws Exception { final Page<String> page = new Page<>(singleton("item1"), 0, 1, 1); assertFalse(page.isEmpty(), "page is empty"); assertEquals(page.getItemsCount(), 1, "items count"); assertEquals(page.getSize(), 1, "page size"); assertEquals(page.getTotalItemsCount(), 1, "total items"); final Page.PageRef firstRef = page.getFirstPageRef(); assertEquals(firstRef.getPageSize(), 1, "first page size"); assertEquals(firstRef.getItemsBefore(), 0, "first page skip items"); final Page.PageRef lastRef = page.getLastPageRef(); assertEquals(lastRef.getPageSize(), 1, "last page size"); assertEquals(lastRef.getItemsBefore(), 0, "last page skip items"); assertEquals(page.getNumber(), 1, "page number"); assertFalse(page.hasPreviousPage(), "has previous page"); assertFalse(page.hasNextPage(), "page has next page"); assertEquals(page.getItems(), singleton("item1")); } }