Add null check to KeySpecParser
Change-Id: Ic37db8cbf8f83f753d7381e1edba8eac1ef1ceb1main
parent
bc9514032a
commit
d9c6b33209
|
@ -120,6 +120,10 @@ public final class KeySpecParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLabel(final String keySpec) {
|
public static String getLabel(final String keySpec) {
|
||||||
|
if (keySpec == null) {
|
||||||
|
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (hasIcon(keySpec)) {
|
if (hasIcon(keySpec)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -140,6 +144,10 @@ public final class KeySpecParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getOutputText(final String keySpec) {
|
public static String getOutputText(final String keySpec) {
|
||||||
|
if (keySpec == null) {
|
||||||
|
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
final int labelEnd = indexOfLabelEnd(keySpec);
|
final int labelEnd = indexOfLabelEnd(keySpec);
|
||||||
if (hasCode(keySpec, labelEnd)) {
|
if (hasCode(keySpec, labelEnd)) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -165,6 +173,10 @@ public final class KeySpecParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getCode(final String keySpec, final KeyboardCodesSet codesSet) {
|
public static int getCode(final String keySpec, final KeyboardCodesSet codesSet) {
|
||||||
|
if (keySpec == null) {
|
||||||
|
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
|
||||||
|
return CODE_UNSPECIFIED;
|
||||||
|
}
|
||||||
final int labelEnd = indexOfLabelEnd(keySpec);
|
final int labelEnd = indexOfLabelEnd(keySpec);
|
||||||
if (hasCode(keySpec, labelEnd)) {
|
if (hasCode(keySpec, labelEnd)) {
|
||||||
checkDoubleLabelEnd(keySpec, labelEnd);
|
checkDoubleLabelEnd(keySpec, labelEnd);
|
||||||
|
@ -187,6 +199,7 @@ public final class KeySpecParser {
|
||||||
return (StringUtils.codePointCount(label) == 1) ? label.codePointAt(0) : CODE_OUTPUT_TEXT;
|
return (StringUtils.codePointCount(label) == 1) ? label.codePointAt(0) : CODE_OUTPUT_TEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Make this method private once Key.code attribute is removed.
|
||||||
public static int parseCode(final String text, final KeyboardCodesSet codesSet,
|
public static int parseCode(final String text, final KeyboardCodesSet codesSet,
|
||||||
final int defCode) {
|
final int defCode) {
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
|
@ -202,6 +215,10 @@ public final class KeySpecParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getIconId(final String keySpec) {
|
public static int getIconId(final String keySpec) {
|
||||||
|
if (keySpec == null) {
|
||||||
|
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
|
||||||
|
return KeyboardIconsSet.ICON_UNDEFINED;
|
||||||
|
}
|
||||||
if (!hasIcon(keySpec)) {
|
if (!hasIcon(keySpec)) {
|
||||||
return KeyboardIconsSet.ICON_UNDEFINED;
|
return KeyboardIconsSet.ICON_UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,9 @@ public final class MoreKeySpec {
|
||||||
|
|
||||||
public MoreKeySpec(final String moreKeySpec, boolean needsToUpperCase, final Locale locale,
|
public MoreKeySpec(final String moreKeySpec, boolean needsToUpperCase, final Locale locale,
|
||||||
final KeyboardCodesSet codesSet) {
|
final KeyboardCodesSet codesSet) {
|
||||||
|
if (TextUtils.isEmpty(moreKeySpec)) {
|
||||||
|
throw new KeySpecParser.KeySpecParserError("Empty more key spec");
|
||||||
|
}
|
||||||
mLabel = StringUtils.toUpperCaseOfStringForLocale(
|
mLabel = StringUtils.toUpperCaseOfStringForLocale(
|
||||||
KeySpecParser.getLabel(moreKeySpec), needsToUpperCase, locale);
|
KeySpecParser.getLabel(moreKeySpec), needsToUpperCase, locale);
|
||||||
final int code = StringUtils.toUpperCaseOfCodeForLocale(
|
final int code = StringUtils.toUpperCaseOfCodeForLocale(
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
package com.android.inputmethod.keyboard.internal;
|
package com.android.inputmethod.keyboard.internal;
|
||||||
|
|
||||||
|
import static com.android.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
|
||||||
|
import static com.android.inputmethod.latin.Constants.CODE_UNSPECIFIED;
|
||||||
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.Constants;
|
import com.android.inputmethod.latin.Constants;
|
||||||
|
@ -40,4 +43,13 @@ public final class KeySpecParserTests extends KeySpecParserTestsBase {
|
||||||
Constants.printableCode(expectedCode),
|
Constants.printableCode(expectedCode),
|
||||||
Constants.printableCode(actualCode));
|
Constants.printableCode(actualCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this method.
|
||||||
|
// These should throw {@link KeySpecParserError} when Key.keyLabel attribute become mandatory.
|
||||||
|
public void testEmptySpec() {
|
||||||
|
assertParser("Null spec", null,
|
||||||
|
null, null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
||||||
|
assertParser("Empty spec", "",
|
||||||
|
null, null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -251,10 +251,6 @@ abstract class KeySpecParserTestsBase extends AndroidTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFormatError() {
|
public void testFormatError() {
|
||||||
assertParserError("Null spec", null, null,
|
|
||||||
null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
|
||||||
assertParserError("Empty spec", "", null,
|
|
||||||
null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
|
||||||
assertParserError("Single bar", "|",
|
assertParserError("Single bar", "|",
|
||||||
"|", null, ICON_UNDEFINED, '|');
|
"|", null, ICON_UNDEFINED, '|');
|
||||||
assertParserError("Empty label with outputText", "|a",
|
assertParserError("Empty label with outputText", "|a",
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
package com.android.inputmethod.keyboard.internal;
|
package com.android.inputmethod.keyboard.internal;
|
||||||
|
|
||||||
|
import static com.android.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
|
||||||
|
import static com.android.inputmethod.latin.Constants.CODE_UNSPECIFIED;
|
||||||
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.Constants;
|
import com.android.inputmethod.latin.Constants;
|
||||||
|
@ -42,6 +45,14 @@ public final class MoreKeySpecTests extends KeySpecParserTestsBase {
|
||||||
Constants.printableCode(spec.mCode));
|
Constants.printableCode(spec.mCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Move this method to {@link KeySpecParserBase}.
|
||||||
|
public void testEmptySpec() {
|
||||||
|
assertParserError("Null spec", null,
|
||||||
|
null, null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
||||||
|
assertParserError("Empty spec", "",
|
||||||
|
null, null, ICON_UNDEFINED, CODE_UNSPECIFIED);
|
||||||
|
}
|
||||||
|
|
||||||
private static void assertArrayEquals(final String message, final Object[] expected,
|
private static void assertArrayEquals(final String message, final Object[] expected,
|
||||||
final Object[] actual) {
|
final Object[] actual) {
|
||||||
if (expected == actual) {
|
if (expected == actual) {
|
||||||
|
|
Loading…
Reference in New Issue