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