Loading java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java +12 −6 Original line number Diff line number Diff line Loading @@ -325,7 +325,7 @@ public class KeySpecParser { return null; } if (Utils.codePointCount(text) == 1) { return new String[] { text }; return text.codePointAt(0) == COMMA ? null : new String[] { text }; } ArrayList<String> list = null; Loading @@ -333,10 +333,13 @@ public class KeySpecParser { for (int pos = 0; pos < size; pos++) { final char c = text.charAt(pos); if (c == COMMA) { // Skip empty entry. if (pos - start > 0) { if (list == null) { list = new ArrayList<String>(); } list.add(text.substring(start, pos)); } // Skip comma start = pos + 1; } else if (c == ESCAPE_CHAR) { Loading @@ -344,10 +347,13 @@ public class KeySpecParser { pos++; } } final String remain = (size - start > 0) ? text.substring(start) : null; if (list == null) { return new String[] { text.substring(start) }; return remain != null ? new String[] { remain } : null; } else { list.add(text.substring(start)); if (remain != null) { list.add(remain); } return list.toArray(new String[list.size()]); } } Loading tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java +8 −2 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ public class KeySpecParserCsvTests extends AndroidTestCase { final String actual[] = KeySpecParser.parseCsvString(value, mTestResources, R.string.empty_string); if (expected.length == 0) { assertNull(message, actual); assertNull(message + ": expected=null actual=" + Arrays.toString(actual), actual); return; } assertEquals(message + ": expected=" + Arrays.toString(expected) Loading Loading @@ -74,6 +75,11 @@ public class KeySpecParserCsvTests extends AndroidTestCase { public void testParseCsvTextZero() { assertTextArray("Empty string", ""); assertTextArray("Empty entry", ","); assertTextArray("Empty entry at beginning", ",a", "a"); assertTextArray("Empty entry at end", "a,", "a"); assertTextArray("Empty entry at middle", "a,,b", "a", "b"); assertTextArray("Empty entries with escape", ",a,b\\,c,,d,", "a", "b\\,c", "d"); } public void testParseCsvTextSingle() { Loading @@ -82,7 +88,7 @@ public class KeySpecParserCsvTests extends AndroidTestCase { assertTextArray("Single escape", "\\", "\\"); assertTextArray("Space", " ", " "); assertTextArray("Single label", "abc", "abc"); assertTextArray("Single srrogate pairs label", SURROGATE2, SURROGATE2); assertTextArray("Single surrogate pairs label", SURROGATE2, SURROGATE2); assertTextArray("Spaces", " ", " "); assertTextArray("Spaces in label", "a b c", "a b c"); assertTextArray("Spaces at beginning of label", " abc", " abc"); Loading Loading
java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java +12 −6 Original line number Diff line number Diff line Loading @@ -325,7 +325,7 @@ public class KeySpecParser { return null; } if (Utils.codePointCount(text) == 1) { return new String[] { text }; return text.codePointAt(0) == COMMA ? null : new String[] { text }; } ArrayList<String> list = null; Loading @@ -333,10 +333,13 @@ public class KeySpecParser { for (int pos = 0; pos < size; pos++) { final char c = text.charAt(pos); if (c == COMMA) { // Skip empty entry. if (pos - start > 0) { if (list == null) { list = new ArrayList<String>(); } list.add(text.substring(start, pos)); } // Skip comma start = pos + 1; } else if (c == ESCAPE_CHAR) { Loading @@ -344,10 +347,13 @@ public class KeySpecParser { pos++; } } final String remain = (size - start > 0) ? text.substring(start) : null; if (list == null) { return new String[] { text.substring(start) }; return remain != null ? new String[] { remain } : null; } else { list.add(text.substring(start)); if (remain != null) { list.add(remain); } return list.toArray(new String[list.size()]); } } Loading
tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java +8 −2 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ public class KeySpecParserCsvTests extends AndroidTestCase { final String actual[] = KeySpecParser.parseCsvString(value, mTestResources, R.string.empty_string); if (expected.length == 0) { assertNull(message, actual); assertNull(message + ": expected=null actual=" + Arrays.toString(actual), actual); return; } assertEquals(message + ": expected=" + Arrays.toString(expected) Loading Loading @@ -74,6 +75,11 @@ public class KeySpecParserCsvTests extends AndroidTestCase { public void testParseCsvTextZero() { assertTextArray("Empty string", ""); assertTextArray("Empty entry", ","); assertTextArray("Empty entry at beginning", ",a", "a"); assertTextArray("Empty entry at end", "a,", "a"); assertTextArray("Empty entry at middle", "a,,b", "a", "b"); assertTextArray("Empty entries with escape", ",a,b\\,c,,d,", "a", "b\\,c", "d"); } public void testParseCsvTextSingle() { Loading @@ -82,7 +88,7 @@ public class KeySpecParserCsvTests extends AndroidTestCase { assertTextArray("Single escape", "\\", "\\"); assertTextArray("Space", " ", " "); assertTextArray("Single label", "abc", "abc"); assertTextArray("Single srrogate pairs label", SURROGATE2, SURROGATE2); assertTextArray("Single surrogate pairs label", SURROGATE2, SURROGATE2); assertTextArray("Spaces", " ", " "); assertTextArray("Spaces in label", "a b c", "a b c"); assertTextArray("Spaces at beginning of label", " abc", " abc"); Loading