1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.inputmethod.latin; 18 19 import com.android.inputmethod.latin.NgramContext.WordInfo; 20 import com.android.inputmethod.latin.settings.SpacingAndPunctuations; 21 import com.android.inputmethod.latin.utils.NgramContextUtils; 22 23 import android.test.AndroidTestCase; 24 import android.test.suitebuilder.annotation.SmallTest; 25 26 @SmallTest 27 public class NgramContextTests extends AndroidTestCase { testConstruct()28 public void testConstruct() { 29 assertEquals(new NgramContext(new WordInfo("a")), new NgramContext(new WordInfo("a"))); 30 assertEquals(new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO), 31 new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO)); 32 assertEquals(new NgramContext(WordInfo.EMPTY_WORD_INFO), 33 new NgramContext(WordInfo.EMPTY_WORD_INFO)); 34 assertEquals(new NgramContext(WordInfo.EMPTY_WORD_INFO), 35 new NgramContext(WordInfo.EMPTY_WORD_INFO)); 36 } 37 testIsBeginningOfSentenceContext()38 public void testIsBeginningOfSentenceContext() { 39 assertFalse(new NgramContext().isBeginningOfSentenceContext()); 40 assertTrue(new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO) 41 .isBeginningOfSentenceContext()); 42 assertTrue(NgramContext.BEGINNING_OF_SENTENCE.isBeginningOfSentenceContext()); 43 assertFalse(new NgramContext(new WordInfo("a")).isBeginningOfSentenceContext()); 44 assertFalse(new NgramContext(new WordInfo("")).isBeginningOfSentenceContext()); 45 assertFalse(new NgramContext(WordInfo.EMPTY_WORD_INFO).isBeginningOfSentenceContext()); 46 assertTrue(new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO, new WordInfo("a")) 47 .isBeginningOfSentenceContext()); 48 assertFalse(new NgramContext(new WordInfo("a"), WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO) 49 .isBeginningOfSentenceContext()); 50 assertFalse(new NgramContext( 51 WordInfo.EMPTY_WORD_INFO, WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO) 52 .isBeginningOfSentenceContext()); 53 } 54 testGetNextNgramContext()55 public void testGetNextNgramContext() { 56 final NgramContext ngramContext_a = new NgramContext(new WordInfo("a")); 57 final NgramContext ngramContext_b_a = 58 ngramContext_a.getNextNgramContext(new WordInfo("b")); 59 assertEquals("b", ngramContext_b_a.getNthPrevWord(1)); 60 assertEquals("a", ngramContext_b_a.getNthPrevWord(2)); 61 final NgramContext ngramContext_bos_b = 62 ngramContext_b_a.getNextNgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); 63 assertTrue(ngramContext_bos_b.isBeginningOfSentenceContext()); 64 assertEquals("b", ngramContext_bos_b.getNthPrevWord(2)); 65 final NgramContext ngramContext_c_bos = 66 ngramContext_b_a.getNextNgramContext(new WordInfo("c")); 67 assertEquals("c", ngramContext_c_bos.getNthPrevWord(1)); 68 } 69 testExtractPrevWordsContextTest()70 public void testExtractPrevWordsContextTest() { 71 final NgramContext ngramContext_bos = 72 new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); 73 assertEquals("<S>", ngramContext_bos.extractPrevWordsContext()); 74 final NgramContext ngramContext_a = new NgramContext(new WordInfo("a")); 75 final NgramContext ngramContext_b_a = 76 ngramContext_a.getNextNgramContext(new WordInfo("b")); 77 assertEquals("b", ngramContext_b_a.getNthPrevWord(1)); 78 assertEquals("a", ngramContext_b_a.getNthPrevWord(2)); 79 assertEquals("a b", ngramContext_b_a.extractPrevWordsContext()); 80 81 final NgramContext ngramContext_bos_b = 82 ngramContext_b_a.getNextNgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); 83 assertTrue(ngramContext_bos_b.isBeginningOfSentenceContext()); 84 assertEquals("b", ngramContext_bos_b.getNthPrevWord(2)); 85 assertEquals("a b <S>", ngramContext_bos_b.extractPrevWordsContext()); 86 87 final NgramContext ngramContext_empty = new NgramContext(WordInfo.EMPTY_WORD_INFO); 88 assertEquals("", ngramContext_empty.extractPrevWordsContext()); 89 final NgramContext ngramContext_a_empty = 90 ngramContext_empty.getNextNgramContext(new WordInfo("a")); 91 assertEquals("a", ngramContext_a_empty.getNthPrevWord(1)); 92 assertEquals("a", ngramContext_a_empty.extractPrevWordsContext()); 93 } 94 testExtractPrevWordsContextArray()95 public void testExtractPrevWordsContextArray() { 96 final NgramContext ngramContext_bos = 97 new NgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); 98 assertEquals("<S>", ngramContext_bos.extractPrevWordsContext()); 99 assertEquals(1, ngramContext_bos.extractPrevWordsContextArray().length); 100 final NgramContext ngramContext_a = new NgramContext(new WordInfo("a")); 101 final NgramContext ngramContext_b_a = 102 ngramContext_a.getNextNgramContext(new WordInfo("b")); 103 assertEquals(2, ngramContext_b_a.extractPrevWordsContextArray().length); 104 assertEquals("b", ngramContext_b_a.getNthPrevWord(1)); 105 assertEquals("a", ngramContext_b_a.getNthPrevWord(2)); 106 assertEquals("a", ngramContext_b_a.extractPrevWordsContextArray()[0]); 107 assertEquals("b", ngramContext_b_a.extractPrevWordsContextArray()[1]); 108 109 final NgramContext ngramContext_bos_b = 110 ngramContext_b_a.getNextNgramContext(WordInfo.BEGINNING_OF_SENTENCE_WORD_INFO); 111 assertTrue(ngramContext_bos_b.isBeginningOfSentenceContext()); 112 assertEquals(3, ngramContext_bos_b.extractPrevWordsContextArray().length); 113 assertEquals("b", ngramContext_bos_b.getNthPrevWord(2)); 114 assertEquals("a", ngramContext_bos_b.extractPrevWordsContextArray()[0]); 115 assertEquals("b", ngramContext_bos_b.extractPrevWordsContextArray()[1]); 116 assertEquals("<S>", ngramContext_bos_b.extractPrevWordsContextArray()[2]); 117 118 final NgramContext ngramContext_empty = new NgramContext(WordInfo.EMPTY_WORD_INFO); 119 assertEquals(0, ngramContext_empty.extractPrevWordsContextArray().length); 120 final NgramContext ngramContext_a_empty = 121 ngramContext_empty.getNextNgramContext(new WordInfo("a")); 122 assertEquals(1, ngramContext_a_empty.extractPrevWordsContextArray().length); 123 assertEquals("a", ngramContext_a_empty.extractPrevWordsContextArray()[0]); 124 } 125 testGetNgramContextFromNthPreviousWord()126 public void testGetNgramContextFromNthPreviousWord() { 127 SpacingAndPunctuations spacingAndPunctuations = new SpacingAndPunctuations( 128 mContext.getResources()); 129 assertEquals("<S>", NgramContextUtils.getNgramContextFromNthPreviousWord("", 130 spacingAndPunctuations, 1).extractPrevWordsContext()); 131 assertEquals("<S> b", NgramContextUtils.getNgramContextFromNthPreviousWord("a. b ", 132 spacingAndPunctuations, 1).extractPrevWordsContext()); 133 assertEquals("<S> b", NgramContextUtils.getNgramContextFromNthPreviousWord("a? b ", 134 spacingAndPunctuations, 1).extractPrevWordsContext()); 135 assertEquals("<S> b", NgramContextUtils.getNgramContextFromNthPreviousWord("a! b ", 136 spacingAndPunctuations, 1).extractPrevWordsContext()); 137 assertEquals("<S> b", NgramContextUtils.getNgramContextFromNthPreviousWord("a\nb ", 138 spacingAndPunctuations, 1).extractPrevWordsContext()); 139 assertEquals("<S> a b", NgramContextUtils.getNgramContextFromNthPreviousWord("a b ", 140 spacingAndPunctuations, 1).extractPrevWordsContext()); 141 assertFalse(NgramContextUtils 142 .getNgramContextFromNthPreviousWord("a b c d e", spacingAndPunctuations, 1) 143 .extractPrevWordsContext().startsWith("<S>")); 144 } 145 } 146