1 package com.atlassian.plugins.rest.common.expand.parameter;
2
3 import static org.junit.Assert.*;
4 import org.junit.Test;
5
6 import java.util.SortedSet;
7
8 public class IndexParserTest
9 {
10 @Test
11 public void testParseEmptyIncludesAllIndexes()
12 {
13 Indexes indexes = IndexParser.parse("");
14 assertEquals(0, indexes.getMinIndex(1));
15 assertEquals(0, indexes.getMaxIndex(1));
16 assertEquals(1, indexes.getIndexes(1).size());
17
18 assertEquals(0, indexes.getMinIndex(5));
19 assertEquals(4, indexes.getMaxIndex(5));
20 assertEquals(5, indexes.getIndexes(5).size());
21
22 assertEquals(0, indexes.getMinIndex(100));
23 assertEquals(99, indexes.getMaxIndex(100));
24 assertEquals(100, indexes.getIndexes(100).size());
25 }
26
27 @Test
28 public void testGetMinMaxIndexesInRange()
29 {
30 Indexes indexes = IndexParser.parse("0:50");
31 assertEquals(0, indexes.getMinIndex(1));
32 assertEquals(0, indexes.getMaxIndex(1));
33 assertEquals(1, indexes.getIndexes(1).size());
34 assertEquals(0, indexes.getIndexes(1).iterator().next().intValue());
35
36 assertEquals(0, indexes.getMinIndex(5));
37 assertEquals(4, indexes.getMaxIndex(5));
38 assertEquals(5, indexes.getIndexes(5).size());
39
40 assertEquals(0, indexes.getMinIndex(100));
41 assertEquals(50, indexes.getMaxIndex(100));
42 assertEquals(51, indexes.getIndexes(100).size());
43 }
44
45 @Test
46 public void testGetIndexesForRange()
47 {
48 Indexes indexes = IndexParser.parse("0:5");
49 SortedSet<Integer> set = indexes.getIndexes(10);
50 assertEquals(6, set.size());
51 int val = 0;
52 for (Integer index : set)
53 {
54 assertEquals((Integer) val++, index);
55 }
56
57 indexes = IndexParser.parse("12:");
58 set = indexes.getIndexes(10);
59 assertTrue(set.isEmpty());
60 }
61
62 @Test
63 public void testIndexesOnEmptyList()
64 {
65 Indexes indexes = IndexParser.parse("0:50");
66 assertEquals(-1, indexes.getMinIndex(0));
67 assertEquals(-1, indexes.getMaxIndex(0));
68
69 assertFalse(indexes.contains(-1,0));
70 assertFalse(indexes.contains(0,0));
71 assertFalse(indexes.contains(1,0));
72 assertFalse(indexes.contains(2,0));
73 }
74
75 @Test
76 public void testSinglePositiveIndex()
77 {
78 Indexes indexes = IndexParser.parse("0");
79 assertFalse(indexes.isRange());
80 assertTrue(indexes.contains(0, 2));
81 assertFalse(indexes.contains(1, 2));
82
83 assertEquals(-1, indexes.getMinIndex(0));
84 assertEquals(-1, indexes.getMaxIndex(0));
85
86 assertEquals(0, indexes.getMinIndex(1));
87 assertEquals(0, indexes.getMaxIndex(1));
88
89 indexes = IndexParser.parse("1");
90 assertFalse(indexes.contains(0, 2));
91 assertTrue(indexes.contains(1, 2));
92
93 assertEquals(-1, indexes.getMinIndex(0));
94 assertEquals(-1, indexes.getMaxIndex(0));
95
96 assertEquals(-1, indexes.getMinIndex(1));
97 assertEquals(-1, indexes.getMaxIndex(1));
98 }
99
100 @Test
101 public void testSingleNegativeIndex()
102 {
103 Indexes indexes = IndexParser.parse("-1");
104 assertFalse(indexes.contains(0, 2));
105 assertTrue(indexes.contains(1, 2));
106
107 indexes = IndexParser.parse("-2");
108 assertTrue(indexes.contains(0, 2));
109 assertFalse(indexes.contains(1, 2));
110 }
111
112 @Test
113 public void testSimpleRange()
114 {
115 Indexes indexes = IndexParser.parse("0:3");
116 assertTrue(indexes.isRange());
117 assertTrue(indexes.contains(0, 3));
118 assertTrue(indexes.contains(1, 3));
119 assertTrue(indexes.contains(2, 3));
120 assertTrue(indexes.contains(3, 4));
121 }
122
123 @Test
124 public void testRangeNonZeroStart()
125 {
126 Indexes indexes = IndexParser.parse("1:2");
127 assertTrue(indexes.isRange());
128 assertFalse(indexes.contains(0, 3));
129 assertTrue(indexes.contains(1, 3));
130 assertTrue(indexes.contains(2, 3));
131 assertFalse(indexes.contains(3, 4));
132 }
133
134 @Test
135 public void testRangeSameStartEnd()
136 {
137 Indexes indexes = IndexParser.parse("2:2");
138 assertTrue(indexes.isRange());
139 assertFalse(indexes.contains(0, 3));
140 assertFalse(indexes.contains(1, 3));
141 assertTrue(indexes.contains(2, 3));
142 assertFalse(indexes.contains(3, 4));
143 }
144
145 @Test
146 public void testRangeWithNoStart()
147 {
148 Indexes indexes = IndexParser.parse(":2");
149 assertTrue(indexes.isRange());
150 assertFalse(indexes.contains(0, 0));
151 assertEquals(-1,indexes.getMinIndex(0));
152 assertEquals(0,indexes.getMinIndex(1));
153 assertEquals(0,indexes.getMinIndex(2));
154 assertEquals(0,indexes.getMinIndex(99));
155 assertEquals(-1,indexes.getMaxIndex(0));
156 assertEquals(0,indexes.getMaxIndex(1));
157 assertEquals(1,indexes.getMaxIndex(2));
158 assertEquals(2,indexes.getMaxIndex(99));
159 assertTrue(indexes.contains(0, 3));
160 assertTrue(indexes.contains(1, 3));
161 assertTrue(indexes.contains(2, 3));
162 assertFalse(indexes.contains(3, 4));
163 }
164
165 @Test
166 public void testRangeWithNoEnd()
167 {
168 Indexes indexes = IndexParser.parse("2:");
169 assertTrue(indexes.isRange());
170 assertEquals(-1,indexes.getMaxIndex(0));
171 assertEquals(-1,indexes.getMinIndex(0));
172 assertFalse(indexes.contains(0, 3));
173 assertFalse(indexes.contains(1, 3));
174 assertTrue(indexes.contains(2, 3));
175 assertTrue(indexes.contains(3, 4));
176 }
177 }