diff --git a/tools/dicttool/Android.mk b/tools/dicttool/Android.mk
index 666887a2e1efabd9c7ba478f9cc73095329a14c2..d3bff868867e23e77b4996b267d01d4ba7dd596a 100644
--- a/tools/dicttool/Android.mk
+++ b/tools/dicttool/Android.mk
@@ -28,12 +28,10 @@ LOCAL_ANNOTATIONS_SRC_FILES := \
 LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
         $(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
         $(LOCAL_ANNOTATIONS_SRC_FILES) \
-        $(LATINIME_CORE_SOURCE_DIRECTORY)/Constants.java
+        $(LATINIME_CORE_SOURCE_DIRECTORY)/Constants.java \
+        $(call all-java-files-under, tests)
 
-ifeq ($(DICTTOOL_UNITTEST), true)
-    LOCAL_SRC_FILES += $(call all-java-files-under, tests)
-    LOCAL_JAVA_LIBRARIES := junit
-endif
+LOCAL_JAVA_LIBRARIES := junit
 
 LOCAL_JAR_MANIFEST := etc/manifest.txt
 LOCAL_MODULE := dicttool_aosp
diff --git a/tools/dicttool/etc/dicttool_aosp b/tools/dicttool/etc/dicttool_aosp
index a4879a27948e4e084fd2c6043070e6c876e1eda6..cc7111a2c0ebabbd8fbc9bf15ebb7e08c74d0877 100755
--- a/tools/dicttool/etc/dicttool_aosp
+++ b/tools/dicttool/etc/dicttool_aosp
@@ -33,6 +33,7 @@ progdir=`pwd`
 prog="${progdir}"/`basename "${prog}"`
 cd "${oldwd}"
 
+classname=com.android.inputmethod.latin.dicttool.Dicttool
 jarfile=dicttool_aosp.jar
 frameworkdir="$progdir"
 if [ ! -r "$frameworkdir/$jarfile" ]
@@ -51,12 +52,21 @@ then
     exit 1
 fi
 
+lib=junit.jar
+if [ ! -r "$frameworkdir/$lib" ]
+then
+    echo `basename "$prog"`": can't find lib $lib"
+    exit 1
+fi
+
 if [ "$OSTYPE" = "cygwin" ] ; then
     jarpath=`cygpath -w  "$frameworkdir/$jarfile"`
+    libpath=`cygpath -w  "$frameworkdir/$lib"`
     progdir=`cygpath -w  "$progdir"`
 else
     jarpath="$frameworkdir/$jarfile"
+    libpath="$frameworkdir/$lib"
 fi
 
 # might need more memory, e.g. -Xmx128M
-exec java -ea -jar "$jarpath" "$@"
+exec java -ea -classpath "$libpath":"$jarpath" "$classname" "$@"
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CommandList.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CommandList.java
index 0e0095bd65d4d4a9c24e91b900dafba7a50c52f2..0d93c7fa91547b24b3a9023b934584f0f824802e 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CommandList.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CommandList.java
@@ -27,5 +27,6 @@ public class CommandList {
         Dicttool.addCommand("package", Package.Packager.class);
         Dicttool.addCommand("unpackage", Package.Unpackager.class);
         Dicttool.addCommand("makedict", Makedict.class);
+        Dicttool.addCommand("test", Test.class);
     }
 }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Crypt.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Crypt.java
index f8990231e7fbad614391e6785fa79fe89d74c97c..4612ae4ab941de5477bc2c46059c6a0ed5bccabc 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Crypt.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Crypt.java
@@ -40,10 +40,12 @@ public class Crypt {
         public Encrypter() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: Encrypts a file";
         }
 
+        @Override
         public void run() {
             throw new UnsupportedOperationException();
         }
@@ -55,10 +57,12 @@ public class Crypt {
         public Decrypter() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: Decrypts a file";
         }
 
+        @Override
         public void run() {
             throw new UnsupportedOperationException();
         }
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Package.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Package.java
index b294807645bf5ae81d03e7ffbaa1645d384b3e30..9274dcd2ec1f6cae73100e4b6accfe1d3c479a02 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Package.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Package.java
@@ -22,9 +22,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 
 public class Package {
     private Package() {
@@ -39,10 +37,12 @@ public class Package {
         public Packager() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: Package a file for distribution";
         }
 
+        @Override
         public void run() throws IOException {
             if (mArgs.length != 2) {
                 throw new RuntimeException("Too many/too few arguments for command " + COMMAND);
@@ -67,11 +67,13 @@ public class Package {
         public Unpackager() {
         }
 
+        @Override
         public String getHelp() {
             return COMMAND + " <src_filename> <dst_filename>: Detects how a file is packaged and\n"
                     + "decrypts/uncompresses as necessary to produce a raw binary file.";
         }
 
+        @Override
         public void run() throws FileNotFoundException, IOException {
             if (mArgs.length != 2) {
                 throw new RuntimeException("Too many/too few arguments for command " + COMMAND);
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..fdc53b30e20dad6115578dc22411a7f8c1c5cb71
--- /dev/null
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Test.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin.dicttool;
+
+import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
+
+import java.io.IOException;
+
+public class Test extends Dicttool.Command {
+    public static final String COMMAND = "test";
+
+    public Test() {
+    }
+
+    @Override
+    public String getHelp() {
+        return "test";
+    }
+
+    @Override
+    public void run() throws IOException, UnsupportedFormatException {
+        test();
+    }
+
+    private void test() throws IOException, UnsupportedFormatException {
+        final BinaryDictOffdeviceUtilsTests tests = new BinaryDictOffdeviceUtilsTests();
+        tests.testGetRawDictWorks();
+    }
+}