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