diff --git a/src/main/java/org/codelibs/fess/ds/ParamMap.java b/src/main/java/org/codelibs/fess/ds/ParamMap.java index 6914d2f9f..4eeeb9b92 100644 --- a/src/main/java/org/codelibs/fess/ds/ParamMap.java +++ b/src/main/java/org/codelibs/fess/ds/ParamMap.java @@ -22,6 +22,8 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; +import org.apache.commons.lang3.StringUtils; + import com.google.common.base.CaseFormat; public class ParamMap implements Map { @@ -36,8 +38,13 @@ public class ParamMap implements Map { if (key == null) { return key; } - final String keyStr = key.toString(); - return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, keyStr); + String keyStr = key.toString(); + if (keyStr.indexOf('_') < 0) { + keyStr = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, StringUtils.uncapitalize(keyStr)); + } else { + keyStr = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, keyStr); + } + return keyStr; } public int size() { diff --git a/src/test/java/org/codelibs/fess/ds/ParamMapTest.java b/src/test/java/org/codelibs/fess/ds/ParamMapTest.java index d589061f7..711f758b7 100644 --- a/src/test/java/org/codelibs/fess/ds/ParamMapTest.java +++ b/src/test/java/org/codelibs/fess/ds/ParamMapTest.java @@ -22,20 +22,27 @@ import org.codelibs.fess.unit.UnitFessTestCase; public class ParamMapTest extends UnitFessTestCase { - private Map paramMap; - - @Override - public void setUp() throws Exception { - super.setUp(); + private ParamMap createSnakeMap() { final Map map = new HashMap<>(); map.put("aaa", "111"); map.put("aaa_bbb", "222"); map.put("aaa_bbb_ccc", "333"); map.put("ccc.ddd", "444"); - paramMap = new ParamMap<>(map); + return new ParamMap<>(map); } - public void test_get() { + private ParamMap createCamelMap() { + final Map map = new HashMap<>(); + map.put("aaa", "111"); + map.put("aaaBbb", "222"); + map.put("aaaBbbCcc", "333"); + map.put("ccc.ddd", "444"); + return new ParamMap<>(map); + } + + public void test_snake_get() { + Map paramMap = createSnakeMap(); + assertNull(paramMap.get("xxx")); assertEquals("111", paramMap.get("aaa")); assertEquals("222", paramMap.get("aaa_bbb")); @@ -51,7 +58,9 @@ public class ParamMapTest extends UnitFessTestCase { assertNull(paramMap.get("DccDdd")); } - public void test_containsKey() { + public void test_snake_containsKey() { + Map paramMap = createSnakeMap(); + assertFalse(paramMap.containsKey("xxx")); assertTrue(paramMap.containsKey("aaa")); assertTrue(paramMap.containsKey("aaa_bbb")); @@ -66,4 +75,40 @@ public class ParamMapTest extends UnitFessTestCase { assertFalse(paramMap.containsKey("cccDdd")); assertFalse(paramMap.containsKey("DccDdd")); } + + public void test_camel_get() { + Map paramMap = createCamelMap(); + + assertNull(paramMap.get("xxx")); + assertEquals("111", paramMap.get("aaa")); + assertEquals("222", paramMap.get("aaa_bbb")); + assertEquals("222", paramMap.get("aaaBbb")); + assertNull(paramMap.get("AaaBbb")); // null + assertNull(paramMap.get("aaabbb")); + assertEquals("333", paramMap.get("aaa_bbb_ccc")); + assertEquals("333", paramMap.get("aaaBbbCcc")); + assertNull(paramMap.get("AaaBbbCcc")); // null + assertNull(paramMap.get("aaabbbcc")); + assertEquals("444", paramMap.get("ccc.ddd")); + assertNull(paramMap.get("cccDdd")); + assertNull(paramMap.get("DccDdd")); + } + + public void test_camel_containsKey() { + Map paramMap = createCamelMap(); + + assertFalse(paramMap.containsKey("xxx")); + assertTrue(paramMap.containsKey("aaa")); + assertTrue(paramMap.containsKey("aaa_bbb")); + assertTrue(paramMap.containsKey("aaaBbb")); + assertFalse(paramMap.containsKey("AaaBbb")); // false + assertFalse(paramMap.containsKey("aaabbb")); + assertTrue(paramMap.containsKey("aaa_bbb_ccc")); + assertTrue(paramMap.containsKey("aaaBbbCcc")); + assertFalse(paramMap.containsKey("AaaBbbCcc")); // false + assertFalse(paramMap.containsKey("aaabbbcc")); + assertTrue(paramMap.containsKey("ccc.ddd")); + assertFalse(paramMap.containsKey("cccDdd")); + assertFalse(paramMap.containsKey("DccDdd")); + } }