1 package com.atlassian.user.search.page;
2
3 import junit.framework.TestCase;
4
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.Iterator;
8 import java.util.List;
9
10 public class TestMergedListPager extends TestCase
11 {
12 MergedListPager<Integer> pager;
13 Pager<Integer> pager1;
14 Pager<Integer> pager2;
15 Pager<Integer> pager3;
16 ArrayList<Pager<Integer>> pagers;
17
18 public void setUp() throws Exception
19 {
20 pager1 = fillTo(0, 100);
21 pager2 = fillTo(100, 200);
22 pager3 = fillTo(200, 300);
23
24 pagers = new ArrayList<Pager<Integer>>();
25 pagers.add(pager1);
26 pagers.add(pager2);
27 pagers.add(pager3);
28
29 pager = new MergedListPager<Integer>(pagers);
30
31 super.setUp();
32 }
33
34 public void tearDown() throws Exception
35 {
36 super.tearDown();
37 }
38
39 private Pager<Integer> fillTo(int beginningAt, int limit)
40 {
41 ArrayList<Integer> temp = new ArrayList<Integer>();
42
43 for (int i = beginningAt; i != limit; i++)
44 {
45 temp.add(i);
46 }
47
48 return new DefaultPager<Integer>(temp);
49 }
50
51 public void testSkipTo() throws PagerException
52 {
53 assertEquals( new Integer(0), pager.getCurrentPage().get(0));
54 assertEquals( new Integer(99), pager.getCurrentPage().get(99));
55
56 pager.skipTo(100);
57
58 assertEquals(100, pager.getIndexOfFirstItemInCurrentPage());
59 assertEquals( new Integer(100), pager.getCurrentPage().get(0));
60 assertEquals( new Integer(199), pager.getCurrentPage().get(99));
61
62 pager.skipTo(200);
63
64 assertEquals(200, pager.getIndexOfFirstItemInCurrentPage());
65 assertEquals( new Integer(200), pager.getCurrentPage().get(0));
66 assertEquals( new Integer(299), pager.getCurrentPage().get(99));
67 }
68
69 public void testOnLastPage() throws PagerException
70 {
71 pager.skipTo(101);
72 assertFalse(pager.onLastPage());
73
74 pager.skipTo(201);
75 assertTrue(pager.onLastPage());
76
77 pager.skipTo(300);
78 assertTrue(pager.onLastPage());
79 }
80
81 public void testIterator()
82 {
83 ArrayList<Integer> data = new ArrayList<Integer>();
84
85 for (Integer i : pager)
86 {
87 data.add(i);
88 }
89
90 assertTrue(pager.onLastPage());
91
92 assertEquals(300, data.size());
93 assertEquals(new Integer(0), data.get(0));
94 assertEquals(new Integer(100), data.get(100));
95 assertEquals(new Integer(200), data.get(200));
96 assertEquals(new Integer(299), data.get(299));
97 }
98
99 public void testGetCurrentPage()
100 {
101 List<String> results1 = new ArrayList<String>();
102
103 for (int i = 0; i < 45; i++)
104 {
105 results1.add(String.valueOf(i));
106 }
107
108 List<String> results2 = new ArrayList<String>();
109 for (int i = 45; i < 110; i++)
110 {
111 results2.add(String.valueOf(i));
112 }
113
114 DefaultPager<String> pagerOne = new DefaultPager<String>(results1);
115 DefaultPager<String> pagerTwo = new DefaultPager<String>(results2);
116 MergedListPager<String> pager = new MergedListPager<String>(Arrays.asList(pagerOne, pagerTwo));
117
118 assertEquals(Pager.PRELOAD_LIMIT, pager.getCurrentPage().size());
119 }
120
121 public void testWithMockLDAPPagers()
122 {
123 List mockLDAPPagers = new ArrayList();
124
125 int total = 0;
126 for (int i = 1; i < 20; i++)
127 {
128 mockLDAPPagers.add(new MockLDAPPager(createDataset(i, total)));
129 total += i;
130 }
131 for (int i = 20; i < 500; i+=31)
132 {
133 mockLDAPPagers.add(new MockLDAPPager(createDataset(i, total)));
134 total += i;
135 }
136
137 MergedListPager mergedPager = new MergedListPager(mockLDAPPagers);
138
139 Iterator iterator = mergedPager.iterator();
140 for (int i = 1; i <= total; i++)
141 {
142 try
143 {
144 assertTrue("Able to fetch " + i + " value of " + total, iterator.hasNext());
145 MockSearchResult result = (MockSearchResult) iterator.next();
146 assertEquals(String.valueOf(i), result.getName());
147 }
148 catch (Exception e)
149 {
150 fail("Fail on i = " + i + ": " + e);
151 }
152 }
153 assertFalse(iterator.hasNext());
154 }
155
156 private List<String> createDataset(int size, int start)
157 {
158 List<String> result = new ArrayList<String>(size);
159 for (int i = 1; i <= size; i++)
160 result.add(String.valueOf(start + i));
161 return result;
162 }
163
164 public void testNextPage()
165 {
166 pager.nextPage();
167 assertEquals(new Integer(100), pager.getCurrentPage().get(0));
168
169 pager.nextPage();
170 assertEquals(new Integer(200), pager.getCurrentPage().get(0));
171 }
172 }