Support regular expression for condition pattern

Bug: 8556975
Change-Id: Iffc53d6a40dd77860434c5f7f4f59af5cd1ba92b
This commit is contained in:
Tadashi G. Takaoka 2013-05-13 13:40:59 +09:00
parent ec83457d72
commit 18184eacb1
2 changed files with 42 additions and 6 deletions

View file

@ -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;
}
}

View file

@ -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");
}
}