aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/inputmethod/latin/ResourceUtils.java12
-rw-r--r--tests/src/com/android/inputmethod/latin/ResourceUtilsTests.java36
2 files changed, 42 insertions, 6 deletions
diff --git a/java/src/com/android/inputmethod/latin/ResourceUtils.java b/java/src/com/android/inputmethod/latin/ResourceUtils.java
index 488a0e313..03b7efba9 100644
--- a/java/src/com/android/inputmethod/latin/ResourceUtils.java
+++ b/java/src/com/android/inputmethod/latin/ResourceUtils.java
@@ -103,12 +103,12 @@ public final class ResourceUtils {
/**
* Find the condition that fulfills specified key value pairs from an array of
* "condition,constant", and return the corresponding string constant. A condition is
- * "pattern1[:pattern2...] (or an empty string for the default). A pattern is "key=value"
- * string. The condition matches only if all patterns of the condition are true for the
- * specified key value pairs.
+ * "pattern1[:pattern2...] (or an empty string for the default). A pattern is
+ * "key=regexp_value" string. The condition matches only if all patterns of the condition
+ * are true for the specified key value pairs.
*
* For example, "condition,constant" has the following format.
- * (See {@link ResourceUtilsTests#testFindConstantForKeyValuePairsCombined()})
+ * (See {@link ResourceUtilsTests#testFindConstantForKeyValuePairsRegexp()})
* - HARDWARE=mako,constantForNexus4
* - MODEL=Nexus 4:MANUFACTURER=LGE,constantForNexus4
* - ,defaultConstant
@@ -156,8 +156,8 @@ public final class ResourceUtils {
if (value == null) {
throw new RuntimeException("Found unknown key: " + condition);
}
- final String patternValue = pattern.substring(posEqual + 1);
- if (!value.equals(patternValue)) {
+ final String patternRegexpValue = pattern.substring(posEqual + 1);
+ if (!value.matches(patternRegexpValue)) {
return false;
}
}
diff --git a/tests/src/com/android/inputmethod/latin/ResourceUtilsTests.java b/tests/src/com/android/inputmethod/latin/ResourceUtilsTests.java
index fa6df7010..ed16846b9 100644
--- a/tests/src/com/android/inputmethod/latin/ResourceUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/ResourceUtilsTests.java
@@ -137,4 +137,40 @@ public class ResourceUtilsTests extends AndroidTestCase {
assertNull(ResourceUtils.findConstantForKeyValuePairs(keyValues, array));
assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, failArray), "0.2");
}
+
+ public void testFindConstantForKeyValuePairsRegexp() {
+ final String HARDWARE_KEY = "HARDWARE";
+ final String MODEL_KEY = "MODEL";
+ final String MANUFACTURER_KEY = "MANUFACTURER";
+ final String[] array = {
+ ",defaultValue",
+ "HARDWARE=grouper|tilapia:MANUFACTURER=asus,0.3",
+ "HARDWARE=[mM][aA][kK][oO]:MODEL=Nexus 4,0.4",
+ "HARDWARE=manta.*:MODEL=Nexus 10:MANUFACTURER=samsung,0.2"
+ };
+
+ final HashMap<String,String> keyValues = CollectionUtils.newHashMap();
+ keyValues.put(HARDWARE_KEY, "grouper");
+ keyValues.put(MODEL_KEY, "Nexus 7");
+ keyValues.put(MANUFACTURER_KEY, "asus");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.3");
+ keyValues.put(HARDWARE_KEY, "tilapia");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.3");
+
+ keyValues.clear();
+ keyValues.put(HARDWARE_KEY, "mako");
+ keyValues.put(MODEL_KEY, "Nexus 4");
+ keyValues.put(MANUFACTURER_KEY, "LGE");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.4");
+ keyValues.put(HARDWARE_KEY, "MAKO");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.4");
+
+ keyValues.clear();
+ keyValues.put(HARDWARE_KEY, "manta");
+ keyValues.put(MODEL_KEY, "Nexus 10");
+ keyValues.put(MANUFACTURER_KEY, "samsung");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.2");
+ keyValues.put(HARDWARE_KEY, "mantaray");
+ assertEquals(ResourceUtils.findConstantForKeyValuePairs(keyValues, array), "0.2");
+ }
}