From 21a28abc6ac3a2404e7b90327122b1364a283ec9 Mon Sep 17 00:00:00 2001 From: Chieu Nguyen Date: Mon, 9 Mar 2015 18:54:39 -0700 Subject: [PATCH] Handle empty previous ngram context correctly. Fixes bug where empty previous ngram context not at the beginning of a sentence incorrectly returned the beginning-of-sentence marker. Bug: 19612336 Change-Id: I5ddf3408e20dcedf70487b85c983cd3fc12550e7 --- .../android/inputmethod/latin/NgramContext.java | 7 ++----- .../inputmethod/latin/NgramContextTests.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/NgramContext.java b/java/src/com/android/inputmethod/latin/NgramContext.java index c9351586e..aeeff6126 100644 --- a/java/src/com/android/inputmethod/latin/NgramContext.java +++ b/java/src/com/android/inputmethod/latin/NgramContext.java @@ -142,8 +142,7 @@ public class NgramContext { } } } - return terms.size() == 0 ? BEGINNING_OF_SENTENCE_TAG - : TextUtils.join(CONTEXT_SEPARATOR, terms); + return TextUtils.join(CONTEXT_SEPARATOR, terms); } /** @@ -166,9 +165,7 @@ public class NgramContext { } } } - final String[] contextStringArray = prevTermList.size() == 0 ? - new String[] { BEGINNING_OF_SENTENCE_TAG } - : prevTermList.toArray(new String[prevTermList.size()]); + final String[] contextStringArray = prevTermList.toArray(new String[prevTermList.size()]); return contextStringArray; } diff --git a/tests/src/com/android/inputmethod/latin/NgramContextTests.java b/tests/src/com/android/inputmethod/latin/NgramContextTests.java index 97143a3b6..7749bff63 100644 --- a/tests/src/com/android/inputmethod/latin/NgramContextTests.java +++ b/tests/src/com/android/inputmethod/latin/NgramContextTests.java @@ -81,15 +81,24 @@ public class NgramContextTests extends AndroidTestCase { assertTrue(ngramContext_bos_b.isBeginningOfSentenceContext()); assertEquals("b", ngramContext_bos_b.getNthPrevWord(2)); assertEquals("a b ", ngramContext_bos_b.extractPrevWordsContext()); + + final NgramContext ngramContext_empty = new NgramContext(WordInfo.EMPTY_WORD_INFO); + assertEquals("", ngramContext_empty.extractPrevWordsContext()); + final NgramContext ngramContext_a_empty = + ngramContext_empty.getNextNgramContext(new WordInfo("a")); + assertEquals("a", ngramContext_a_empty.getNthPrevWord(1)); + assertEquals("a", ngramContext_a_empty.extractPrevWordsContext()); } public void testExtractPrevWordsContextArray() { final NgramContext ngramContext_bos = new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); assertEquals("", ngramContext_bos.extractPrevWordsContext()); + assertEquals(1, ngramContext_bos.extractPrevWordsContextArray().length); final NgramContext ngramContext_a = new NgramContext(new WordInfo("a")); final NgramContext ngramContext_b_a = ngramContext_a.getNextNgramContext(new WordInfo("b")); + assertEquals(2, ngramContext_b_a.extractPrevWordsContextArray().length); assertEquals("b", ngramContext_b_a.getNthPrevWord(1)); assertEquals("a", ngramContext_b_a.getNthPrevWord(2)); assertEquals("a", ngramContext_b_a.extractPrevWordsContextArray()[0]); @@ -98,9 +107,17 @@ public class NgramContextTests extends AndroidTestCase { final NgramContext ngramContext_bos_b = ngramContext_b_a.getNextNgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); assertTrue(ngramContext_bos_b.isBeginningOfSentenceContext()); + assertEquals(3, ngramContext_bos_b.extractPrevWordsContextArray().length); assertEquals("b", ngramContext_bos_b.getNthPrevWord(2)); assertEquals("a", ngramContext_bos_b.extractPrevWordsContextArray()[0]); assertEquals("b", ngramContext_bos_b.extractPrevWordsContextArray()[1]); assertEquals("", ngramContext_bos_b.extractPrevWordsContextArray()[2]); + + final NgramContext ngramContext_empty = new NgramContext(WordInfo.EMPTY_WORD_INFO); + assertEquals(0, ngramContext_empty.extractPrevWordsContextArray().length); + final NgramContext ngramContext_a_empty = + ngramContext_empty.getNextNgramContext(new WordInfo("a")); + assertEquals(1, ngramContext_a_empty.extractPrevWordsContextArray().length); + assertEquals("a", ngramContext_a_empty.extractPrevWordsContextArray()[0]); } }