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 1977bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer; 20065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.DictDecoder.DictionaryBufferFactory; 21065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.DictDecoder.DictionaryBufferFromByteArrayFactory; 22065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.DictDecoder. 2377bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada DictionaryBufferFromReadOnlyByteBufferFactory; 24065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanadaimport com.android.inputmethod.latin.makedict.DictDecoder. 2577bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada DictionaryBufferFromWritableByteBufferFactory; 263feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 273feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport android.test.AndroidTestCase; 283feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport android.util.Log; 293feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 303feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.File; 313feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.FileOutputStream; 323feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanadaimport java.io.IOException; 333feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 343feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada/** 35112257e40f6f6d914fac1c3a45f39a770693b386Yuichiro Hanada * Unit tests for Ver3DictDecoder 363feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada */ 37112257e40f6f6d914fac1c3a45f39a770693b386Yuichiro Hanadapublic class Ver3DictDecoderTests extends AndroidTestCase { 38112257e40f6f6d914fac1c3a45f39a770693b386Yuichiro Hanada private static final String TAG = Ver3DictDecoderTests.class.getSimpleName(); 393feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 403feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada private final byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 413feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 423feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada // Utilities for testing 433feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void writeDataToFile(final File file) { 443feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada FileOutputStream outStream = null; 453feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 463feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream = new FileOutputStream(file); 473feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream.write(data); 483feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 493feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada fail ("Can't write data to the test file"); 503feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } finally { 513feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada if (outStream != null) { 523feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 533feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada outStream.close(); 543feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 553feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to close the output stream", e); 563feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 573feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 583feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 593feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 603feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 613feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada @SuppressWarnings("null") 62065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanada public void runTestOpenBuffer(final String testName, final DictionaryBufferFactory factory) { 633feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada File testFile = null; 643feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 653feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada testFile = File.createTempFile(testName, ".tmp", getContext().getCacheDir()); 663feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 673feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "IOException while the creating temporary file", e); 683feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 693feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 703feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertNotNull(testFile); 71e9a10ff0f026b5ec458f116afc7a75806574cbcdYuichiro Hanada final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile, factory); 723feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 73e9a10ff0f026b5ec458f116afc7a75806574cbcdYuichiro Hanada dictDecoder.openDictBuffer(); 743feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (Exception e) { 753feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to open the buffer", e); 763feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 773feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 783feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada writeDataToFile(testFile); 793feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 803feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 81e9a10ff0f026b5ec458f116afc7a75806574cbcdYuichiro Hanada dictDecoder.openDictBuffer(); 823feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (Exception e) { 833feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Raised the exception while opening buffer", e); 843feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 853feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 8677bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada assertEquals(testFile.length(), dictDecoder.getDictBuffer().capacity()); 873feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 883feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 893feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testOpenBufferWithByteBuffer() { 903feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestOpenBuffer("testOpenBufferWithByteBuffer", 9177bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromReadOnlyByteBufferFactory()); 923feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 933feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 943feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testOpenBufferWithByteArray() { 953feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestOpenBuffer("testOpenBufferWithByteArray", 9677bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromByteArrayFactory()); 973feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 983feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 99bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada public void testOpenBufferWithWritableByteBuffer() { 100bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada runTestOpenBuffer("testOpenBufferWithWritableByteBuffer", 10177bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromWritableByteBufferFactory()); 102bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada } 103bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada 1043feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada @SuppressWarnings("null") 105065aad9501ae446aee5d73450c01dc21b8f3242aYuichiro Hanada public void runTestGetBuffer(final String testName, final DictionaryBufferFactory factory) { 1063feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada File testFile = null; 1073feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 1083feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada testFile = File.createTempFile(testName, ".tmp", getContext().getCacheDir()); 1093feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 1103feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "IOException while the creating temporary file", e); 1113feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1123feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 113e9a10ff0f026b5ec458f116afc7a75806574cbcdYuichiro Hanada final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile, factory); 1143feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1153feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada // the default return value of getBuffer() must be null. 11677bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada assertNull("the default return value of getBuffer() is not null", 11777bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada dictDecoder.getDictBuffer()); 1183feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1193feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada writeDataToFile(testFile); 1203feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada assertTrue(testFile.exists()); 1213feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.d(TAG, "file length = " + testFile.length()); 1223feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 12377bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada DictBuffer dictBuffer = null; 1243feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada try { 125e9a10ff0f026b5ec458f116afc7a75806574cbcdYuichiro Hanada dictBuffer = dictDecoder.openAndGetDictBuffer(); 1263feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } catch (IOException e) { 1273feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada Log.e(TAG, "Failed to open and get the buffer", e); 1283feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 12977bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada assertNotNull("the buffer must not be null", dictBuffer); 1303feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1313feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada for (int i = 0; i < data.length; ++i) { 13277bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada assertEquals(data[i], dictBuffer.readUnsignedByte()); 1333feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1343feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1353feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1363feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testGetBufferWithByteBuffer() { 1373feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestGetBuffer("testGetBufferWithByteBuffer", 13877bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromReadOnlyByteBufferFactory()); 1393feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 1403feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada 1413feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada public void testGetBufferWithByteArray() { 1423feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada runTestGetBuffer("testGetBufferWithByteArray", 14377bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromByteArrayFactory()); 1443feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada } 145bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada 146bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada public void testGetBufferWithWritableByteBuffer() { 147bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada runTestGetBuffer("testGetBufferWithWritableByteBuffer", 14877bce05e6f6e3a988253f9305ae22e51f56f5b1aYuichiro Hanada new DictionaryBufferFromWritableByteBufferFactory()); 149bbc8a930f706d16e45dce2376ea388a0fd74bb7aYuichiro Hanada } 1503feacba1eb43fb906f50581df19ff2e468642ca8Yuichiro Hanada} 151