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 }