Ver3DictDecoderTests.java revision 3feacba1eb43fb906f50581df19ff2e468642ca8
13feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada/* 23feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * Copyright (C) 2013 The Android Open Source Project 33feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * 43feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * Licensed under the Apache License, Version 2.0 (the "License"); 53feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * you may not use this file except in compliance with the License. 63feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * You may obtain a copy of the License at 73feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * 83feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * http://www.apache.org/licenses/LICENSE-2.0 93feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * 103feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * Unless required by applicable law or agreed to in writing, software 113feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * distributed under the License is distributed on an "AS IS" BASIS, 123feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * See the License for the specific language governing permissions and 143feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * limitations under the License. 153feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada */ 163feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 173feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadapackage com.android.inputmethod.latin.makedict; 183feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 193feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictInputOutput.FusionDictionaryBufferInterface; 203feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictReader.FusionDictionaryBufferFactory; 213feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictReader.FusionDictionaryBufferFromByteArrayFactory; 223feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictReader.FusionDictionaryBufferFromByteBufferFactory; 233feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 243feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport android.test.AndroidTestCase; 253feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport android.util.Log; 263feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 273feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.File; 283feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.FileOutputStream; 293feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.IOException; 303feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 313feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada/** 323feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada * Unit tests for BinaryDictReader 333feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada */ 343feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadapublic class BinaryDictReaderTests extends AndroidTestCase { 353feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada private static final String TAG = BinaryDictReaderTests.class.getSimpleName(); 363feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 373feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada private final byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 383feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 393feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada // Utilities for testing 403feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void writeDataToFile(final File file) { 413feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada FileOutputStream outStream = null; 423feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 433feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream = new FileOutputStream(file); 443feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream.write(data); 453feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 463feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada fail ("Can't write data to the test file"); 473feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } finally { 483feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada if (outStream != null) { 493feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 503feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream.close(); 513feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 523feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to close the output stream", e); 533feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 543feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 553feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 563feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 573feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 583feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada @SuppressWarnings("null") 593feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void runTestOpenBuffer(final String testName, 603feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada final FusionDictionaryBufferFactory factory) { 613feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada File testFile = null; 623feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 633feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada testFile = File.createTempFile(testName, ".tmp", getContext().getCacheDir()); 643feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 653feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "IOException while the creating temporary file", e); 663feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 673feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 683feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertNotNull(testFile); 693feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada final BinaryDictReader reader = new BinaryDictReader(testFile); 703feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 713feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada reader.openBuffer(factory); 723feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (Exception e) { 733feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to open the buffer", e); 743feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 753feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 763feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada writeDataToFile(testFile); 773feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 783feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 793feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada reader.openBuffer(factory); 803feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (Exception e) { 813feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Raised the exception while opening buffer", e); 823feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 833feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 843feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertEquals(testFile.length(), reader.getBuffer().capacity()); 853feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 863feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 873feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testOpenBufferWithByteBuffer() { 883feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestOpenBuffer("testOpenBufferWithByteBuffer", 893feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada new FusionDictionaryBufferFromByteBufferFactory()); 903feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 913feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 923feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testOpenBufferWithByteArray() { 933feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestOpenBuffer("testOpenBufferWithByteArray", 943feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada new FusionDictionaryBufferFromByteArrayFactory()); 953feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 963feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 973feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada @SuppressWarnings("null") 983feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void runTestGetBuffer(final String testName, 993feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada final FusionDictionaryBufferFactory factory) { 1003feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada File testFile = null; 1013feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 1023feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada testFile = File.createTempFile(testName, ".tmp", getContext().getCacheDir()); 1033feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 1043feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "IOException while the creating temporary file", e); 1053feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1063feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1073feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada final BinaryDictReader reader = new BinaryDictReader(testFile); 1083feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1093feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada // the default return value of getBuffer() must be null. 1103feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertNull("the default return value of getBuffer() is not null", reader.getBuffer()); 1113feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1123feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada writeDataToFile(testFile); 1133feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertTrue(testFile.exists()); 1143feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.d(TAG, "file length = " + testFile.length()); 1153feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1163feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada FusionDictionaryBufferInterface buffer = null; 1173feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 1183feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada buffer = reader.openAndGetBuffer(factory); 1193feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 1203feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to open and get the buffer", e); 1213feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1223feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertNotNull("the buffer must not be null", buffer); 1233feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1243feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada for (int i = 0; i < data.length; ++i) { 1253feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertEquals(data[i], buffer.readUnsignedByte()); 1263feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1273feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1283feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1293feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testGetBufferWithByteBuffer() { 1303feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestGetBuffer("testGetBufferWithByteBuffer", 1313feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada new FusionDictionaryBufferFromByteBufferFactory()); 1323feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1333feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1343feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testGetBufferWithByteArray() { 1353feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestGetBuffer("testGetBufferWithByteArray", 1363feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada new FusionDictionaryBufferFromByteArrayFactory()); 1373feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1383feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada} 139