Merge changes I3c1f5ac1,I269c9aa8

* changes:
  Switch code point table
  Test for code point table (dicttool test)
main
Jean Chalard 2014-10-03 07:55:59 +00:00 committed by Android (Google) Code Review
commit fb051c3957
2 changed files with 37 additions and 3 deletions

View File

@ -304,6 +304,39 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
"unigram with various code points")); "unigram with various code points"));
} }
public void testCharacterTableIsPresent() throws IOException, UnsupportedFormatException {
final String[] wordSource = {"words", "used", "for", "testing", "a", "code point", "table"};
final List<String> words = Arrays.asList(wordSource);
final String correctCodePointTable = "eotdsanirfg bclwup";
final String dictName = "codePointTableTest";
final String dictVersion = Long.toString(System.currentTimeMillis());
final String codePointTableAttribute = DictionaryHeader.CODE_POINT_TABLE_KEY;
final File file = new File(dictName);
// Write a test dictionary
final DictEncoder dictEncoder = new Ver2DictEncoder(file,
Ver2DictEncoder.CODE_POINT_TABLE_ON);
final FormatSpec.FormatOptions formatOptions =
new FormatSpec.FormatOptions(
FormatSpec.MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE);
final FusionDictionary sourcedict = new FusionDictionary(new PtNodeArray(),
BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
addUnigrams(words.size(), sourcedict, words, null /* shortcutMap */);
dictEncoder.writeDictionary(sourcedict, formatOptions);
// Read the dictionary
final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(file, 0, file.length(),
DictDecoder.USE_BYTEARRAY);
final DictionaryHeader fileHeader = dictDecoder.readHeader();
// Check if codePointTable is present
assertTrue("codePointTable is not present",
fileHeader.mDictionaryOptions.mAttributes.containsKey(codePointTableAttribute));
final String codePointTable =
fileHeader.mDictionaryOptions.mAttributes.get(codePointTableAttribute);
// Check if codePointTable is correct
assertEquals("codePointTable is incorrect", codePointTable, correctCodePointTable);
}
// Unit test for CharEncoding.readString and CharEncoding.writeString. // Unit test for CharEncoding.readString and CharEncoding.writeString.
public void testCharEncoding() { public void testCharEncoding() {
// the max length of a word in sWords is less than 50. // the max length of a word in sWords is less than 50.

View File

@ -137,10 +137,11 @@ public class Ver2DictEncoder implements DictEncoder {
// Make code point conversion table ordered by occurrence of code points // Make code point conversion table ordered by occurrence of code points
// Version 201 or later have codePointTable // Version 201 or later have codePointTable
final CodePointTable codePointTable; final CodePointTable codePointTable;
if (formatOptions.mVersion >= FormatSpec.MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE) { if (mCodePointTableMode == CODE_POINT_TABLE_OFF || formatOptions.mVersion
codePointTable = makeCodePointTable(dict); < FormatSpec.MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE) {
} else {
codePointTable = new CodePointTable(); codePointTable = new CodePointTable();
} else {
codePointTable = makeCodePointTable(dict);
} }
BinaryDictEncoderUtils.writeDictionaryHeader(mOutStream, dict, formatOptions, BinaryDictEncoderUtils.writeDictionaryHeader(mOutStream, dict, formatOptions,