From 18184eacb149f1b12b859ff8631340a9f73bf8ac Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 13 May 2013 13:40:59 +0900 Subject: [PATCH] Support regular expression for condition pattern Bug: 8556975 Change-Id: Iffc53d6a40dd77860434c5f7f4f59af5cd1ba92b --- .../inputmethod/latin/ResourceUtils.java | 12 +++---- .../inputmethod/latin/ResourceUtilsTests.java | 36 +++++++++++++++++++ 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 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"); + } }