Add @UsedForTesting and @ExternallyReferenced annotations

Bug: 7268357
Change-Id: I0b7e0c19f04af9ae30874d0a4c26ad81bc80be8c
main
Tadashi G. Takaoka 2012-10-03 17:36:45 +09:00
parent 243c1fecc6
commit 15f6d4ae34
23 changed files with 116 additions and 117 deletions

View File

@ -1,64 +1,11 @@
-keep class com.android.inputmethod.latin.BinaryDictionary { # Keep classes and methods that have the @UsedForTesting annotation
int mDictLength; -keep @com.android.inputmethod.annotations.UsedForTesting class *
<init>(...); -keepclassmembers class * {
@com.android.inputmethod.annotations.UsedForTesting *;
} }
-keep class com.android.inputmethod.keyboard.ProximityInfo { # Keep classes and methods that have the @ExternallyReferenced annotation
<init>(com.android.inputmethod.keyboard.ProximityInfo); -keep @com.android.inputmethod.annotations.ExternallyReferenced class *
-keepclassmembers class * {
@com.android.inputmethod.annotations.ExternallyReferenced *;
} }
-keep class com.android.inputmethod.latin.Suggest {
<init>(...);
com.android.inputmethod.latin.SuggestedWords getSuggestions(...);
}
-keep class com.android.inputmethod.latin.AutoCorrection {
java.lang.CharSequence getAutoCorrectionWord();
}
-keep class com.android.inputmethod.latin.Utils {
boolean equalsIgnoreCase(...);
}
-keep class com.android.inputmethod.latin.InputPointers {
*;
}
-keep class com.android.inputmethod.latin.ResizableIntArray {
*;
}
-keep class com.android.inputmethod.latin.spellcheck.SpellCheckerSettingsFragment {
*;
}
-keep class com.android.inputmethod.keyboard.MainKeyboardView {
# Keep getter/setter methods for ObjectAnimator
int getLanguageOnSpacebarAnimAlpha();
void setLanguageOnSpacebarAnimAlpha(int);
int getAltCodeKeyWhileTypingAnimAlpha();
void setAltCodeKeyWhileTypingAnimAlpha(int);
}
-keep class com.android.inputmethod.keyboard.MoreKeysKeyboard$Builder$MoreKeysKeyboardParams {
<init>(...);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.android.inputmethod.research.ResearchLogger {
void flush();
void publishCurrentLogUnit(...);
}
-keep class com.android.inputmethod.keyboard.KeyboardLayoutSet$Builder {
void setTouchPositionCorrectionEnabled(...);
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.v4.**
-dontwarn android.support.v13.**

View File

@ -0,0 +1,24 @@
/*
* 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.annotations;
/**
* Denotes that the class, method or field should not be eliminated by ProGuard,
* because it is externally referenced. (See proguard.flags)
*/
public @interface ExternallyReferenced {
}

View File

@ -0,0 +1,24 @@
/*
* 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.annotations;
/**
* Denotes that the class, method or field should not be eliminated by ProGuard,
* so that unit tests can access it. (See proguard.flags)
*/
public @interface UsedForTesting {
}

View File

@ -34,6 +34,7 @@ import android.util.Xml;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.EditorInfoCompatUtils; import com.android.inputmethod.compat.EditorInfoCompatUtils;
import com.android.inputmethod.keyboard.internal.KeyboardBuilder; import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
import com.android.inputmethod.keyboard.internal.KeyboardParams; import com.android.inputmethod.keyboard.internal.KeyboardParams;
@ -265,7 +266,7 @@ public final class KeyboardLayoutSet {
return this; return this;
} }
// For test only @UsedForTesting
public void disableTouchPositionCorrectionDataForTest() { public void disableTouchPositionCorrectionDataForTest() {
mParams.mDisableTouchPositionCorrectionDataForTest = true; mParams.mDisableTouchPositionCorrectionDataForTest = true;
} }

View File

@ -41,6 +41,7 @@ import android.widget.PopupWindow;
import com.android.inputmethod.accessibility.AccessibilityUtils; import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy; import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
import com.android.inputmethod.annotations.ExternallyReferenced;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy; import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy; import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.keyboard.internal.KeyDrawParams; import com.android.inputmethod.keyboard.internal.KeyDrawParams;
@ -417,20 +418,23 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
return animator; return animator;
} }
// Getter/setter methods for {@link ObjectAnimator}. @ExternallyReferenced
public int getLanguageOnSpacebarAnimAlpha() { public int getLanguageOnSpacebarAnimAlpha() {
return mLanguageOnSpacebarAnimAlpha; return mLanguageOnSpacebarAnimAlpha;
} }
@ExternallyReferenced
public void setLanguageOnSpacebarAnimAlpha(final int alpha) { public void setLanguageOnSpacebarAnimAlpha(final int alpha) {
mLanguageOnSpacebarAnimAlpha = alpha; mLanguageOnSpacebarAnimAlpha = alpha;
invalidateKey(mSpaceKey); invalidateKey(mSpaceKey);
} }
@ExternallyReferenced
public int getAltCodeKeyWhileTypingAnimAlpha() { public int getAltCodeKeyWhileTypingAnimAlpha() {
return mAltCodeKeyWhileTypingAnimAlpha; return mAltCodeKeyWhileTypingAnimAlpha;
} }
@ExternallyReferenced
public void setAltCodeKeyWhileTypingAnimAlpha(final int alpha) { public void setAltCodeKeyWhileTypingAnimAlpha(final int alpha) {
mAltCodeKeyWhileTypingAnimAlpha = alpha; mAltCodeKeyWhileTypingAnimAlpha = alpha;
updateAltCodeKeyWhileTyping(); updateAltCodeKeyWhileTyping();

View File

@ -20,6 +20,7 @@ import android.graphics.Paint;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.view.View; import android.view.View;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.internal.KeyboardBuilder; import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.keyboard.internal.KeyboardParams; import com.android.inputmethod.keyboard.internal.KeyboardParams;
@ -39,7 +40,7 @@ public final class MoreKeysKeyboard extends Keyboard {
return mDefaultKeyCoordX; return mDefaultKeyCoordX;
} }
/* package for test */ @UsedForTesting
static class MoreKeysKeyboardParams extends KeyboardParams { static class MoreKeysKeyboardParams extends KeyboardParams {
public boolean mIsFixedOrder; public boolean mIsFixedOrder;
/* package */int mTopRowAdjustment; /* package */int mTopRowAdjustment;

View File

@ -27,6 +27,7 @@ import android.util.TypedValue;
import android.util.Xml; import android.util.Xml;
import android.view.InflateException; import android.view.InflateException;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.keyboard.KeyboardId;
@ -177,7 +178,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
return this; return this;
} }
// For test only @UsedForTesting
public void disableTouchPositionCorrectionDataForTest() { public void disableTouchPositionCorrectionDataForTest() {
mParams.mTouchPositionCorrection.setEnabled(false); mParams.mTouchPositionCorrection.setEnabled(false);
} }

View File

@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.internal;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
@ -64,7 +65,7 @@ public final class KeyboardTextsSet {
loadStringResourcesInternal(context, RESOURCE_NAMES, R.string.english_ime_name); loadStringResourcesInternal(context, RESOURCE_NAMES, R.string.english_ime_name);
} }
/* package for test */ @UsedForTesting
void loadStringResourcesInternal(Context context, final String[] resourceNames, void loadStringResourcesInternal(Context context, final String[] resourceNames,
int referenceId) { int referenceId) {
final Resources res = context.getResources(); final Resources res = context.getResources();

View File

@ -16,6 +16,7 @@
package com.android.inputmethod.keyboard.internal; package com.android.inputmethod.keyboard.internal;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.LatinImeLogger;
public final class TouchPositionCorrection { public final class TouchPositionCorrection {
@ -66,7 +67,7 @@ public final class TouchPositionCorrection {
} }
} }
// For test only @UsedForTesting
public void setEnabled(final boolean enabled) { public void setEnabled(final boolean enabled) {
mEnabled = enabled; mEnabled = enabled;
} }

View File

@ -81,7 +81,6 @@ public final class BinaryDictionary extends Dictionary {
/** /**
* Constructor for the binary dictionary. This is supposed to be called from the * Constructor for the binary dictionary. This is supposed to be called from the
* dictionary factory. * dictionary factory.
* All implementations should pass null into flagArray, except for testing purposes.
* @param context the context to access the environment from. * @param context the context to access the environment from.
* @param filename the name of the file to read through native code. * @param filename the name of the file to read through native code.
* @param offset the offset of the dictionary data within the file. * @param offset the offset of the dictionary data within the file.
@ -174,7 +173,7 @@ public final class BinaryDictionary extends Dictionary {
return suggestions; return suggestions;
} }
/* package for test */ boolean isValidDictionary() { public boolean isValidDictionary() {
return mNativeDict != 0; return mNativeDict != 0;
} }

View File

@ -267,8 +267,7 @@ public class ExpandableDictionary extends Dictionary {
// This reloads the dictionary if required, and returns whether it's currently updating its // This reloads the dictionary if required, and returns whether it's currently updating its
// contents or not. // contents or not.
// @VisibleForTesting private boolean reloadDictionaryIfRequired() {
boolean reloadDictionaryIfRequired() {
synchronized (mUpdatingLock) { synchronized (mUpdatingLock) {
// If we need to update, start off a background task // If we need to update, start off a background task
if (mRequiresReload) startDictionaryLoadingTaskLocked(); if (mRequiresReload) startDictionaryLoadingTaskLocked();
@ -613,25 +612,6 @@ public class ExpandableDictionary extends Dictionary {
} }
} }
/**
* Used for testing purposes and in the spell checker
* This function will wait for loading from database to be done
*/
void waitForDictionaryLoading() {
while (mUpdatingDictionary) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
//
}
}
}
protected final void blockingReloadDictionaryIfRequired() {
reloadDictionaryIfRequired();
waitForDictionaryLoading();
}
// Local to reverseLookUp, but do not allocate each time. // Local to reverseLookUp, but do not allocate each time.
private final char[] mLookedUpString = new char[BinaryDictionary.MAX_WORD_LENGTH]; private final char[] mLookedUpString = new char[BinaryDictionary.MAX_WORD_LENGTH];

View File

@ -16,6 +16,8 @@
package com.android.inputmethod.latin; package com.android.inputmethod.latin;
import com.android.inputmethod.annotations.UsedForTesting;
// TODO: This class is not thread-safe. // TODO: This class is not thread-safe.
public final class InputPointers { public final class InputPointers {
private final int mDefaultCapacity; private final int mDefaultCapacity;
@ -39,7 +41,8 @@ public final class InputPointers {
mTimes.add(index, time); mTimes.add(index, time);
} }
public void addPointer(int x, int y, int pointerId, int time) { @UsedForTesting
void addPointer(int x, int y, int pointerId, int time) {
mXCoordinates.add(x); mXCoordinates.add(x);
mYCoordinates.add(y); mYCoordinates.add(y);
mPointerIds.add(pointerId); mPointerIds.add(pointerId);
@ -66,7 +69,8 @@ public final class InputPointers {
* @param startPos the starting index of the pointers in {@code src}. * @param startPos the starting index of the pointers in {@code src}.
* @param length the number of pointers to be appended. * @param length the number of pointers to be appended.
*/ */
public void append(InputPointers src, int startPos, int length) { @UsedForTesting
void append(InputPointers src, int startPos, int length) {
if (length == 0) { if (length == 0) {
return; return;
} }

View File

@ -60,6 +60,7 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.accessibility.AccessibilityUtils; import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy; import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.CompatUtils; import com.android.inputmethod.compat.CompatUtils;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper; import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodServiceCompatUtils; import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
@ -132,14 +133,14 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
private View mKeyPreviewBackingView; private View mKeyPreviewBackingView;
private View mSuggestionsContainer; private View mSuggestionsContainer;
private SuggestionStripView mSuggestionStripView; private SuggestionStripView mSuggestionStripView;
/* package for tests */ Suggest mSuggest; @UsedForTesting Suggest mSuggest;
private CompletionInfo[] mApplicationSpecifiedCompletions; private CompletionInfo[] mApplicationSpecifiedCompletions;
private ApplicationInfo mTargetApplicationInfo; private ApplicationInfo mTargetApplicationInfo;
private InputMethodManagerCompatWrapper mImm; private InputMethodManagerCompatWrapper mImm;
private Resources mResources; private Resources mResources;
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
/* package for tests */ final KeyboardSwitcher mKeyboardSwitcher; @UsedForTesting final KeyboardSwitcher mKeyboardSwitcher;
private final SubtypeSwitcher mSubtypeSwitcher; private final SubtypeSwitcher mSubtypeSwitcher;
private boolean mShouldSwitchToLastSubtype = true; private boolean mShouldSwitchToLastSubtype = true;
@ -422,7 +423,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
} }
// Has to be package-visible for unit tests // Has to be package-visible for unit tests
/* package for test */ @UsedForTesting
void loadSettings() { void loadSettings() {
// Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged() // Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged()
// is not guaranteed. It may even be called at the same time on a different thread. // is not guaranteed. It may even be called at the same time on a different thread.
@ -1848,7 +1849,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// TODO: make this private // TODO: make this private
// Outside LatinIME, only used by the test suite. // Outside LatinIME, only used by the test suite.
/* package for tests */ @UsedForTesting
boolean isShowingPunctuationList() { boolean isShowingPunctuationList() {
if (mSuggestionStripView == null) return false; if (mSuggestionStripView == null) return false;
return mCurrentSettings.mSuggestPuncList == mSuggestionStripView.getSuggestions(); return mCurrentSettings.mSuggestPuncList == mSuggestionStripView.getSuggestions();
@ -2232,7 +2233,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// TODO: Make this private // TODO: Make this private
// Outside LatinIME, only used by the {@link InputTestsBase} test suite. // Outside LatinIME, only used by the {@link InputTestsBase} test suite.
/* package for test */ @UsedForTesting
void loadKeyboard() { void loadKeyboard() {
// When the device locale is changed in SetupWizard etc., this method may get called via // When the device locale is changed in SetupWizard etc., this method may get called via
// onConfigurationChanged before SoftInputWindow is shown. // onConfigurationChanged before SoftInputWindow is shown.

View File

@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
@ -71,7 +72,8 @@ public final class Suggest {
mLocale = locale; mLocale = locale;
} }
/* package for test */ Suggest(final Context context, final File dictionary, @UsedForTesting
Suggest(final Context context, final File dictionary,
final long startOffset, final long length, final Locale locale) { final long startOffset, final long length, final Locale locale) {
final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary, final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary,
startOffset, length /* useFullEditDistance */, false, locale); startOffset, length /* useFullEditDistance */, false, locale);

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.util.Log; import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.makedict.BinaryDictIOUtils; import com.android.inputmethod.latin.makedict.BinaryDictIOUtils;
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput;
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface;
@ -129,7 +130,8 @@ public final class UserHistoryDictIOUtils {
/** /**
* Constructs a new FusionDictionary from BigramDictionaryInterface. * Constructs a new FusionDictionary from BigramDictionaryInterface.
*/ */
/* packages for test */ static FusionDictionary constructFusionDictionary( @UsedForTesting
static FusionDictionary constructFusionDictionary(
final BigramDictionaryInterface dict, final UserHistoryDictionaryBigramList bigrams) { final BigramDictionaryInterface dict, final UserHistoryDictionaryBigramList bigrams) {
final FusionDictionary fusionDict = new FusionDictionary(new Node(), final FusionDictionary fusionDict = new FusionDictionary(new Node(),
new FusionDictionary.DictionaryOptions(new HashMap<String, String>(), false, new FusionDictionary.DictionaryOptions(new HashMap<String, String>(), false,
@ -193,7 +195,8 @@ public final class UserHistoryDictIOUtils {
/** /**
* Adds all unigrams and bigrams in maps to OnAddWordListener. * Adds all unigrams and bigrams in maps to OnAddWordListener.
*/ */
/* package for test */ static void addWordsFromWordMap(final Map<Integer, String> unigrams, @UsedForTesting
static void addWordsFromWordMap(final Map<Integer, String> unigrams,
final Map<Integer, Integer> frequencies, final Map<Integer, Integer> frequencies,
final Map<Integer, ArrayList<PendingAttribute>> bigrams, final OnAddWordListener to) { final Map<Integer, ArrayList<PendingAttribute>> bigrams, final OnAddWordListener to) {
for (Map.Entry<Integer, String> entry : unigrams.entrySet()) { for (Map.Entry<Integer, String> entry : unigrams.entrySet()) {

View File

@ -21,6 +21,7 @@ import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.UserHistoryDictIOUtils.BigramDictionaryInterface; import com.android.inputmethod.latin.UserHistoryDictIOUtils.BigramDictionaryInterface;
@ -75,7 +76,7 @@ public final class UserHistoryDictionary extends ExpandableDictionary {
private final SharedPreferences mPrefs; private final SharedPreferences mPrefs;
// Should always be false except when we use this class for test // Should always be false except when we use this class for test
/* package for test */ boolean isTest = false; @UsedForTesting boolean isTest = false;
private static final ConcurrentHashMap<String, SoftReference<UserHistoryDictionary>> private static final ConcurrentHashMap<String, SoftReference<UserHistoryDictionary>>
sLangDictCache = CollectionUtils.newConcurrentHashMap(); sLangDictCache = CollectionUtils.newConcurrentHashMap();
@ -390,6 +391,7 @@ public final class UserHistoryDictionary extends ExpandableDictionary {
} }
} }
@UsedForTesting
void forceAddWordForTest(final String word1, final String word2, final boolean isValid) { void forceAddWordForTest(final String word1, final String word2, final boolean isValid) {
mBigramListLock.lock(); mBigramListLock.lock();
try { try {

View File

@ -16,6 +16,7 @@
package com.android.inputmethod.latin.makedict; package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.CharEncoding; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.CharEncoding;
import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface;
@ -167,6 +168,7 @@ public final class BinaryDictIOUtils {
* @throws IOException * @throws IOException
* @throws UnsupportedFormatException * @throws UnsupportedFormatException
*/ */
@UsedForTesting
public static int getTerminalPosition(final FusionDictionaryBufferInterface buffer, public static int getTerminalPosition(final FusionDictionaryBufferInterface buffer,
final String word) throws IOException, UnsupportedFormatException { final String word) throws IOException, UnsupportedFormatException {
if (word == null) return FormatSpec.NOT_VALID_WORD; if (word == null) return FormatSpec.NOT_VALID_WORD;
@ -254,6 +256,7 @@ public final class BinaryDictIOUtils {
* @throws IOException * @throws IOException
* @throws UnsupportedFormatException * @throws UnsupportedFormatException
*/ */
@UsedForTesting
public static void deleteWord(final FusionDictionaryBufferInterface buffer, public static void deleteWord(final FusionDictionaryBufferInterface buffer,
final String word) throws IOException, UnsupportedFormatException { final String word) throws IOException, UnsupportedFormatException {
buffer.position(0); buffer.position(0);
@ -706,6 +709,8 @@ public final class BinaryDictIOUtils {
* @throws UnsupportedFormatException * @throws UnsupportedFormatException
*/ */
// TODO: Support batch insertion. // TODO: Support batch insertion.
// TODO: Remove @UsedForTesting once UserHistoryDictionary is implemented by BinaryDictionary.
@UsedForTesting
public static void insertWord(final FusionDictionaryBufferInterface buffer, public static void insertWord(final FusionDictionaryBufferInterface buffer,
final OutputStream destination, final String word, final int frequency, final OutputStream destination, final String word, final int frequency,
final ArrayList<WeightedString> bigramStrings, final ArrayList<WeightedString> bigramStrings,
@ -959,6 +964,7 @@ public final class BinaryDictIOUtils {
* @throws IOException * @throws IOException
* @throws UnsupportedFormatException * @throws UnsupportedFormatException
*/ */
@UsedForTesting
public static CharGroupInfo findWordFromBuffer(final FusionDictionaryBufferInterface buffer, public static CharGroupInfo findWordFromBuffer(final FusionDictionaryBufferInterface buffer,
final String word) throws IOException, UnsupportedFormatException { final String word) throws IOException, UnsupportedFormatException {
int position = getTerminalPosition(buffer, word); int position = getTerminalPosition(buffer, word);

View File

@ -16,6 +16,7 @@
package com.android.inputmethod.latin.makedict; package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.makedict.FormatSpec.FileHeader; import com.android.inputmethod.latin.makedict.FormatSpec.FileHeader;
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions; import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup; import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup;
@ -1651,6 +1652,7 @@ public final class BinaryDictInputOutput {
* @param dict an optional dictionary to add words to, or null. * @param dict an optional dictionary to add words to, or null.
* @return the created (or merged) dictionary. * @return the created (or merged) dictionary.
*/ */
@UsedForTesting
public static FusionDictionary readDictionaryBinary( public static FusionDictionary readDictionaryBinary(
final FusionDictionaryBufferInterface buffer, final FusionDictionary dict) final FusionDictionaryBufferInterface buffer, final FusionDictionary dict)
throws IOException, UnsupportedFormatException { throws IOException, UnsupportedFormatException {

View File

@ -16,6 +16,7 @@
package com.android.inputmethod.latin.spellcheck; package com.android.inputmethod.latin.spellcheck;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
@ -23,7 +24,7 @@ import com.android.inputmethod.latin.Constants;
import java.util.TreeMap; import java.util.TreeMap;
public final class SpellCheckerProximityInfo { public final class SpellCheckerProximityInfo {
/* public for test */ @UsedForTesting
final public static int NUL = Constants.NOT_A_CODE; final public static int NUL = Constants.NOT_A_CODE;
// This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside // This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside

View File

@ -16,14 +16,18 @@
LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LATINIME_CORE_SOURCE_DIRECTORY := ../../java/src/com/android/inputmethod/latin LATINIME_BASE_SOURCE_DIRECTORY := ../../java/src/com/android/inputmethod
LATINIME_CORE_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/latin
LATINIME_ANNOTATIONS_SOURCE_DIRECTORY := $(LATINIME_BASE_SOURCE_DIRECTORY)/annotations
MAKEDICT_CORE_SOURCE_DIRECTORY := $(LATINIME_CORE_SOURCE_DIRECTORY)/makedict MAKEDICT_CORE_SOURCE_DIRECTORY := $(LATINIME_CORE_SOURCE_DIRECTORY)/makedict
LOCAL_MAIN_SRC_FILES := $(call all-java-files-under,$(MAKEDICT_CORE_SOURCE_DIRECTORY)) LOCAL_MAIN_SRC_FILES := $(call all-java-files-under,$(MAKEDICT_CORE_SOURCE_DIRECTORY))
LOCAL_TOOL_SRC_FILES := $(call all-java-files-under,src) LOCAL_TOOL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_ANNOTATIONS_SRC_FILES := $(call all-java-files-under,$(LATINIME_ANNOTATIONS_SOURCE_DIRECTORY))
LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \ LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
$(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \ $(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
$(call all-java-files-under,tests) \ $(call all-java-files-under,tests) \
$(LOCAL_ANNOTATIONS_SRC_FILES) \
$(LATINIME_CORE_SOURCE_DIRECTORY)/Constants.java $(LATINIME_CORE_SOURCE_DIRECTORY)/Constants.java
LOCAL_JAR_MANIFEST := etc/manifest.txt LOCAL_JAR_MANIFEST := etc/manifest.txt

View File

@ -19,24 +19,15 @@ package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions; import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
import com.android.inputmethod.latin.makedict.FusionDictionary.Node; import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
import junit.framework.TestCase;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import junit.framework.TestCase;
/** /**
* Unit tests for BinaryDictInputOutput. * Unit tests for BinaryDictInputOutput.
*/ */
public class BinaryDictInputOutputTest extends TestCase { public class BinaryDictInputOutputTest extends TestCase {
public void setUp() throws Exception {
super.setUp();
}
public void tearDown() throws Exception {
super.tearDown();
}
// Test the flattened array contains the expected number of nodes, and // Test the flattened array contains the expected number of nodes, and
// that it does not contain any duplicates. // that it does not contain any duplicates.
public void testFlattenNodes() { public void testFlattenNodes() {
@ -55,5 +46,4 @@ public class BinaryDictInputOutputTest extends TestCase {
assertFalse("Flattened array contained the same node twice", result.contains(n)); assertFalse("Flattened array contained the same node twice", result.contains(n));
} }
} }
} }

View File

@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
java -classpath ${ANDROID_HOST_OUT}/framework/junit.jar:${ANDROID_HOST_OUT}/../common/obj/JAVA_LIBRARIES/dicttool_intermediates/classes junit.textui.TestRunner com.android.inputmethod.latin.makedict.BinaryDictInputOutputTest java -classpath ${ANDROID_HOST_OUT}/framework/junit.jar:${ANDROID_HOST_OUT}/framework/dicttool_aosp.jar junit.textui.TestRunner com.android.inputmethod.latin.makedict.BinaryDictInputOutputTest

View File

@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.internal;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import com.android.inputmethod.annotations.VisibleForTesting;
import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils;
import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.R;
@ -64,7 +65,7 @@ public final class KeyboardTextsSet {
loadStringResourcesInternal(context, RESOURCE_NAMES, R.string.english_ime_name); loadStringResourcesInternal(context, RESOURCE_NAMES, R.string.english_ime_name);
} }
/* package for test */ @VisibleForTesting
void loadStringResourcesInternal(Context context, final String[] resourceNames, void loadStringResourcesInternal(Context context, final String[] resourceNames,
int referenceId) { int referenceId) {
final Resources res = context.getResources(); final Resources res = context.getResources();