Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b7acd1d authored by Jean Chalard's avatar Jean Chalard
Browse files

Add args to dicttool test.

Change-Id: I0667e0a5a6f6db3964cfcca5c8f083b9ceb41a2e
parent 8142a7b6
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -44,9 +44,10 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
    private static final String TAG = BinaryDictIOUtilsTests.class.getSimpleName();
    private static final FormatSpec.FormatOptions FORMAT_OPTIONS =
            new FormatSpec.FormatOptions(3, true);
    private static final int MAX_UNIGRAMS = 1500;

    private static final ArrayList<String> sWords = CollectionUtils.newArrayList();
    public static final int DEFAULT_MAX_UNIGRAMS = 1500;
    private final int mMaxUnigrams;

    private static final String[] CHARACTERS = {
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
@@ -57,15 +58,17 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
    };

    public BinaryDictIOUtilsTests() {
        this(System.currentTimeMillis());
        // 1500 is the default max unigrams
        this(System.currentTimeMillis(), DEFAULT_MAX_UNIGRAMS);
    }

    public BinaryDictIOUtilsTests(final long seed) {
    public BinaryDictIOUtilsTests(final long seed, final int maxUnigrams) {
        super();
        Log.d(TAG, "Seed for test is " + seed);
        Log.d(TAG, "Seed for test is " + seed + ", maxUnigrams is " + maxUnigrams);
        mMaxUnigrams = maxUnigrams;
        final Random random = new Random(seed);
        sWords.clear();
        for (int i = 0; i < MAX_UNIGRAMS; ++i) {
        for (int i = 0; i < maxUnigrams; ++i) {
            sWords.add(generateWord(random.nextInt()));
        }
    }
@@ -395,6 +398,6 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {

        Log.d(TAG, "max = " + ((double)maxTimeToInsert/1000000) + " ms.");
        Log.d(TAG, "min = " + ((double)minTimeToInsert/1000000) + " ms.");
        Log.d(TAG, "avg = " + ((double)sum/MAX_UNIGRAMS/1000000) + " ms.");
        Log.d(TAG, "avg = " + ((double)sum/mMaxUnigrams/1000000) + " ms.");
    }
}
+57 −10
Original line number Diff line number Diff line
@@ -19,33 +19,80 @@ package com.android.inputmethod.latin.dicttool;
import com.android.inputmethod.latin.makedict.BinaryDictIOUtilsTests;
import com.android.inputmethod.latin.makedict.BinaryDictInputOutputTest;
import com.android.inputmethod.latin.makedict.FusionDictionaryTest;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * Dicttool command implementing self-tests.
 */
public class Test extends Dicttool.Command {
    public static final String COMMAND = "test";
    private long mSeed = System.currentTimeMillis();
    private int mMaxUnigrams = BinaryDictIOUtilsTests.DEFAULT_MAX_UNIGRAMS;

    private static final Class<?>[] sClassesToTest = {
        BinaryDictOffdeviceUtilsTests.class,
        FusionDictionaryTest.class,
        BinaryDictInputOutputTest.class,
        BinaryDictIOUtilsTests.class
    };
    private ArrayList<Method> mAllTestMethods = new ArrayList<Method>();
    private ArrayList<String> mUsedTestMethods = new ArrayList<String>();

    public Test() {
        for (final Class<?> c : sClassesToTest) {
            for (final Method m : c.getDeclaredMethods()) {
                if (m.getName().startsWith("test") && Void.TYPE == m.getReturnType()
                        && 0 == m.getParameterTypes().length) {
                    mAllTestMethods.add(m);
                }
            }
        }
    }

    @Override
    public String getHelp() {
        return "test";
        final StringBuilder s = new StringBuilder("test [-s seed] [-m maxUnigrams] [testName...]\n"
                + "If seed is not specified, the current time is used.\nTest list is:\n");
        for (final Method m : mAllTestMethods) {
            s.append("  ");
            s.append(m.getName());
            s.append("\n");
        }
        return s.toString();
    }

    @Override
    public void run() throws IOException, UnsupportedFormatException {
        test();
    public void run() throws IllegalAccessException, InstantiationException,
            InvocationTargetException {
        int i = 0;
        while (i < mArgs.length) {
            final String arg = mArgs[i++];
            if ("-s".equals(arg)) {
                mSeed = Long.parseLong(mArgs[i++]);
            } else if ("-m".equals(arg)) {
                mMaxUnigrams = Integer.parseInt(mArgs[i++]);
            } else {
                mUsedTestMethods.add(arg);
            }
        }
        runChosenTests();
    }

    private void test() throws IOException, UnsupportedFormatException {
        new BinaryDictOffdeviceUtilsTests().testGetRawDictWorks();
        new FusionDictionaryTest().testFusion();
        new BinaryDictInputOutputTest().testFlattenNodes();
        new BinaryDictIOUtilsTests().testRandomWords();
    private void runChosenTests() throws IllegalAccessException, InstantiationException,
            InvocationTargetException {
        for (final Method m : mAllTestMethods) {
            final Class<?> declaringClass = m.getDeclaringClass();
            if (!mUsedTestMethods.isEmpty() && !mUsedTestMethods.contains(m.getName())) continue;
            final Object instance;
            if (BinaryDictIOUtilsTests.class == declaringClass) {
                instance = new BinaryDictIOUtilsTests(mSeed, mMaxUnigrams);
            } else {
                instance = declaringClass.newInstance();
            }
            m.invoke(instance);
        }
    }
}