aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuichiro Hanada <yhanada@google.com>2012-08-16 19:23:56 +0900
committerYuichiro Hanada <yhanada@google.com>2012-08-16 20:21:47 +0900
commit66f338983bb9cb04a0d94a4729330b1c8ff01c93 (patch)
tree91a8e28a62e54fdee4c824efe678f59ef9161642
parent05384933097c1e9c35e8be5c03757d072e5ffa46 (diff)
downloadlatinime-66f338983bb9cb04a0d94a4729330b1c8ff01c93.tar.gz
latinime-66f338983bb9cb04a0d94a4729330b1c8ff01c93.tar.xz
latinime-66f338983bb9cb04a0d94a4729330b1c8ff01c93.zip
fix findWordInTree.
Change-Id: I9d81c815494a0670afa81219ad7bad82274d997e
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java11
-rw-r--r--tests/src/com/android/inputmethod/latin/FusionDictionaryTests.java42
2 files changed, 52 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index 5864db28e..260155174 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -516,13 +516,22 @@ public class FusionDictionary implements Iterable<Word> {
int indexOfGroup = findIndexOfChar(node, s.codePointAt(index));
if (CHARACTER_NOT_FOUND == indexOfGroup) return null;
currentGroup = node.mData.get(indexOfGroup);
+
+ if (s.length() - index < currentGroup.mChars.length) return null;
+ int newIndex = index;
+ while (newIndex < s.length() && newIndex - index < currentGroup.mChars.length) {
+ if (currentGroup.mChars[newIndex - index] != s.codePointAt(newIndex)) return null;
+ newIndex++;
+ }
+ index = newIndex;
+
if (DBG) checker.append(new String(currentGroup.mChars, 0, currentGroup.mChars.length));
- index += currentGroup.mChars.length;
if (index < s.length()) {
node = currentGroup.mChildren;
}
} while (null != node && index < s.length());
+ if (index < s.length()) return null;
if (DBG && !s.equals(checker.toString())) return null;
return currentGroup;
}
diff --git a/tests/src/com/android/inputmethod/latin/FusionDictionaryTests.java b/tests/src/com/android/inputmethod/latin/FusionDictionaryTests.java
new file mode 100644
index 000000000..e3f75839e
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/FusionDictionaryTests.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.test.AndroidTestCase;
+
+import com.android.inputmethod.latin.makedict.FusionDictionary;
+import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
+
+import java.util.HashMap;
+
+/**
+ * Unit test for FusionDictionary
+ */
+public class FusionDictionaryTests extends AndroidTestCase {
+ public void testFindWordInTree() {
+ FusionDictionary dict = new FusionDictionary(new Node(),
+ new FusionDictionary.DictionaryOptions(new HashMap<String,String>(), false, false));
+
+ dict.add("abc", 10, null);
+ assertNull(FusionDictionary.findWordInTree(dict.mRoot, "aaa"));
+ assertNotNull(FusionDictionary.findWordInTree(dict.mRoot, "abc"));
+
+ dict.add("aa", 10, null);
+ assertNull(FusionDictionary.findWordInTree(dict.mRoot, "aaa"));
+ assertNotNull(FusionDictionary.findWordInTree(dict.mRoot, "aa"));
+ }
+}