Skip to content

Commit 899cf52

Browse files
committed
More test cases for position information
1 parent 47ff774 commit 899cf52

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/test/java/org/json/junit/JSONTokenerTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.json.junit;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertTrue;
46
import static org.junit.Assert.fail;
57

68
import java.io.BufferedReader;
@@ -121,7 +123,12 @@ public void testSkipToSuccessWithStringReader() throws IOException {
121123
@Test
122124
public void testNextBackComboWithNewLines() {
123125
final String testString = "this is\nA test\r\nWith some different\rNew Lines";
126+
// ^ ^ ^ ^
127+
// index positions 0 8 16 36
124128
final JSONTokener tokener = new JSONTokener(testString);
129+
assertEquals(" at 0 [character 1 line 1]", tokener.toString());
130+
assertEquals('t',tokener.next());
131+
assertEquals(" at 1 [character 2 line 1]", tokener.toString());
125132
tokener.skipTo('\n');
126133
assertEquals("skipTo() improperly modifying indexes"," at 7 [character 8 line 1]", tokener.toString());
127134
assertEquals('\n',tokener.next());
@@ -132,10 +139,12 @@ public void testNextBackComboWithNewLines() {
132139
assertEquals(" at 8 [character 0 line 2]", tokener.toString());
133140
tokener.skipTo('\r');
134141
assertEquals("skipTo() improperly modifying indexes"," at 14 [character 6 line 2]", tokener.toString());
142+
// verify \r\n combo doesn't increment the line twice
135143
assertEquals('\r', tokener.next());
136144
assertEquals(" at 15 [character 0 line 3]", tokener.toString());
137145
assertEquals('\n', tokener.next());
138146
assertEquals(" at 16 [character 0 line 3]", tokener.toString());
147+
// verify stepping back after reading the \n of an \r\n combo doesn't increment the line incorrectly
139148
tokener.back();
140149
assertEquals(" at 15 [character 6 line 2]", tokener.toString());
141150
assertEquals('\n', tokener.next());
@@ -154,5 +163,39 @@ public void testNextBackComboWithNewLines() {
154163
assertEquals(" at 36 [character 0 line 4]", tokener.toString());
155164
assertEquals('N', tokener.next());
156165
assertEquals(" at 37 [character 1 line 4]", tokener.toString());
166+
167+
// verify we get the same data just walking though, no calls to back
168+
final JSONTokener t2 = new JSONTokener(testString);
169+
for(int i=0; i<7; i++) {
170+
assertTrue(t2.toString().startsWith(" at " + i + " "));
171+
assertEquals(testString.charAt(i), t2.next());
172+
}
173+
assertEquals(" at 7 [character 8 line 1]", t2.toString());
174+
assertEquals(testString.charAt(7), t2.next());
175+
assertEquals(" at 8 [character 0 line 2]", t2.toString());
176+
for(int i=8; i<14; i++) {
177+
assertTrue(t2.toString().startsWith(" at " + i + " "));
178+
assertEquals(testString.charAt(i), t2.next());
179+
}
180+
assertEquals(" at 14 [character 6 line 2]", t2.toString());
181+
assertEquals('\r', t2.next());
182+
assertEquals(" at 15 [character 0 line 3]", t2.toString());
183+
assertEquals('\n', t2.next());
184+
assertEquals(" at 16 [character 0 line 3]", t2.toString());
185+
assertEquals('W', t2.next());
186+
assertEquals(" at 17 [character 1 line 3]", t2.toString());
187+
for(int i=17; i<37; i++) {
188+
assertTrue(t2.toString().startsWith(" at " + i + " "));
189+
assertEquals(testString.charAt(i), t2.next());
190+
}
191+
assertEquals(" at 37 [character 1 line 4]", t2.toString());
192+
for(int i=37; i<testString.length(); i++) {
193+
assertTrue(t2.toString().startsWith(" at " + i + " "));
194+
assertEquals(testString.charAt(i), t2.next());
195+
}
196+
assertEquals(" at "+ testString.length() +" [character 9 line 4]", t2.toString());
197+
// end of the input
198+
assertEquals(0, t2.next());
199+
assertFalse(t2.more());
157200
}
158201
}

0 commit comments

Comments
 (0)