/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.pagination;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
import org.junit.Assert;
/**
* @author <a href="mailto:kevin.a.conaway@gmail.com">Kevin Conaway</a>
* @version $Revision$ ($Author$)
*/
public class PaginationHelperTest extends TestCase
{
public void testEnsureOnlyListsAreHandled()
{
Set<Integer> data = new HashSet<Integer>();
add(data, 2);
this.assertEquals(data.iterator(), getIterator(data, 1, 25));
}
public void testGetSublistOtherPage()
{
List<Integer> expected = Arrays.asList(new Integer[]{new Integer(4), new Integer(5), new Integer(6)});
List<Integer> data = new ArrayList<Integer>();
add(data, 7);
this.assertEquals(expected.iterator(), getIterator(data, 2, 3));
}
public void testGetSublistFirstPage()
{
List<Integer> expected = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)});
List<Integer> data = new ArrayList<Integer>();
add(data, 7);
this.assertEquals(expected.iterator(), getIterator(data, 1, 3));
}
public void testGetSublistLastPage()
{
List<Integer> expected = Arrays.asList(new Integer[]{new Integer(9)});
List<Integer> data = new ArrayList<Integer>();
add(data, 9);
this.assertEquals(expected.iterator(), getIterator(data, 3, 4));
}
public void testGetSublistOutOfBounds()
{
List<Integer> expected = Arrays.asList(new Integer[]{
new Integer(1),
new Integer(2),
new Integer(3),
new Integer(4),
new Integer(5)});
List<Integer> data = new ArrayList<Integer>();
add(data, 7);
// This is out of bounds, it should just take the first page, 1-5
this.assertEquals(expected.iterator(), getIterator(data, 3, 5));
}
public void testGetSublistPageSizeBiggerThanList()
{
List<Integer> expected = Arrays.asList(new Integer[]{
new Integer(1),
new Integer(2),
new Integer(3),
new Integer(4),
new Integer(5)});
List<Integer> data = new ArrayList<Integer>();
add(data, 5);
this.assertEquals(expected.iterator(), getIterator(data, 1, 25));
this.assertEquals(expected.iterator(), getIterator(data, 2, 25));
}
public void testGetSublistForEntirePage()
{
List<Integer> data = new ArrayList<Integer>();
add(data, 5);
this.assertEquals(data.iterator(), getIterator(data, 1, 5));
}
/**
* Ensures that the data passed to the helper is cast as an object
*/
protected Iterator getIterator(Object data, int pageNumber, int pageSize)
{
PaginationHelper helper = new PaginationHelper(pageNumber, pageSize);
return helper.getIterator(data);
}
protected void print(Iterator iterator, String message)
{
while (iterator.hasNext())
{
System.out.println(message + iterator.next());
}
}
protected void add(Collection<Integer> collection, int number)
{
for (int i = 0; i < number; i++)
{
collection.add(new Integer(i + 1));
}
}
protected void assertEquals(Iterator expected, Iterator actual)
{
while (expected.hasNext())
{
Assert.assertEquals(expected.next(), actual.next());
}
Assert.assertFalse(actual.hasNext());
}
}