Skip to content

Commit b32ba88

Browse files
committed
Fix incorrect token edges with extra whitespace
1 parent e8a9a6c commit b32ba88

File tree

3 files changed

+74
-1
lines changed

3 files changed

+74
-1
lines changed

library/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ task jar(type: Jar) {
3030
}
3131

3232
dependencies {
33+
testCompile 'junit:junit:4.12'
34+
3335
compile 'com.android.support:support-annotations:25.3.1'
3436
}
3537

library/src/main/java/com/tokenautocomplete/CharacterTokenizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public int findTokenStart(CharSequence text, int cursor) {
2828
while (i > 0 && !splitChar.contains(text.charAt(i - 1))) {
2929
i--;
3030
}
31-
while (i < cursor && text.charAt(i) == ' ') {
31+
while (i > 0 && text.charAt(i) == ' ') {
3232
i++;
3333
}
3434

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.tokenautocomplete;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import org.junit.Test;
5+
6+
/**
7+
* Make sure the tokenizer finds the right boundaries
8+
*
9+
* Created by mgod on 8/24/17.
10+
*/
11+
12+
public class CharacterTokenizerTest {
13+
14+
@Test
15+
public void handleWhiteSpaceWithCommaTokens() {
16+
char[] splits = {','};
17+
CharacterTokenizer tokenizer = new CharacterTokenizer(splits);
18+
String text = "bears, ponies";
19+
assertEquals(0, tokenizer.findTokenStart(text, 0));
20+
assertEquals(0, tokenizer.findTokenStart(text, 1));
21+
assertEquals(0, tokenizer.findTokenStart(text, 5));
22+
assertEquals(7, tokenizer.findTokenStart(text, 6));
23+
assertEquals(7, tokenizer.findTokenStart(text, 7));
24+
assertEquals(7, tokenizer.findTokenStart(text, 11));
25+
26+
assertEquals(5, tokenizer.findTokenEnd(text, 0));
27+
assertEquals(5, tokenizer.findTokenEnd(text, 4));
28+
assertEquals(5, tokenizer.findTokenEnd(text, 5));
29+
assertEquals(13, tokenizer.findTokenEnd(text, 6));
30+
assertEquals(13, tokenizer.findTokenEnd(text, 10));
31+
assertEquals(13, tokenizer.findTokenEnd(text, 11));
32+
}
33+
34+
@Test
35+
public void handleWhiteSpaceWithWhitespaceTokens() {
36+
char[] splits = {' '};
37+
CharacterTokenizer tokenizer = new CharacterTokenizer(splits);
38+
String text = "bears ponies";
39+
assertEquals(0, tokenizer.findTokenStart(text, 0));
40+
assertEquals(0, tokenizer.findTokenStart(text, 1));
41+
assertEquals(0, tokenizer.findTokenStart(text, 5));
42+
assertEquals(6, tokenizer.findTokenStart(text, 6));
43+
assertEquals(6, tokenizer.findTokenStart(text, 7));
44+
assertEquals(6, tokenizer.findTokenStart(text, 11));
45+
46+
assertEquals(5, tokenizer.findTokenEnd(text, 0));
47+
assertEquals(5, tokenizer.findTokenEnd(text, 4));
48+
assertEquals(5, tokenizer.findTokenEnd(text, 5));
49+
assertEquals(12, tokenizer.findTokenEnd(text, 6));
50+
assertEquals(12, tokenizer.findTokenEnd(text, 10));
51+
assertEquals(12, tokenizer.findTokenEnd(text, 11));
52+
}
53+
54+
@Test
55+
public void handleLotsOfWhitespace() {
56+
char[] splits = {','};
57+
CharacterTokenizer tokenizer = new CharacterTokenizer(splits);
58+
String text = "bears, ponies ,another";
59+
assertEquals(12, tokenizer.findTokenStart(text, 6));
60+
assertEquals(12, tokenizer.findTokenStart(text, 7));
61+
assertEquals(12, tokenizer.findTokenStart(text, 18));
62+
assertEquals(12, tokenizer.findTokenStart(text, 23));
63+
assertEquals(24, tokenizer.findTokenStart(text, 24));
64+
65+
assertEquals(23, tokenizer.findTokenEnd(text, 6));
66+
assertEquals(23, tokenizer.findTokenEnd(text, 7));
67+
assertEquals(23, tokenizer.findTokenEnd(text, 18));
68+
assertEquals(23, tokenizer.findTokenEnd(text, 23));
69+
assertEquals(31, tokenizer.findTokenEnd(text, 24));
70+
}
71+
}

0 commit comments

Comments
 (0)