diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java
index ebefe2d..2c15a02 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java
@@ -16,13 +16,21 @@
 
 package com.android.inputmethod.keyboard;
 
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
 
 import com.android.inputmethod.keyboard.MoreKeysKeyboard.MoreKeysKeyboardParams;
 
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 @MediumTest
-public class MoreKeysKeyboardBuilderAutoOrderTests extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class MoreKeysKeyboardBuilderAutoOrderTests {
     private static final int WIDTH = 10;
     private static final int HEIGHT = 10;
 
@@ -38,11 +46,6 @@
     private static final int XPOS_R1 = WIDTH * 8 + WIDTH / 2;
     private static final int XPOS_R0 = WIDTH * 9 + WIDTH / 2;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     private static MoreKeysKeyboardParams createParams(final int numKeys, final int columnNum,
             final int coordXInParent) {
         final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams();
@@ -52,6 +55,7 @@
         return params;
     }
 
+    @Test
     public void testLayoutError() {
         MoreKeysKeyboardParams params = null;
         try {
@@ -69,6 +73,7 @@
     // "<1>" is the default key.
 
     // <1>
+    @Test
     public void testLayout1KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0);
         assertEquals("1 key auto 5 M0 columns", 1, params.mNumColumns);
@@ -81,6 +86,7 @@
     }
 
     // |<1>
+    @Test
     public void testLayout1KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0);
         assertEquals("1 key auto 5 L0 columns", 1, params.mNumColumns);
@@ -93,6 +99,7 @@
     }
 
     // |___ <1>
+    @Test
     public void testLayout1KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1);
         assertEquals("1 key auto 5 L1 columns", 1, params.mNumColumns);
@@ -105,6 +112,7 @@
     }
 
     // |___ ___ <1>
+    @Test
     public void testLayout1KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2);
         assertEquals("1 key auto 5 L2 columns", 1, params.mNumColumns);
@@ -117,6 +125,7 @@
     }
 
     // <1>|
+    @Test
     public void testLayout1KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0);
         assertEquals("1 key auto 5 R0 columns", 1, params.mNumColumns);
@@ -129,6 +138,7 @@
     }
 
     // <1> ___|
+    @Test
     public void testLayout1KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1);
         assertEquals("1 key auto 5 R1 columns", 1, params.mNumColumns);
@@ -141,6 +151,7 @@
     }
 
     // <1> ___ ___|
+    @Test
     public void testLayout1KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2);
         assertEquals("1 key auto 5 R2 columns", 1, params.mNumColumns);
@@ -153,6 +164,7 @@
     }
 
     // <1> [2]
+    @Test
     public void testLayout2KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0);
         assertEquals("2 key auto 5 M0 columns", 2, params.mNumColumns);
@@ -166,6 +178,7 @@
     }
 
     // |<1> [2]
+    @Test
     public void testLayout2KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0);
         assertEquals("2 key auto 5 L0 columns", 2, params.mNumColumns);
@@ -179,6 +192,7 @@
     }
 
     // |___ <1> [2]
+    @Test
     public void testLayout2KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1);
         assertEquals("2 key auto 5 L1 columns", 2, params.mNumColumns);
@@ -192,6 +206,7 @@
     }
 
     // |___ ___ <1> [2]
+    @Test
     public void testLayout2KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2);
         assertEquals("2 key auto 5 L2 columns", 2, params.mNumColumns);
@@ -205,6 +220,7 @@
     }
 
     // [2] <1>|
+    @Test
     public void testLayout2KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0);
         assertEquals("2 key auto 5 R0 columns", 2, params.mNumColumns);
@@ -218,6 +234,7 @@
     }
 
     // [2] <1> ___|
+    @Test
     public void testLayout2KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1);
         assertEquals("2 key auto 5 R1 columns", 2, params.mNumColumns);
@@ -231,6 +248,7 @@
     }
 
     // <1> [2] ___|
+    @Test
     public void testLayout2KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2);
         assertEquals("2 key auto 5 R2 columns", 2, params.mNumColumns);
@@ -244,6 +262,7 @@
     }
 
     // [3] <1> [2]
+    @Test
     public void testLayout3KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0);
         assertEquals("3 key auto 5 M0 columns", 3, params.mNumColumns);
@@ -258,6 +277,7 @@
     }
 
     // |<1> [2] [3]
+    @Test
     public void testLayout3KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0);
         assertEquals("3 key auto 5 L0 columns", 3, params.mNumColumns);
@@ -272,6 +292,7 @@
     }
 
     // |___ <1> [2] [3]
+    @Test
     public void testLayout3KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1);
         assertEquals("3 key auto 5 L1 columns", 3, params.mNumColumns);
@@ -286,6 +307,7 @@
     }
 
     // |___ [3] <1> [2]
+    @Test
     public void testLayout3KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2);
         assertEquals("3 key auto 5 L2 columns", 3, params.mNumColumns);
@@ -300,6 +322,7 @@
     }
 
     // [3] [2] <1>|
+    @Test
     public void testLayout3KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0);
         assertEquals("3 key auto 5 R0 columns", 3, params.mNumColumns);
@@ -314,6 +337,7 @@
     }
 
     // [3] [2] <1> ___|
+    @Test
     public void testLayout3KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1);
         assertEquals("3 key auto 5 R1 columns", 3, params.mNumColumns);
@@ -328,6 +352,7 @@
     }
 
     // [3] <1> [2] ___|
+    @Test
     public void testLayout3KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2);
         assertEquals("3 key auto 5 R2 columns", 3, params.mNumColumns);
@@ -343,6 +368,7 @@
 
     // [3]
     // <1> [2]
+    @Test
     public void testLayout3KeyAuto2M0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0);
         assertEquals("3 key auto 2 M0 columns", 2, params.mNumColumns);
@@ -358,6 +384,7 @@
 
     // |[3]
     // |<1> [2]
+    @Test
     public void testLayout3KeyAuto2L0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0);
         assertEquals("3 key auto 2 L0 columns", 2, params.mNumColumns);
@@ -373,6 +400,7 @@
 
     // |___ [3]
     // |___ <1> [2]
+    @Test
     public void testLayout3KeyAuto2L1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1);
         assertEquals("3 key auto 2 L1 columns", 2, params.mNumColumns);
@@ -388,6 +416,7 @@
 
     // |        [3]
     // |___ ___ <1> [2]
+    @Test
     public void testLayout3KeyAuto2L2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2);
         assertEquals("3 key auto 2 L2 columns", 2, params.mNumColumns);
@@ -403,6 +432,7 @@
 
     //     [3]|
     // [2] <1>|
+    @Test
     public void testLayout3KeyAuto2R0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0);
         assertEquals("3 key auto 2 R0 columns", 2, params.mNumColumns);
@@ -418,6 +448,7 @@
 
     //     [3]    |
     // [2] <1> ___|
+    @Test
     public void testLayout3KeyAuto2R1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1);
         assertEquals("3 key auto 2 R1 columns", 2, params.mNumColumns);
@@ -433,6 +464,7 @@
 
     // [3]        |
     // <1> [2] ___|
+    @Test
     public void testLayout3KeyAuto2R2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2);
         assertEquals("3 key auto 2 R2 columns", 2, params.mNumColumns);
@@ -448,6 +480,7 @@
 
     //     [4]
     // [3] <1> [2]
+    @Test
     public void testLayout4KeyAuto3M0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0);
         assertEquals("4 key auto 3 M0 columns", 3, params.mNumColumns);
@@ -464,6 +497,7 @@
 
     // |[4]
     // |<1> [2] [3]
+    @Test
     public void testLayout4KeyAuto3L0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0);
         assertEquals("4 key auto 3 L0 columns", 3, params.mNumColumns);
@@ -480,6 +514,7 @@
 
     // |___ [4]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout4KeyAuto3L1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1);
         assertEquals("4 key auto 3 L1 columns", 3, params.mNumColumns);
@@ -496,6 +531,7 @@
 
     // |___ ___ [4]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout4KeyAuto3L2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2);
         assertEquals("4 key auto 3 L2 columns", 3, params.mNumColumns);
@@ -512,6 +548,7 @@
 
     //         [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout4KeyAuto3R0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0);
         assertEquals("4 key auto 3 R0 columns", 3, params.mNumColumns);
@@ -528,6 +565,7 @@
 
     //         [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout4KeyAuto3R1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1);
         assertEquals("4 key auto 3 R1 columns", 3, params.mNumColumns);
@@ -544,6 +582,7 @@
 
     //     [4]     ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout4KeyAuto3R2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2);
         assertEquals("4 key auto 3 R2 columns", 3, params.mNumColumns);
@@ -559,6 +598,7 @@
     }
 
     // [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyAuto4M0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_M0);
         assertEquals("4 key auto 4 M0 columns", 4, params.mNumColumns);
@@ -574,6 +614,7 @@
     }
 
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout4KeyAuto4L0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L0);
         assertEquals("4 key auto 4 L0 columns", 4, params.mNumColumns);
@@ -589,6 +630,7 @@
     }
 
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyAuto4L1() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L1);
         assertEquals("4 key auto 4 L1 columns", 4, params.mNumColumns);
@@ -604,6 +646,7 @@
     }
 
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyAuto4L2() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L2);
         assertEquals("4 key auto 4 L2 columns", 4, params.mNumColumns);
@@ -619,6 +662,7 @@
     }
 
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout4KeyAuto4R0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R0);
         assertEquals("4 key auto 4 R0 columns", 4, params.mNumColumns);
@@ -634,6 +678,7 @@
     }
 
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout4KeyAuto4R1() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R1);
         assertEquals("4 key auto 4 R1 columns", 4, params.mNumColumns);
@@ -649,6 +694,7 @@
     }
 
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout4KeyAuto4R2() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R2);
         assertEquals("4 key auto 4 R2 columns", 4, params.mNumColumns);
@@ -664,6 +710,7 @@
     }
 
     // [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
         assertEquals("4 key auto 5 M0 columns", 4, params.mNumColumns);
@@ -679,6 +726,7 @@
     }
 
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout4KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0);
         assertEquals("4 key auto 5 L0 columns", 4, params.mNumColumns);
@@ -694,6 +742,7 @@
     }
 
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1);
         assertEquals("4 key auto 5 L1 columns", 4, params.mNumColumns);
@@ -709,6 +758,7 @@
     }
 
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2);
         assertEquals("4 key auto 5 L2 columns", 4, params.mNumColumns);
@@ -724,6 +774,7 @@
     }
 
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout4KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0);
         assertEquals("4 key auto 5 R0 columns", 4, params.mNumColumns);
@@ -739,6 +790,7 @@
     }
 
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout4KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1);
         assertEquals("4 key auto 5 R1 columns", 4, params.mNumColumns);
@@ -754,6 +806,7 @@
     }
 
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout4KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2);
         assertEquals("4 key auto 5 R2 columns", 4, params.mNumColumns);
@@ -770,6 +823,7 @@
 
     //   [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout5KeyAuto3M0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0);
         assertEquals("5 key auto 3 M0 columns", 3, params.mNumColumns);
@@ -787,6 +841,7 @@
 
     // |[4] [5]
     // |<1> [2] [3]
+    @Test
     public void testLayout5KeyAuto3L0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0);
         assertEquals("5 key auto 3 L0 columns", 3, params.mNumColumns);
@@ -804,6 +859,7 @@
 
     // |___ [4] [5]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout5KeyAuto3L1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1);
         assertEquals("5 key auto 3 L1 columns", 3, params.mNumColumns);
@@ -821,6 +877,7 @@
 
     // |___   [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout5KeyAuto3L2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2);
         assertEquals("5 key auto 3 L2 columns", 3, params.mNumColumns);
@@ -838,6 +895,7 @@
 
     //     [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout5KeyAuto3R0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0);
         assertEquals("5 key auto 3 R0 columns", 3, params.mNumColumns);
@@ -855,6 +913,7 @@
 
     //     [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyAuto3R1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1);
         assertEquals("5 key auto 3 R1 columns", 3, params.mNumColumns);
@@ -872,6 +931,7 @@
 
     //   [4] [5]   ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyAuto3R2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2);
         assertEquals("5 key auto 3 R2 columns", 3, params.mNumColumns);
@@ -889,6 +949,7 @@
 
     //     [5]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout5KeyAuto4M0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0);
         assertEquals("5 key auto 4 M0 columns", 4, params.mNumColumns);
@@ -906,6 +967,7 @@
 
     // |[5]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout5KeyAuto4L0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0);
         assertEquals("5 key auto 4 L0 columns", 4, params.mNumColumns);
@@ -923,6 +985,7 @@
 
     // |___ [5]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout5KeyAuto4L1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1);
         assertEquals("5 key auto 4 L1 columns", 4, params.mNumColumns);
@@ -940,6 +1003,7 @@
 
     // |___     [5]
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout5KeyAuto4L2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2);
         assertEquals("5 key auto 4 L2 columns", 4, params.mNumColumns);
@@ -957,6 +1021,7 @@
 
     //             [5]|
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout5KeyAuto4R0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0);
         assertEquals("5 key auto 4 R0 columns", 4, params.mNumColumns);
@@ -974,6 +1039,7 @@
 
     //             [5] ___|
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyAuto4R1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1);
         assertEquals("5 key auto 4 R1 columns", 4, params.mNumColumns);
@@ -991,6 +1057,7 @@
 
     //         [5]     ___|
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyAuto4R2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2);
         assertEquals("5 key auto 4 R2 columns", 4, params.mNumColumns);
@@ -1007,6 +1074,7 @@
     }
 
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout5KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
         assertEquals("5 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -1023,6 +1091,7 @@
     }
 
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0);
         assertEquals("5 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -1039,6 +1108,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1);
         assertEquals("5 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -1055,6 +1125,7 @@
     }
 
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout5KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2);
         assertEquals("5 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -1071,6 +1142,7 @@
     }
 
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout5KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0);
         assertEquals("5 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -1087,6 +1159,7 @@
     }
 
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1);
         assertEquals("5 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -1103,6 +1176,7 @@
     }
 
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2);
         assertEquals("5 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -1120,6 +1194,7 @@
 
     //     [5] [6]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout6KeyAuto4M0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0);
         assertEquals("6 key auto 4 M0 columns", 4, params.mNumColumns);
@@ -1138,6 +1213,7 @@
 
     // |[5] [6]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout6KeyAuto4L0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0);
         assertEquals("6 key auto 4 L0 columns", 4, params.mNumColumns);
@@ -1156,6 +1232,7 @@
 
     // |___ [5] [6]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout6KeyAuto4L1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1);
         assertEquals("6 key auto 4 L1 columns", 4, params.mNumColumns);
@@ -1174,6 +1251,7 @@
 
     // |___     [5] [6]
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout6KeyAuto4L2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2);
         assertEquals("6 key auto 4 L2 columns", 4, params.mNumColumns);
@@ -1192,6 +1270,7 @@
 
     //         [6] [5]|
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout6KeyAuto4R0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0);
         assertEquals("6 key auto 4 R0 columns", 4, params.mNumColumns);
@@ -1210,6 +1289,7 @@
 
     //         [6] [5] ___|
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout6KeyAuto4R1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1);
         assertEquals("6 key auto 4 R1 columns", 4, params.mNumColumns);
@@ -1228,6 +1308,7 @@
 
     //         [5] [6] ___|
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout6KeyAuto4R2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2);
         assertEquals("6 key auto 4 R2 columns", 4, params.mNumColumns);
@@ -1246,6 +1327,7 @@
 
     //         [6]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout6KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
         assertEquals("6 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -1264,6 +1346,7 @@
 
     // |[6]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout6KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0);
         assertEquals("6 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -1282,6 +1365,7 @@
 
     // |___ [6]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout6KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1);
         assertEquals("6 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -1300,6 +1384,7 @@
 
     // |___     [6]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout6KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2);
         assertEquals("6 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -1318,6 +1403,7 @@
 
     //                 [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout6KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0);
         assertEquals("6 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -1336,6 +1422,7 @@
 
     //                 [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout6KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1);
         assertEquals("6 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -1354,6 +1441,7 @@
 
     //             [6]     ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout6KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2);
         assertEquals("6 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -1371,6 +1459,7 @@
     }
 
     // |<1> [2] [3] [4] [5] [6] [7] ___ ___ ___|
+    @Test
     public void testLayout7KeyAuto7L0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0);
         assertEquals("7 key auto 7 L0 columns", 7, params.mNumColumns);
@@ -1389,6 +1478,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyAuto7L1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1);
         assertEquals("7 key auto 7 L1 columns", 7, params.mNumColumns);
@@ -1407,6 +1497,7 @@
     }
 
     // |___ [3] <1> [2] [4] [5] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyAuto7L2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2);
         assertEquals("7 key auto 7 L2 columns", 7, params.mNumColumns);
@@ -1425,6 +1516,7 @@
     }
 
     // |___ [5] [3] <1> [2] [4] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyAuto7L3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3);
         assertEquals("7 key auto 7 L3 columns", 7, params.mNumColumns);
@@ -1443,6 +1535,7 @@
     }
 
     // |___ [7] [5] [3] <1> [2] [4] [6] ___ ___|
+    @Test
     public void testLayout7KeyAuto7M0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0);
         assertEquals("7 key auto 7 M0 columns", 7, params.mNumColumns);
@@ -1461,6 +1554,7 @@
     }
 
     // |___ ___ [7] [5] [3] <1> [2] [4] [6] ___|
+    @Test
     public void testLayout7KeyAuto7M1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1);
         assertEquals("7 key auto 7 M1 columns", 7, params.mNumColumns);
@@ -1479,6 +1573,7 @@
     }
 
     // |___ ___ [7] [6] [5] [3] <1> [2] [4] ___|
+    @Test
     public void testLayout7KeyAuto7R3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3);
         assertEquals("7 key auto 7 R3 columns", 7, params.mNumColumns);
@@ -1497,6 +1592,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyAuto7R2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2);
         assertEquals("7 key auto 7 R2 columns", 7, params.mNumColumns);
@@ -1515,6 +1611,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyAuto7R1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1);
         assertEquals("7 key auto 7 R1 columns", 7, params.mNumColumns);
@@ -1533,6 +1630,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout7KeyAuto7R0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0);
         assertEquals("7 key auto 7 R0 columns", 7, params.mNumColumns);
@@ -1552,6 +1650,7 @@
 
     //       [6] [7]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout7KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
         assertEquals("7 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -1571,6 +1670,7 @@
 
     // |[6] [7]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout7KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
         assertEquals("7 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -1590,6 +1690,7 @@
 
     // |___ [6] [7]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout7KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
         assertEquals("7 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -1609,6 +1710,7 @@
 
     // |___   [6] [7]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout7KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
         assertEquals("7 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -1628,6 +1730,7 @@
 
     //             [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout7KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
         assertEquals("7 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -1647,6 +1750,7 @@
 
     //             [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
         assertEquals("7 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -1666,6 +1770,7 @@
 
     //           [6] [7]   ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
         assertEquals("7 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -1686,6 +1791,7 @@
     //     [7]
     // [6] [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout7KeyAuto3M0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_M0);
         assertEquals("7 key auto 3 M0 columns", 3, params.mNumColumns);
@@ -1706,6 +1812,7 @@
     // |[7]
     // |[4] [5] [6]
     // |<1> [2] [3]
+    @Test
     public void testLayout7KeyAuto3L0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L0);
         assertEquals("7 key auto 3 L0 columns", 3, params.mNumColumns);
@@ -1726,6 +1833,7 @@
     // |___ [7]
     // |___ [4] [5] [6]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout7KeyAuto3L1() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L1);
         assertEquals("7 key auto 3 L1 columns", 3, params.mNumColumns);
@@ -1746,6 +1854,7 @@
     // |___     [7]
     // |___ [6] [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout7KeyAuto3L2() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L2);
         assertEquals("7 key auto 3 L2 columns", 3, params.mNumColumns);
@@ -1766,6 +1875,7 @@
     //         [7]|
     // [6] [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout7KeyAuto3R0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R0);
         assertEquals("7 key auto 3 R0 columns", 3, params.mNumColumns);
@@ -1786,6 +1896,7 @@
     //         [7] ___|
     // [6] [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyAuto3R1() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R1);
         assertEquals("7 key auto 3 R1 columns", 3, params.mNumColumns);
@@ -1806,6 +1917,7 @@
     //     [7]     ___|
     // [6] [4] [5] ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyAuto3R2() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R2);
         assertEquals("7 key auto 3 R2 columns", 3, params.mNumColumns);
@@ -1825,6 +1937,7 @@
 
     //     [8] [6] [7]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout8KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0);
         assertEquals("8 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -1845,6 +1958,7 @@
 
     // |[6] [7] [8]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout8KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0);
         assertEquals("8 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -1865,6 +1979,7 @@
 
     // |___ [6] [7] [8]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout8KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1);
         assertEquals("8 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -1885,6 +2000,7 @@
 
     // |___ [8] [6] [7]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout8KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2);
         assertEquals("8 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -1905,6 +2021,7 @@
 
     //         [8] [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout8KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0);
         assertEquals("8 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -1925,6 +2042,7 @@
 
     //         [8] [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout8KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1);
         assertEquals("8 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -1945,6 +2063,7 @@
 
     //         [8] [6] [7] ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout8KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2);
         assertEquals("8 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -1965,6 +2084,7 @@
 
     //   [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout9KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0);
         assertEquals("9 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -1986,6 +2106,7 @@
 
     // |[6] [7] [8] [9]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0);
         assertEquals("9 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -2007,6 +2128,7 @@
 
     // |___ [6] [7] [8] [9]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1);
         assertEquals("9 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -2028,6 +2150,7 @@
 
     // |___   [6] [7] [8] [9]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout9KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2);
         assertEquals("9 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -2049,6 +2172,7 @@
 
     //     [9] [8] [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout9KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0);
         assertEquals("9 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -2070,6 +2194,7 @@
 
     //     [9] [8] [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout9KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1);
         assertEquals("9 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -2091,6 +2216,7 @@
 
     //   [9] [8] [6] [7]   ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout9KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2);
         assertEquals("9 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -2112,6 +2238,7 @@
 
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout10KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0);
         assertEquals("10 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -2134,6 +2261,7 @@
 
     // |[6] [7] [8] [9] [A]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyAuto5L0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0);
         assertEquals("10 key auto 5 L0 columns", 5, params.mNumColumns);
@@ -2156,6 +2284,7 @@
 
     // |___ [6] [7] [8] [9] [A]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyAuto5L1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1);
         assertEquals("10 key auto 5 L1 columns", 5, params.mNumColumns);
@@ -2178,6 +2307,7 @@
 
     // |___ [8] [6] [7] [9] [A]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout10KeyAuto5L2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2);
         assertEquals("10 key auto 5 L2 columns", 5, params.mNumColumns);
@@ -2200,6 +2330,7 @@
 
     // [A] [9] [8] [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout10KeyAuto5R0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0);
         assertEquals("10 key auto 5 R0 columns", 5, params.mNumColumns);
@@ -2222,6 +2353,7 @@
 
     // [A] [9] [8] [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout10KeyAuto5R1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1);
         assertEquals("10 key auto 5 R1 columns", 5, params.mNumColumns);
@@ -2244,6 +2376,7 @@
 
     // [A] [9] [8] [6] [7] ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout10KeyAuto5R2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2);
         assertEquals("10 key auto 5 R2 columns", 5, params.mNumColumns);
@@ -2267,6 +2400,7 @@
     //         [B]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout11KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0);
         assertEquals("11 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -2291,6 +2425,7 @@
     //       [B] [C]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout12KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0);
         assertEquals("12 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -2316,6 +2451,7 @@
     //     [D] [B] [C]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout13KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0);
         assertEquals("13 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -2342,6 +2478,7 @@
     //   [D] [B] [C] [E]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout14KeyAuto5M0() {
         MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0);
         assertEquals("13 key auto 5 M0 columns", 5, params.mNumColumns);
@@ -2369,6 +2506,7 @@
     //                     [J] [I] [H] ___|
     // [G] [F] [E] [D] [C] [B] [A] [9] ___|
     // [8] [7] [6] [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout19KeyAuto8R1() {
         MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R1);
         assertEquals("19 key auto 8 R1 columns", 8, params.mNumColumns);
@@ -2401,6 +2539,7 @@
     //                   [J] [H] [I]   ___|
     // [G] [F] [E] [D] [C] [B] [9] [A] ___|
     // [8] [7] [6] [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout19KeyAuto8R2() {
         MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R2);
         assertEquals("19 key auto 8 R2 columns", 8, params.mNumColumns);
@@ -2433,6 +2572,7 @@
     //               [J] [H] [I]       ___|
     // [G] [F] [E] [D] [B] [9] [A] [C] ___|
     // [8] [7] [6] [5] [3] <1> [2] [4] ___|
+    @Test
     public void testLayout19KeyAuto8R3() {
         MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R3);
         assertEquals("19 key auto 8 R3 columns", 8, params.mNumColumns);
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
index 7e51d95..2a30448 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java
@@ -16,13 +16,21 @@
 
 package com.android.inputmethod.keyboard;
 
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
 
 import com.android.inputmethod.keyboard.MoreKeysKeyboard.MoreKeysKeyboardParams;
 
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 @MediumTest
-public class MoreKeysKeyboardBuilderFixedOrderTests extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class MoreKeysKeyboardBuilderFixedOrderTests {
     private static final int WIDTH = 10;
     private static final int HEIGHT = 10;
 
@@ -38,11 +46,6 @@
     private static final int XPOS_R1 = WIDTH * 8 + WIDTH / 2;
     private static final int XPOS_R0 = WIDTH * 9 + WIDTH / 2;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     private static MoreKeysKeyboardParams createParams(final int numKeys, final int columnNum,
             final int coordXInParent) {
         final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams();
@@ -52,6 +55,7 @@
         return params;
     }
 
+    @Test
     public void testLayoutError() {
         MoreKeysKeyboardParams params = null;
         try {
@@ -69,6 +73,7 @@
     // "<m>" is the default key.
 
     // <1>
+    @Test
     public void testLayout1KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0);
         assertEquals("1 key fix 5 M0 columns", 1, params.mNumColumns);
@@ -81,6 +86,7 @@
     }
 
     // |<1>
+    @Test
     public void testLayout1KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0);
         assertEquals("1 key fix 5 L0 columns", 1, params.mNumColumns);
@@ -93,6 +99,7 @@
     }
 
     // |___ <1>
+    @Test
     public void testLayout1KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1);
         assertEquals("1 key fix 5 L1 columns", 1, params.mNumColumns);
@@ -105,6 +112,7 @@
     }
 
     // |___ ___ <1>
+    @Test
     public void testLayout1KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2);
         assertEquals("1 key fix 5 L2 columns", 1, params.mNumColumns);
@@ -117,6 +125,7 @@
     }
 
     // <1>|
+    @Test
     public void testLayout1KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0);
         assertEquals("1 key fix 5 R0 columns", 1, params.mNumColumns);
@@ -129,6 +138,7 @@
     }
 
     // <1> ___|
+    @Test
     public void testLayout1KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1);
         assertEquals("1 key fix 5 R1 columns", 1, params.mNumColumns);
@@ -141,6 +151,7 @@
     }
 
     // <1> ___ ___|
+    @Test
     public void testLayout1KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2);
         assertEquals("1 key fix 5 R2 columns", 1, params.mNumColumns);
@@ -153,6 +164,7 @@
     }
 
     // <1> [2]
+    @Test
     public void testLayout2KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0);
         assertEquals("2 key fix 5 M0 columns", 2, params.mNumColumns);
@@ -166,6 +178,7 @@
     }
 
     // |<1> [2]
+    @Test
     public void testLayout2KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0);
         assertEquals("2 key fix 5 L0 columns", 2, params.mNumColumns);
@@ -179,6 +192,7 @@
     }
 
     // |___ <1> [2]
+    @Test
     public void testLayout2KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1);
         assertEquals("2 key fix 5 L1 columns", 2, params.mNumColumns);
@@ -192,6 +206,7 @@
     }
 
     // |___ ___ <1> [2]
+    @Test
     public void testLayout2KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2);
         assertEquals("2 key fix 5 L2 columns", 2, params.mNumColumns);
@@ -205,6 +220,7 @@
     }
 
     // [1] <2>|
+    @Test
     public void testLayout2KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0);
         assertEquals("2 key fix 5 R0 columns", 2, params.mNumColumns);
@@ -218,6 +234,7 @@
     }
 
     // [1] <2> ___|
+    @Test
     public void testLayout2KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1);
         assertEquals("2 key fix 5 R1 columns", 2, params.mNumColumns);
@@ -231,6 +248,7 @@
     }
 
     // <1> [2] ___|
+    @Test
     public void testLayout2KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2);
         assertEquals("2 key fix 5 R2 columns", 2, params.mNumColumns);
@@ -245,6 +263,7 @@
 
     // [3]
     // <1> [2]
+    @Test
     public void testLayout3KeyFix2M0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0);
         assertEquals("3 key fix 2 M0 columns", 2, params.mNumColumns);
@@ -260,6 +279,7 @@
 
     // |[3]
     // |<1> [2]
+    @Test
     public void testLayout3KeyFix2L0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0);
         assertEquals("3 key fix 2 L0 columns", 2, params.mNumColumns);
@@ -275,6 +295,7 @@
 
     // |___ [3]
     // |___ <1> [2]
+    @Test
     public void testLayout3KeyFix2L1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1);
         assertEquals("3 key fix 2 L1 columns", 2, params.mNumColumns);
@@ -290,6 +311,7 @@
 
     // |        [3]
     // |___ ___ <1> [2]
+    @Test
     public void testLayout3KeyFix2L2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2);
         assertEquals("3 key fix 2 L2 columns", 2, params.mNumColumns);
@@ -305,6 +327,7 @@
 
     //     [3]|
     // [1] <2>|
+    @Test
     public void testLayout3KeyFix2R0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0);
         assertEquals("3 key fix 2 R0 columns", 2, params.mNumColumns);
@@ -320,6 +343,7 @@
 
     //     [3] ___|
     // [1] <2> ___|
+    @Test
     public void testLayout3KeyFix2R1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1);
         assertEquals("3 key fix 2 R1 columns", 2, params.mNumColumns);
@@ -335,6 +359,7 @@
 
     // [3]     ___|
     // <1> [2] ___|
+    @Test
     public void testLayout3KeyFix2R2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2);
         assertEquals("3 key fix 2 R2 columns", 2, params.mNumColumns);
@@ -350,6 +375,7 @@
 
     // [3] [4]
     // <1> [2]
+    @Test
     public void testLayout4KeyFix2M0() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_M0);
         assertEquals("3 key fix 2 M0 columns", 2, params.mNumColumns);
@@ -366,6 +392,7 @@
 
     // |[3] [4]
     // |<1> [2]
+    @Test
     public void testLayout4KeyFix2L0() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L0);
         assertEquals("3 key fix 2 L0 columns", 2, params.mNumColumns);
@@ -382,6 +409,7 @@
 
     // |___ [3] [4]
     // |___ <1> [2]
+    @Test
     public void testLayout4KeyFix2L1() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L1);
         assertEquals("3 key fix 2 L1 columns", 2, params.mNumColumns);
@@ -398,6 +426,7 @@
 
     // |        [3] [4]
     // |___ ___ <1> [2]
+    @Test
     public void testLayout4KeyFix2L2() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L2);
         assertEquals("3 key fix 2 L2 columns", 2, params.mNumColumns);
@@ -414,6 +443,7 @@
 
     // [3] [4]|
     // [1] <2>|
+    @Test
     public void testLayout4KeyFix2R0() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R0);
         assertEquals("3 key fix 2 R0 columns", 2, params.mNumColumns);
@@ -430,6 +460,7 @@
 
     // [3] [4] ___|
     // [1] <2> ___|
+    @Test
     public void testLayout4KeyFix2R1() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R1);
         assertEquals("3 key fix 2 R1 columns", 2, params.mNumColumns);
@@ -446,6 +477,7 @@
 
     // [3] [4] ___|
     // <1> [2] ___|
+    @Test
     public void testLayout4KeyFix2R2() {
         MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R2);
         assertEquals("3 key fix 2 R2 columns", 2, params.mNumColumns);
@@ -461,6 +493,7 @@
     }
 
     // [1] <2> [3]
+    @Test
     public void testLayout3KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0);
         assertEquals("3 key fix 5 columns", 3, params.mNumColumns);
@@ -475,6 +508,7 @@
     }
 
     // |<1> [2] [3]
+    @Test
     public void testLayout3KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0);
         assertEquals("3 key fix 5 L0 columns", 3, params.mNumColumns);
@@ -489,6 +523,7 @@
     }
 
     // |___ <1> [2] [3]
+    @Test
     public void testLayout3KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1);
         assertEquals("3 key fix 5 L1 columns", 3, params.mNumColumns);
@@ -503,6 +538,7 @@
     }
 
     // |___ [1] <2> [3]
+    @Test
     public void testLayout3KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2);
         assertEquals("3 key fix 5 L2 columns", 3, params.mNumColumns);
@@ -517,6 +553,7 @@
     }
 
     // [1] [2] <3>|
+    @Test
     public void testLayout3KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0);
         assertEquals("3 key fix 5 R0 columns", 3, params.mNumColumns);
@@ -531,6 +568,7 @@
     }
 
     // [1] [2] <3> ___|
+    @Test
     public void testLayout3KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1);
         assertEquals("3 key fix 5 R1 columns", 3, params.mNumColumns);
@@ -545,6 +583,7 @@
     }
 
     // [1] <2> [3] ___|
+    @Test
     public void testLayout3KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2);
         assertEquals("3 key fix 5 R2 columns", 3, params.mNumColumns);
@@ -560,6 +599,7 @@
 
     //     [4]
     // [1] <2> [3]
+    @Test
     public void testLayout4KeyFix3M0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0);
         assertEquals("4 key fix 3 M0 columns", 3, params.mNumColumns);
@@ -576,6 +616,7 @@
 
     // |[4]
     // |<1> [2] [3]
+    @Test
     public void testLayout4KeyFix3L0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0);
         assertEquals("4 key fix 3 L0 columns", 3, params.mNumColumns);
@@ -592,6 +633,7 @@
 
     // |___ [4]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout4KeyFix3L1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1);
         assertEquals("4 key fix 3 L1 columns", 3, params.mNumColumns);
@@ -608,6 +650,7 @@
 
     // |___ ___     [4]
     // |___ ___ [1] <2> [3]
+    @Test
     public void testLayout4KeyFix3L2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2);
         assertEquals("4 key fix 3 L2 columns", 3, params.mNumColumns);
@@ -624,6 +667,7 @@
 
     //         [4]|
     // [1] [2] <3>|
+    @Test
     public void testLayout4KeyFix3R0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0);
         assertEquals("4 key fix 3 R0 columns", 3, params.mNumColumns);
@@ -640,6 +684,7 @@
 
     //         [4] ___|
     // [1] [2] <3> ___|
+    @Test
     public void testLayout4KeyFix3R1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1);
         assertEquals("4 key fix 3 R1 columns", 3, params.mNumColumns);
@@ -656,6 +701,7 @@
 
     //     [4]     ___|
     // [1] <2> [3] ___|
+    @Test
     public void testLayout4KeyFix3R2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2);
         assertEquals("4 key fix 3 R2 columns", 3, params.mNumColumns);
@@ -672,6 +718,7 @@
 
     //   [4] [5]
     // [1] <2> [3]
+    @Test
     public void testLayout5KeyFix3M0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0);
         assertEquals("5 key fix 3 M0 columns", 3, params.mNumColumns);
@@ -689,6 +736,7 @@
 
     // |[4] [5]
     // |<1> [2] [3]
+    @Test
     public void testLayout5KeyFix3L0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0);
         assertEquals("5 key fix 3 L0 columns", 3, params.mNumColumns);
@@ -706,6 +754,7 @@
 
     // |___ [4] [5]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout5KeyFix3L1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1);
         assertEquals("5 key fix 3 L1 columns", 3, params.mNumColumns);
@@ -723,6 +772,7 @@
 
     // |___   [4] [5]
     // |___ [1] <2> [3]
+    @Test
     public void testLayout5KeyFix3L2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2);
         assertEquals("5 key fix 3 L2 columns", 3, params.mNumColumns);
@@ -740,6 +790,7 @@
 
     //     [4] [5]|
     // [1] [2] <3>|
+    @Test
     public void testLayout5KeyFix3R0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0);
         assertEquals("5 key fix 3 R0 columns", 3, params.mNumColumns);
@@ -757,6 +808,7 @@
 
     //     [4] [5] ___|
     // [1] [2] <3> ___|
+    @Test
     public void testLayout5KeyFix3R1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1);
         assertEquals("5 key fix 3 R1 columns", 3, params.mNumColumns);
@@ -774,6 +826,7 @@
 
     //   [4] [5]   ___|
     // [1] <2> [3] ___|
+    @Test
     public void testLayout5KeyFix3R2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2);
         assertEquals("5 key fix 3 R2 columns", 3, params.mNumColumns);
@@ -791,6 +844,7 @@
 
     // [4] [5] [6]
     // [1] <2> [3]
+    @Test
     public void testLayout6KeyFix3M0() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_M0);
         assertEquals("6 key fix 3 M0 columns", 3, params.mNumColumns);
@@ -809,6 +863,7 @@
 
     // |[4] [5] [6]
     // |<1> [2] [3]
+    @Test
     public void testLayout6KeyFix3L0() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L0);
         assertEquals("6 key fix 3 L0 columns", 3, params.mNumColumns);
@@ -827,6 +882,7 @@
 
     // |___ [4] [5] [6]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout6KeyFix3L1() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L1);
         assertEquals("6 key fix 3 L1 columns", 3, params.mNumColumns);
@@ -845,6 +901,7 @@
 
     // |___ [4] [5] [6]
     // |___ [1] <2> [3]
+    @Test
     public void testLayout6KeyFix3L2() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L2);
         assertEquals("6 key fix 3 L2 columns", 3, params.mNumColumns);
@@ -863,6 +920,7 @@
 
     // [4] [5] [6]|
     // [1] [2] <3>|
+    @Test
     public void testLayout6KeyFix3R0() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R0);
         assertEquals("6 key fix 3 R0 columns", 3, params.mNumColumns);
@@ -881,6 +939,7 @@
 
     // [4] [5] [6] ___|
     // [1] [2] <3> ___|
+    @Test
     public void testLayout6KeyFix3R1() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R1);
         assertEquals("6 key fix 3 R1 columns", 3, params.mNumColumns);
@@ -899,6 +958,7 @@
 
     // [4] [5] [6] ___|
     // [1] <2> [3] ___|
+    @Test
     public void testLayout6KeyFix3R2() {
         MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R2);
         assertEquals("6 key fix 3 R2 columns", 3, params.mNumColumns);
@@ -916,6 +976,7 @@
     }
 
     // <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
         assertEquals("4 key fix 5 columns", 4, params.mNumColumns);
@@ -931,6 +992,7 @@
     }
 
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout4KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0);
         assertEquals("4 key fix 5 L0 columns", 4, params.mNumColumns);
@@ -946,6 +1008,7 @@
     }
 
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1);
         assertEquals("4 key fix 5 L1 columns", 4, params.mNumColumns);
@@ -961,6 +1024,7 @@
     }
 
     // |___ [1] <2> [3] [4]
+    @Test
     public void testLayout4KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2);
         assertEquals("4 key fix 5 L2 columns", 4, params.mNumColumns);
@@ -976,6 +1040,7 @@
     }
 
     // [1] [2] [3] <4>|
+    @Test
     public void testLayout4KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0);
         assertEquals("4 key fix 5 R0 columns", 4, params.mNumColumns);
@@ -991,6 +1056,7 @@
     }
 
     // [1] [2] [3] <4> ___|
+    @Test
     public void testLayout4KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1);
         assertEquals("4 key fix 5 R1 columns", 4, params.mNumColumns);
@@ -1006,6 +1072,7 @@
     }
 
     // [1] [2] <3> [4] ___|
+    @Test
     public void testLayout4KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2);
         assertEquals("4 key fix 5 R2 columns", 4, params.mNumColumns);
@@ -1022,6 +1089,7 @@
 
     //     [5]
     // [1] <2> [3] [4]
+    @Test
     public void testLayout5KeyFix4M0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0);
         assertEquals("5 key fix 4 M0 columns", 4, params.mNumColumns);
@@ -1039,6 +1107,7 @@
 
     // |[5]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout5KeyFix4L0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0);
         assertEquals("5 key fix 4 L0 columns", 4, params.mNumColumns);
@@ -1056,6 +1125,7 @@
 
     // |___ [5]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout5KeyFix4L1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1);
         assertEquals("5 key fix 4 L1 columns", 4, params.mNumColumns);
@@ -1073,6 +1143,7 @@
 
     // |___     [5]
     // |___ [1] <2> [3] [4]
+    @Test
     public void testLayout5KeyFix4L2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2);
         assertEquals("5 key fix 4 L2 columns", 4, params.mNumColumns);
@@ -1090,6 +1161,7 @@
 
     //             [5]|
     // [1] [2] [3] <4>|
+    @Test
     public void testLayout5KeyFix4R0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0);
         assertEquals("5 key fix 4 R0 columns", 4, params.mNumColumns);
@@ -1107,6 +1179,7 @@
 
     //             [5] ___|
     // [1] [2] [3] <4> ___|
+    @Test
     public void testLayout5KeyFix4R1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1);
         assertEquals("5 key fix 4 R1 columns", 4, params.mNumColumns);
@@ -1124,6 +1197,7 @@
 
     //         [5]     ___|
     // [1] [2] <3> [4] ___|
+    @Test
     public void testLayout5KeyFix4R2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2);
         assertEquals("5 key fix 4 R2 columns", 4, params.mNumColumns);
@@ -1141,6 +1215,7 @@
 
     //   [5] [6]
     // [1] <2> [3] [4]
+    @Test
     public void testLayout6KeyFix4M0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0);
         assertEquals("6 key fix 4 M0 columns", 4, params.mNumColumns);
@@ -1159,6 +1234,7 @@
 
     // |[5] [6]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout6KeyFix4L0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0);
         assertEquals("6 key fix 4 L0 columns", 4, params.mNumColumns);
@@ -1177,6 +1253,7 @@
 
     // |___ [5] [6]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout6KeyFix4L1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1);
         assertEquals("6 key fix 4 L1 columns", 4, params.mNumColumns);
@@ -1195,6 +1272,7 @@
 
     // |___   [5] [6]
     // |___ [1] <2> [3] [4]
+    @Test
     public void testLayout6KeyFix4L2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2);
         assertEquals("6 key fix 4 L2 columns", 4, params.mNumColumns);
@@ -1213,6 +1291,7 @@
 
     //         [5] [6]|
     // [1] [2] [3] <4>|
+    @Test
     public void testLayout6KeyFix4R0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0);
         assertEquals("6 key fix 4 R0 columns", 4, params.mNumColumns);
@@ -1231,6 +1310,7 @@
 
     //         [5] [6] ___|
     // [1] [2] [3] <4> ___|
+    @Test
     public void testLayout6KeyFix4R1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1);
         assertEquals("6 key fix 4 R1 columns", 4, params.mNumColumns);
@@ -1249,6 +1329,7 @@
 
     //       [5] [6]   ___|
     // [1] [2] <3> [4] ___|
+    @Test
     public void testLayout6KeyFix4R2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2);
         assertEquals("6 key fix 4 R2 columns", 4, params.mNumColumns);
@@ -1267,6 +1348,7 @@
 
     // [5] [6] [7]
     // [1] <2> [3] [4]
+    @Test
     public void testLayout7KeyFix4M0() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_M0);
         assertEquals("7 key fix 4 M0 columns", 4, params.mNumColumns);
@@ -1286,6 +1368,7 @@
 
     // |[5] [6] [7]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout7KeyFix4L0() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L0);
         assertEquals("7 key fix 4 L0 columns", 4, params.mNumColumns);
@@ -1305,6 +1388,7 @@
 
     // |___ [5] [6] [7]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout7KeyFix4L1() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L1);
         assertEquals("7 key fix 4 L1 columns", 4, params.mNumColumns);
@@ -1324,6 +1408,7 @@
 
     // |___ [5] [6] [7]
     // |___ [1] <2> [3] [4]
+    @Test
     public void testLayout7KeyFix4L2() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L2);
         assertEquals("7 key fix 4 L2 columns", 4, params.mNumColumns);
@@ -1343,6 +1428,7 @@
 
     //     [5] [6] [7]|
     // [1] [2] [3] <4>|
+    @Test
     public void testLayout7KeyFix4R0() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R0);
         assertEquals("7 key fix 4 R0 columns", 4, params.mNumColumns);
@@ -1362,6 +1448,7 @@
 
     //     [5] [6] [7] ___|
     // [1] [2] [3] <4> ___|
+    @Test
     public void testLayout7KeyFix4R1() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R1);
         assertEquals("7 key fix 4 R1 columns", 4, params.mNumColumns);
@@ -1381,6 +1468,7 @@
 
     //     [5] [6] [7] ___|
     // [1] [2] <3> [4] ___|
+    @Test
     public void testLayout7KeyFix4R2() {
         MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R2);
         assertEquals("7 key fix 4 R2 columns", 4, params.mNumColumns);
@@ -1400,6 +1488,7 @@
 
     // [5] [6] [7] [8]
     // [1] <2> [3] [4]
+    @Test
     public void testLayout8KeyFix4M0() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_M0);
         assertEquals("8 key fix 4 M0 columns", 4, params.mNumColumns);
@@ -1420,6 +1509,7 @@
 
     // |[5] [6] [7] [8]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout8KeyFix4L0() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L0);
         assertEquals("8 key fix 4 L0 columns", 4, params.mNumColumns);
@@ -1440,6 +1530,7 @@
 
     // |___ [5] [6] [7] [8]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout8KeyFix4L1() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L1);
         assertEquals("8 key fix 4 L1 columns", 4, params.mNumColumns);
@@ -1460,6 +1551,7 @@
 
     // |___ [5] [6] [7] [8]
     // |___ [1] <2> [3] [4]
+    @Test
     public void testLayout8KeyFix4L2() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L2);
         assertEquals("8 key fix 4 L2 columns", 4, params.mNumColumns);
@@ -1480,6 +1572,7 @@
 
     // [5] [6] [7] [8]|
     // [1] [2] [3] <4>|
+    @Test
     public void testLayout8KeyFix4R0() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R0);
         assertEquals("8 key fix 4 R0 columns", 4, params.mNumColumns);
@@ -1500,6 +1593,7 @@
 
     // [5] [6] [7] [8] ___|
     // [1] [2] [3] <4> ___|
+    @Test
     public void testLayout8KeyFix4R1() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R1);
         assertEquals("8 key fix 4 R1 columns", 4, params.mNumColumns);
@@ -1520,6 +1614,7 @@
 
     // [5] [6] [7] [8] ___|
     // [1] [2] <3> [4] ___|
+    @Test
     public void testLayout8KeyFix4R2() {
         MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R2);
         assertEquals("8 key fix 4 R2 columns", 4, params.mNumColumns);
@@ -1539,6 +1634,7 @@
     }
 
      // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout5KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
         assertEquals("5 key fix 5 columns", 5, params.mNumColumns);
@@ -1555,6 +1651,7 @@
     }
 
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0);
         assertEquals("5 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -1571,6 +1668,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1);
         assertEquals("5 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -1587,6 +1685,7 @@
     }
 
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout5KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2);
         assertEquals("5 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -1603,6 +1702,7 @@
     }
 
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout5KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0);
         assertEquals("5 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -1619,6 +1719,7 @@
     }
 
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout5KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1);
         assertEquals("5 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -1635,6 +1736,7 @@
     }
 
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout5KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2);
         assertEquals("5 key fix 5 R2 columns", 5, params.mNumColumns);
@@ -1652,6 +1754,7 @@
 
     //         [6]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout6KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
         assertEquals("6 key fix 5 columns", 5, params.mNumColumns);
@@ -1670,6 +1773,7 @@
 
     // |[6]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout6KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0);
         assertEquals("6 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -1688,6 +1792,7 @@
 
     // |___ [6]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout6KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1);
         assertEquals("6 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -1706,6 +1811,7 @@
 
     // |___     [6]
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout6KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2);
         assertEquals("6 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -1724,6 +1830,7 @@
 
     //                 [6]|
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout6KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0);
         assertEquals("6 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -1742,6 +1849,7 @@
 
     //                 [6] ___|
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout6KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1);
         assertEquals("6 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -1760,6 +1868,7 @@
 
     //             [6]     ___|
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout6KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2);
         assertEquals("6 key fix 5 R2 columns", 5, params.mNumColumns);
@@ -1778,6 +1887,7 @@
 
     //       [6] [7]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout7KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
         assertEquals("7 key fix 5 columns", 5, params.mNumColumns);
@@ -1797,6 +1907,7 @@
 
     // |[6] [7]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout7KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
         assertEquals("7 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -1816,6 +1927,7 @@
 
     // |___ [6] [7]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout7KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
         assertEquals("7 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -1835,6 +1947,7 @@
 
     // |___   [6] [7]
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout7KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
         assertEquals("7 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -1854,6 +1967,7 @@
 
     //             [6] [7]|
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout7KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
         assertEquals("7 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -1873,6 +1987,7 @@
 
     //             [6] [7] ___|
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout7KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
         assertEquals("7 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -1892,6 +2007,7 @@
 
     //           [6] [7]   ___|
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout7KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
         assertEquals("7 key fix 5 R2 columns",5, params.mNumColumns);
@@ -1911,6 +2027,7 @@
 
     //     [6] [7] [8]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout8KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0);
         assertEquals("8 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -1931,6 +2048,7 @@
 
     // |[6] [7] [8]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout8KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0);
         assertEquals("8 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -1951,6 +2069,7 @@
 
     // |___ [6] [7] [8]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout8KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1);
         assertEquals("8 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -1971,6 +2090,7 @@
 
     // |___ [6] [7] [8]
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout8KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2);
         assertEquals("8 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -1991,6 +2111,7 @@
 
     //         [6] [7] [8]|
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout8KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0);
         assertEquals("8 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -2011,6 +2132,7 @@
 
     //         [6] [7] [8] ___|
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout8KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1);
         assertEquals("8 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -2031,6 +2153,7 @@
 
     //         [6] [7] [8] ___|
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout8KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2);
         assertEquals("8 key fix 5 R2 columns", 5, params.mNumColumns);
@@ -2051,6 +2174,7 @@
 
     //   [6] [7] [8] [9]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout9KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0);
         assertEquals("9 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2072,6 +2196,7 @@
 
     // |[6] [7] [8] [9]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0);
         assertEquals("9 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -2093,6 +2218,7 @@
 
     // |___ [6] [7] [8] [9]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1);
         assertEquals("9 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -2114,6 +2240,7 @@
 
     // |___   [6] [7] [8] [9]
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout9KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2);
         assertEquals("9 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -2135,6 +2262,7 @@
 
     //     [6] [7] [8] [9]|
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout9KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0);
         assertEquals("9 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -2156,6 +2284,7 @@
 
     //     [6] [7] [8] [9] ___|
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout9KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1);
         assertEquals("9 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -2177,6 +2306,7 @@
 
     //   [6] [7] [8] [9]  ___|
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout9KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2);
         assertEquals("9 key fix 5 R2 columns", 5, params.mNumColumns);
@@ -2198,6 +2328,7 @@
 
     // [6] [7] [8] [9] [A]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout10KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0);
         assertEquals("10 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2220,6 +2351,7 @@
 
     // |[6] [7] [8] [9] [A]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyFix5L0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0);
         assertEquals("10 key fix 5 L0 columns", 5, params.mNumColumns);
@@ -2242,6 +2374,7 @@
 
     // |___ [6] [7] [8] [9] [A]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyFix5L1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1);
         assertEquals("10 key fix 5 L1 columns", 5, params.mNumColumns);
@@ -2264,6 +2397,7 @@
 
     // |___ [6] [7] [8] [9] [A]
     // |___ [1] <2> [3] [4] [5]
+    @Test
     public void testLayout10KeyFix5L2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2);
         assertEquals("10 key fix 5 L2 columns", 5, params.mNumColumns);
@@ -2286,6 +2420,7 @@
 
     // [6] [7] [8] [9] [A]|
     // [1] [2] [3] [4] <5>|
+    @Test
     public void testLayout10KeyFix5R0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0);
         assertEquals("10 key fix 5 R0 columns", 5, params.mNumColumns);
@@ -2308,6 +2443,7 @@
 
     // [6] [7] [8] [9] [A] ___|
     // [1] [2] [3] [4] <5> ___|
+    @Test
     public void testLayout10KeyFix5R1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1);
         assertEquals("10 key fix 5 R1 columns", 5, params.mNumColumns);
@@ -2330,6 +2466,7 @@
 
     // [6] [7] [8] [9] [A] ___|
     // [1] [2] [3] <4> [5] ___|
+    @Test
     public void testLayout10KeyFix5R2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2);
         assertEquals("10 key fix 5 R2 columns", 5, params.mNumColumns);
@@ -2353,6 +2490,7 @@
     //         [B]
     // [6] [7] [8] [9] [A]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout11KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0);
         assertEquals("11 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2377,6 +2515,7 @@
     //       [B] [C]
     // [6] [7] [8] [9] [A]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout12KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0);
         assertEquals("12 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2402,6 +2541,7 @@
     //     [B] [C] [D]
     // [6] [7] [8] [9] [A]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout13KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0);
         assertEquals("13 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2428,6 +2568,7 @@
     //   [B] [C] [D] [E]
     // [6] [7] [8] [9] [A]
     // [1] [2] <3> [4] [5]
+    @Test
     public void testLayout14KeyFix5M0() {
         MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0);
         assertEquals("14 key fix 5 M0 columns", 5, params.mNumColumns);
@@ -2453,6 +2594,7 @@
     }
 
     // |<1> [2] [3] [4] [5] [6] [7]
+    @Test
     public void testLayout7KeyFix7L0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0);
         assertEquals("7 key fix 7 L0 columns", 7, params.mNumColumns);
@@ -2471,6 +2613,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5] [6] [7]
+    @Test
     public void testLayout7KeyFix7L1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1);
         assertEquals("7 key fix 7 L1 columns", 7, params.mNumColumns);
@@ -2489,6 +2632,7 @@
     }
 
     // |___ [1] <2> [3] [4] [5] [6] [7]
+    @Test
     public void testLayout7KeyFix7L2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2);
         assertEquals("7 key fix 7 L2 columns", 7, params.mNumColumns);
@@ -2507,6 +2651,7 @@
     }
 
     // |___ [1] [2] <3> [4] [5] [6] [7]
+    @Test
     public void testLayout7KeyFix7L3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3);
         assertEquals("7 key fix 7 L3 columns", 7, params.mNumColumns);
@@ -2525,6 +2670,7 @@
     }
 
     // |___ [1] [2] [3] <4> [5] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyFix7M0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0);
         assertEquals("7 key fix 7 M0 columns", 7, params.mNumColumns);
@@ -2543,6 +2689,7 @@
     }
 
     // |___ ___ [1] [2] [3] <4> [5] [6] [7] ___|
+    @Test
     public void testLayout7KeyFix7M1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1);
         assertEquals("7 key fix 7 M1 columns", 7, params.mNumColumns);
@@ -2561,6 +2708,7 @@
     }
 
     // [1] [2] [3] [4] <5> [6] [7] ___|
+    @Test
     public void testLayout7KeyFix7R3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3);
         assertEquals("7 key fix 7 R3 columns", 7, params.mNumColumns);
@@ -2579,6 +2727,7 @@
     }
 
     // [1] [2] [3] [4] [5] <6> [7] ___|
+    @Test
     public void testLayout7KeyFix7R2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2);
         assertEquals("7 key fix 7 R2 columns", 7, params.mNumColumns);
@@ -2597,6 +2746,7 @@
     }
 
     // [1] [2] [3] [4] [5] [6] <7> ___|
+    @Test
     public void testLayout7KeyFix7R1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1);
         assertEquals("7 key fix 7 R1 columns", 7, params.mNumColumns);
@@ -2615,6 +2765,7 @@
     }
 
     // [1] [2] [3] [4] [5] [6] <7>|
+    @Test
     public void testLayout7KeyFix7R0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0);
         assertEquals("7 key fix 7 R0 columns", 7, params.mNumColumns);
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java
index 806790e..0a2076d 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java
@@ -16,13 +16,21 @@
 
 package com.android.inputmethod.keyboard;
 
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
 
 import com.android.inputmethod.keyboard.MoreKeysKeyboard.MoreKeysKeyboardParams;
 
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 @MediumTest
-public class MoreKeysKeyboardBuilderMaxOrderTests extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class MoreKeysKeyboardBuilderMaxOrderTests {
     private static final int WIDTH = 10;
     private static final int HEIGHT = 10;
 
@@ -38,11 +46,6 @@
     private static final int XPOS_R1 = WIDTH * 8 + WIDTH / 2;
     private static final int XPOS_R0 = WIDTH * 9 + WIDTH / 2;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     private static MoreKeysKeyboardParams createParams(final int numKeys, final int maxColumns,
             final int coordXInParent) {
         final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams();
@@ -52,6 +55,7 @@
         return params;
     }
 
+    @Test
     public void testLayoutError() {
         MoreKeysKeyboardParams params = null;
         try {
@@ -69,6 +73,7 @@
     // "<1>" is the default key.
 
     // <1>
+    @Test
     public void testLayout1KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0);
         assertEquals("1 key max 5 M0 columns", 1, params.mNumColumns);
@@ -81,6 +86,7 @@
     }
 
     // |<1>
+    @Test
     public void testLayout1KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0);
         assertEquals("1 key max 5 L0 columns", 1, params.mNumColumns);
@@ -93,6 +99,7 @@
     }
 
     // |___ <1>
+    @Test
     public void testLayout1KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1);
         assertEquals("1 key max 5 L1 columns", 1, params.mNumColumns);
@@ -105,6 +112,7 @@
     }
 
     // |___ ___ <1>
+    @Test
     public void testLayout1KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2);
         assertEquals("1 key max 5 L2 columns", 1, params.mNumColumns);
@@ -117,6 +125,7 @@
     }
 
     // <1>|
+    @Test
     public void testLayout1KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0);
         assertEquals("1 key max 5 R0 columns", 1, params.mNumColumns);
@@ -129,6 +138,7 @@
     }
 
     // <1> ___|
+    @Test
     public void testLayout1KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1);
         assertEquals("1 key max 5 R1 columns", 1, params.mNumColumns);
@@ -141,6 +151,7 @@
     }
 
     // <1> ___ ___|
+    @Test
     public void testLayout1KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2);
         assertEquals("1 key max 5 R2 columns", 1, params.mNumColumns);
@@ -153,6 +164,7 @@
     }
 
     // <1> [2]
+    @Test
     public void testLayout2KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0);
         assertEquals("2 key max 5 M0 columns", 2, params.mNumColumns);
@@ -166,6 +178,7 @@
     }
 
     // |<1> [2]
+    @Test
     public void testLayout2KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0);
         assertEquals("2 key max 5 L0 columns", 2, params.mNumColumns);
@@ -179,6 +192,7 @@
     }
 
     // |___ <1> [2]
+    @Test
     public void testLayout2KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1);
         assertEquals("2 key max 5 L1 columns", 2, params.mNumColumns);
@@ -192,6 +206,7 @@
     }
 
     // |___ ___ <1> [2]
+    @Test
     public void testLayout2KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2);
         assertEquals("2 key max 5 L2 columns", 2, params.mNumColumns);
@@ -205,6 +220,7 @@
     }
 
     // [2] <1>|
+    @Test
     public void testLayout2KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0);
         assertEquals("2 key max 5 R0 columns", 2, params.mNumColumns);
@@ -218,6 +234,7 @@
     }
 
     // [2] <1> ___|
+    @Test
     public void testLayout2KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1);
         assertEquals("2 key max 5 R1 columns", 2, params.mNumColumns);
@@ -231,6 +248,7 @@
     }
 
     // <1> [2] ___|
+    @Test
     public void testLayout2KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2);
         assertEquals("2 key max 5 R2 columns", 2, params.mNumColumns);
@@ -244,6 +262,7 @@
     }
 
     // [3] <1> [2]
+    @Test
     public void testLayout3KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0);
         assertEquals("3 key max 5 M0 columns", 3, params.mNumColumns);
@@ -258,6 +277,7 @@
     }
 
     // |<1> [2] [3]
+    @Test
     public void testLayout3KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0);
         assertEquals("3 key max 5 L0 columns", 3, params.mNumColumns);
@@ -272,6 +292,7 @@
     }
 
     // |___ <1> [2] [3]
+    @Test
     public void testLayout3KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1);
         assertEquals("3 key max 5 L1 columns", 3, params.mNumColumns);
@@ -286,6 +307,7 @@
     }
 
     // |___ [3] <1> [2]
+    @Test
     public void testLayout3KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2);
         assertEquals("3 key max 5 L2 columns", 3, params.mNumColumns);
@@ -300,6 +322,7 @@
     }
 
     // [3] [2] <1>|
+    @Test
     public void testLayout3KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0);
         assertEquals("3 key max 5 R0 columns", 3, params.mNumColumns);
@@ -314,6 +337,7 @@
     }
 
     // [3] [2] <1> ___|
+    @Test
     public void testLayout3KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1);
         assertEquals("3 key max 5 R1 columns", 3, params.mNumColumns);
@@ -328,6 +352,7 @@
     }
 
     // [3] <1> [2] ___|
+    @Test
     public void testLayout3KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2);
         assertEquals("3 key max 5 R2 columns", 3, params.mNumColumns);
@@ -343,6 +368,7 @@
 
     // [3]
     // <1> [2]
+    @Test
     public void testLayout3KeyMax2M0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0);
         assertEquals("3 key max 2 M0 columns", 2, params.mNumColumns);
@@ -358,6 +384,7 @@
 
     // |[3]
     // |<1> [2]
+    @Test
     public void testLayout3KeyMax2L0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0);
         assertEquals("3 key max 2 L0 columns", 2, params.mNumColumns);
@@ -373,6 +400,7 @@
 
     // |___ [3]
     // |___ <1> [2]
+    @Test
     public void testLayout3KeyMax2L1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1);
         assertEquals("3 key max 2 L1 columns", 2, params.mNumColumns);
@@ -388,6 +416,7 @@
 
     // |        [3]
     // |___ ___ <1> [2]
+    @Test
     public void testLayout3KeyMax2L2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2);
         assertEquals("3 key max 2 L2 columns", 2, params.mNumColumns);
@@ -403,6 +432,7 @@
 
     //     [3]|
     // [2] <1>|
+    @Test
     public void testLayout3KeyMax2R0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0);
         assertEquals("3 key max 2 R0 columns", 2, params.mNumColumns);
@@ -418,6 +448,7 @@
 
     //     [3]    |
     // [2] <1> ___|
+    @Test
     public void testLayout3KeyMax2R1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1);
         assertEquals("3 key max 2 R1 columns", 2, params.mNumColumns);
@@ -433,6 +464,7 @@
 
     // [3]        |
     // <1> [2] ___|
+    @Test
     public void testLayout3KeyMax2R2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2);
         assertEquals("3 key max 2 R2 columns", 2, params.mNumColumns);
@@ -448,6 +480,7 @@
 
     // [3] [4]
     // <1> [2]
+    @Test
     public void testLayout4KeyMax3M0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0);
         assertEquals("4 key max 3 M0 columns", 2, params.mNumColumns);
@@ -464,6 +497,7 @@
 
     // |[3] [4]
     // |<1> [2]
+    @Test
     public void testLayout4KeyMax3L0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0);
         assertEquals("4 key max 3 L0 columns", 2, params.mNumColumns);
@@ -480,6 +514,7 @@
 
     // |___ [3] [4]
     // |___ <1> [2]
+    @Test
     public void testLayout4KeyMax3L1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1);
         assertEquals("4 key max 3 L1 columns", 2, params.mNumColumns);
@@ -496,6 +531,7 @@
 
     // |___ ___ [3] [4]
     // |___ ___ <1> [2]
+    @Test
     public void testLayout4KeyMax3L2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2);
         assertEquals("4 key max 3 L2 columns", 2, params.mNumColumns);
@@ -512,6 +548,7 @@
 
     // [4] [3]|
     // [2] <1>|
+    @Test
     public void testLayout4KeyMax3R0() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0);
         assertEquals("4 key max 3 R0 columns", 2, params.mNumColumns);
@@ -528,6 +565,7 @@
 
     // [4] [3] ___|
     // [2] <1> ___|
+    @Test
     public void testLayout4KeyMax3R1() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1);
         assertEquals("4 key max 3 R1 columns", 2, params.mNumColumns);
@@ -544,6 +582,7 @@
 
     // [3] [4] ___|
     // <1> [2] ___|
+    @Test
     public void testLayout4KeyMax3R2() {
         MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2);
         assertEquals("4 key max 3 R2 columns", 2, params.mNumColumns);
@@ -559,6 +598,7 @@
     }
 
     // [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyMax4M0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_M0);
         assertEquals("4 key max 4 M0 columns", 4, params.mNumColumns);
@@ -574,6 +614,7 @@
     }
 
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout4KeyMax4L0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L0);
         assertEquals("4 key max 4 L0 columns", 4, params.mNumColumns);
@@ -589,6 +630,7 @@
     }
 
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyMax4L1() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L1);
         assertEquals("4 key max 4 L1 columns", 4, params.mNumColumns);
@@ -604,6 +646,7 @@
     }
 
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyMax4L2() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L2);
         assertEquals("4 key max 4 L2 columns", 4, params.mNumColumns);
@@ -619,6 +662,7 @@
     }
 
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout4KeyMax4R0() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R0);
         assertEquals("4 key max 4 R0 columns", 4, params.mNumColumns);
@@ -634,6 +678,7 @@
     }
 
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout4KeyMax4R1() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R1);
         assertEquals("4 key max 4 R1 columns", 4, params.mNumColumns);
@@ -649,6 +694,7 @@
     }
 
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout4KeyMax4R2() {
         MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R2);
         assertEquals("4 key max 4 R2 columns", 4, params.mNumColumns);
@@ -664,6 +710,7 @@
     }
 
     // [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
         assertEquals("4 key max 5 M0 columns", 4, params.mNumColumns);
@@ -679,6 +726,7 @@
     }
 
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout4KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0);
         assertEquals("4 key max 5 L0 columns", 4, params.mNumColumns);
@@ -694,6 +742,7 @@
     }
 
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout4KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1);
         assertEquals("4 key max 5 L1 columns", 4, params.mNumColumns);
@@ -709,6 +758,7 @@
     }
 
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout4KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2);
         assertEquals("4 key max 5 L2 columns", 4, params.mNumColumns);
@@ -724,6 +774,7 @@
     }
 
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout4KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0);
         assertEquals("4 key max 5 R0 columns", 4, params.mNumColumns);
@@ -739,6 +790,7 @@
     }
 
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout4KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1);
         assertEquals("4 key max 5 R1 columns", 4, params.mNumColumns);
@@ -754,6 +806,7 @@
     }
 
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout4KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2);
         assertEquals("4 key max 5 R2 columns", 4, params.mNumColumns);
@@ -770,6 +823,7 @@
 
     //   [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout5KeyMax3M0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0);
         assertEquals("5 key max 3 M0 columns", 3, params.mNumColumns);
@@ -787,6 +841,7 @@
 
     // |[4] [5]
     // |<1> [2] [3]
+    @Test
     public void testLayout5KeyMax3L0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0);
         assertEquals("5 key max 3 L0 columns", 3, params.mNumColumns);
@@ -804,6 +859,7 @@
 
     // |___ [4] [5]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout5KeyMax3L1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1);
         assertEquals("5 key max 3 L1 columns", 3, params.mNumColumns);
@@ -821,6 +877,7 @@
 
     // |___   [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout5KeyMax3L2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2);
         assertEquals("5 key max 3 L2 columns", 3, params.mNumColumns);
@@ -838,6 +895,7 @@
 
     //     [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout5KeyMax3R0() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0);
         assertEquals("5 key max 3 R0 columns", 3, params.mNumColumns);
@@ -855,6 +913,7 @@
 
     //     [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyMax3R1() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1);
         assertEquals("5 key max 3 R1 columns", 3, params.mNumColumns);
@@ -872,6 +931,7 @@
 
     //   [4] [5]   ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyMax3R2() {
         MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2);
         assertEquals("5 key max 3 R2 columns", 3, params.mNumColumns);
@@ -889,6 +949,7 @@
 
     //   [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout5KeyMax4M0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0);
         assertEquals("5 key max 4 M0 columns", 3, params.mNumColumns);
@@ -906,6 +967,7 @@
 
     // |[4] [5]
     // |<1> [2] [3]
+    @Test
     public void testLayout5KeyMax4L0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0);
         assertEquals("5 key max 4 L0 columns", 3, params.mNumColumns);
@@ -923,6 +985,7 @@
 
     // |___ [4] [5]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout5KeyMax4L1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1);
         assertEquals("5 key max 4 L1 columns", 3, params.mNumColumns);
@@ -940,6 +1003,7 @@
 
     // |___   [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout5KeyMax4L2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2);
         assertEquals("5 key max 4 L2 columns", 3, params.mNumColumns);
@@ -957,6 +1021,7 @@
 
     //     [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout5KeyMax4R0() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0);
         assertEquals("5 key max 4 R0 columns", 3, params.mNumColumns);
@@ -974,6 +1039,7 @@
 
     //     [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyMax4R1() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1);
         assertEquals("5 key max 4 R1 columns", 3, params.mNumColumns);
@@ -991,6 +1057,7 @@
 
     //   [4] [5]   ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyMax4R2() {
         MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2);
         assertEquals("5 key max 4 R2 columns", 3, params.mNumColumns);
@@ -1007,6 +1074,7 @@
     }
 
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout5KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
         assertEquals("5 key max 5 M0 columns", 5, params.mNumColumns);
@@ -1023,6 +1091,7 @@
     }
 
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0);
         assertEquals("5 key max 5 L0 columns", 5, params.mNumColumns);
@@ -1039,6 +1108,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout5KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1);
         assertEquals("5 key max 5 L1 columns", 5, params.mNumColumns);
@@ -1055,6 +1125,7 @@
     }
 
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout5KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2);
         assertEquals("5 key max 5 L2 columns", 5, params.mNumColumns);
@@ -1071,6 +1142,7 @@
     }
 
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout5KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0);
         assertEquals("5 key max 5 R0 columns", 5, params.mNumColumns);
@@ -1087,6 +1159,7 @@
     }
 
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout5KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1);
         assertEquals("5 key max 5 R1 columns", 5, params.mNumColumns);
@@ -1103,6 +1176,7 @@
     }
 
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout5KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2);
         assertEquals("5 key max 5 R2 columns", 5, params.mNumColumns);
@@ -1120,6 +1194,7 @@
 
     // [6] [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout6KeyMax4M0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0);
         assertEquals("6 key max 4 M0 columns", 3, params.mNumColumns);
@@ -1138,6 +1213,7 @@
 
     // |[4] [5] [6]
     // |<1> [2] [3]
+    @Test
     public void testLayout6KeyMax4L0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0);
         assertEquals("6 key max 4 L0 columns", 3, params.mNumColumns);
@@ -1156,6 +1232,7 @@
 
     // |___ [4] [5] [6]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout6KeyMax4L1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1);
         assertEquals("6 key max 4 L1 columns", 3, params.mNumColumns);
@@ -1174,6 +1251,7 @@
 
     // |___ [6] [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout6KeyMax4L2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2);
         assertEquals("6 key max 4 L2 columns", 3, params.mNumColumns);
@@ -1192,6 +1270,7 @@
 
     // [6] [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout6KeyMax4R0() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0);
         assertEquals("6 key max 4 R0 columns", 3, params.mNumColumns);
@@ -1210,6 +1289,7 @@
 
     // [6] [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout6KeyMax4R1() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1);
         assertEquals("6 key max 4 R1 columns", 3, params.mNumColumns);
@@ -1228,6 +1308,7 @@
 
     // [6] [4] [5] ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout6KeyMax4R2() {
         MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2);
         assertEquals("6 key max 4 R2 columns", 3, params.mNumColumns);
@@ -1246,6 +1327,7 @@
 
     // [6] [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout6KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
         assertEquals("6 key max 5 M0 columns", 3, params.mNumColumns);
@@ -1264,6 +1346,7 @@
 
     // |[4] [5] [6]
     // |<1> [2] [3]
+    @Test
     public void testLayout6KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0);
         assertEquals("6 key max 5 L0 columns", 3, params.mNumColumns);
@@ -1282,6 +1365,7 @@
 
     // |___ [4] [5] [6]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout6KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1);
         assertEquals("6 key max 5 L1 columns", 3, params.mNumColumns);
@@ -1300,6 +1384,7 @@
 
     // |___ [6] [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout6KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2);
         assertEquals("6 key max 5 L2 columns", 3, params.mNumColumns);
@@ -1318,6 +1403,7 @@
 
     // [6] [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout6KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0);
         assertEquals("6 key max 5 R0 columns", 3, params.mNumColumns);
@@ -1336,6 +1422,7 @@
 
     // [6] [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout6KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1);
         assertEquals("6 key max 5 R1 columns", 3, params.mNumColumns);
@@ -1354,6 +1441,7 @@
 
     // [6] [4] [5] ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout6KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2);
         assertEquals("6 key max 5 R2 columns", 3, params.mNumColumns);
@@ -1371,6 +1459,7 @@
     }
 
     // |<1> [2] [3] [4] [5] [6] [7] ___ ___ ___|
+    @Test
     public void testLayout7KeyMax7L0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0);
         assertEquals("7 key max 7 L0 columns", 7, params.mNumColumns);
@@ -1389,6 +1478,7 @@
     }
 
     // |___ <1> [2] [3] [4] [5] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyMax7L1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1);
         assertEquals("7 key max 7 L1 columns", 7, params.mNumColumns);
@@ -1407,6 +1497,7 @@
     }
 
     // |___ [3] <1> [2] [4] [5] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyMax7L2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2);
         assertEquals("7 key max 7 L2 columns", 7, params.mNumColumns);
@@ -1425,6 +1516,7 @@
     }
 
     // |___ [5] [3] <1> [2] [4] [6] [7] ___ ___|
+    @Test
     public void testLayout7KeyMax7L3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3);
         assertEquals("7 key max 7 L3 columns", 7, params.mNumColumns);
@@ -1443,6 +1535,7 @@
     }
 
     // |___ [7] [5] [3] <1> [2] [4] [6] ___ ___|
+    @Test
     public void testLayout7KeyMax7M0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0);
         assertEquals("7 key max 7 M0 columns", 7, params.mNumColumns);
@@ -1461,6 +1554,7 @@
     }
 
     // |___ ___ [7] [5] [3] <1> [2] [4] [6] ___|
+    @Test
     public void testLayout7KeyMax7M1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1);
         assertEquals("7 key max 7 M1 columns", 7, params.mNumColumns);
@@ -1479,6 +1573,7 @@
     }
 
     // |___ ___ [7] [6] [5] [3] <1> [2] [4] ___|
+    @Test
     public void testLayout7KeyMax7R3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3);
         assertEquals("7 key max 7 R3 columns", 7, params.mNumColumns);
@@ -1497,6 +1592,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyMax7R2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2);
         assertEquals("7 key max 7 R2 columns", 7, params.mNumColumns);
@@ -1515,6 +1611,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyMax7R1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1);
         assertEquals("7 key max 7 R1 columns", 7, params.mNumColumns);
@@ -1533,6 +1630,7 @@
     }
 
     // |___ ___ [7] [6] [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout7KeyMax7R0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0);
         assertEquals("7 key max 7 R0 columns", 7, params.mNumColumns);
@@ -1552,6 +1650,7 @@
 
     //   [5] [6] [7]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout7KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
         assertEquals("7 key max 5 M0 columns", 4, params.mNumColumns);
@@ -1571,6 +1670,7 @@
 
     // |[5] [6] [7]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout7KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
         assertEquals("7 key max 5 L0 columns", 4, params.mNumColumns);
@@ -1590,6 +1690,7 @@
 
     // |___ [5] [6] [7]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout7KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
         assertEquals("7 key max 5 L1 columns", 4, params.mNumColumns);
@@ -1609,6 +1710,7 @@
 
     // |___   [5] [6] [7]
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout7KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
         assertEquals("7 key max 5 L2 columns", 4, params.mNumColumns);
@@ -1628,6 +1730,7 @@
 
     //     [7] [6] [5]|
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout7KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
         assertEquals("7 key max 5 R0 columns", 4, params.mNumColumns);
@@ -1647,6 +1750,7 @@
 
     //     [7] [6] [5] ___|
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
         assertEquals("7 key max 5 R1 columns", 4, params.mNumColumns);
@@ -1666,6 +1770,7 @@
 
     //   [7] [5] [6]   ___|
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
         assertEquals("7 key max 5 R2 columns", 4, params.mNumColumns);
@@ -1686,6 +1791,7 @@
     //     [7]
     // [6] [4] [5]
     // [3] <1> [2]
+    @Test
     public void testLayout7KeyMax3M0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_M0);
         assertEquals("7 key max 3 M0 columns", 3, params.mNumColumns);
@@ -1706,6 +1812,7 @@
     // |[7]
     // |[4] [5] [6]
     // |<1> [2] [3]
+    @Test
     public void testLayout7KeyMax3L0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L0);
         assertEquals("7 key max 3 L0 columns", 3, params.mNumColumns);
@@ -1726,6 +1833,7 @@
     // |___ [7]
     // |___ [4] [5] [6]
     // |___ <1> [2] [3]
+    @Test
     public void testLayout7KeyMax3L1() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L1);
         assertEquals("7 key max 3 L1 columns", 3, params.mNumColumns);
@@ -1746,6 +1854,7 @@
     // |___     [7]
     // |___ [6] [4] [5]
     // |___ [3] <1> [2]
+    @Test
     public void testLayout7KeyMax3L2() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L2);
         assertEquals("7 key max 3 L2 columns", 3, params.mNumColumns);
@@ -1766,6 +1875,7 @@
     //         [7]|
     // [6] [5] [4]|
     // [3] [2] <1>|
+    @Test
     public void testLayout7KeyMax3R0() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R0);
         assertEquals("7 key max 3 R0 columns", 3, params.mNumColumns);
@@ -1786,6 +1896,7 @@
     //         [7] ___|
     // [6] [5] [4] ___|
     // [3] [2] <1> ___|
+    @Test
     public void testLayout7KeyMax3R1() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R1);
         assertEquals("7 key max 3 R1 columns", 3, params.mNumColumns);
@@ -1806,6 +1917,7 @@
     //     [7]     ___|
     // [6] [4] [5] ___|
     // [3] <1> [2] ___|
+    @Test
     public void testLayout7KeyMax3R2() {
         MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R2);
         assertEquals("7 key max 3 R2 columns", 3, params.mNumColumns);
@@ -1825,6 +1937,7 @@
 
     // [7] [5] [6] [8]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout8KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0);
         assertEquals("8 key max 5 M0 columns", 4, params.mNumColumns);
@@ -1845,6 +1958,7 @@
 
     // |[5] [6] [7] [8]
     // |<1> [2] [3] [4]
+    @Test
     public void testLayout8KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0);
         assertEquals("8 key max 5 L0 columns", 4, params.mNumColumns);
@@ -1865,6 +1979,7 @@
 
     // |___ [5] [6] [7] [8]
     // |___ <1> [2] [3] [4]
+    @Test
     public void testLayout8KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1);
         assertEquals("8 key max 5 L1 columns", 4, params.mNumColumns);
@@ -1885,6 +2000,7 @@
 
     // |___ [7] [5] [6] [8]
     // |___ [3] <1> [2] [4]
+    @Test
     public void testLayout8KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2);
         assertEquals("8 key max 5 L2 columns", 4, params.mNumColumns);
@@ -1905,6 +2021,7 @@
 
     // [8] [7] [6] [5]|
     // [4] [3] [2] <1>|
+    @Test
     public void testLayout8KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0);
         assertEquals("8 key max 5 R0 columns", 4, params.mNumColumns);
@@ -1925,6 +2042,7 @@
 
     // [8] [7] [6] [5] ___|
     // [4] [3] [2] <1> ___|
+    @Test
     public void testLayout8KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1);
         assertEquals("8 key max 5 R1 columns", 4, params.mNumColumns);
@@ -1945,6 +2063,7 @@
 
     // [8] [7] [5] [6] ___|
     // [4] [3] <1> [2] ___|
+    @Test
     public void testLayout8KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2);
         assertEquals("8 key max 5 R2 columns", 4, params.mNumColumns);
@@ -1965,6 +2084,7 @@
 
     //   [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout9KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0);
         assertEquals("9 key max 5 M0 columns", 5, params.mNumColumns);
@@ -1986,6 +2106,7 @@
 
     // |[6] [7] [8] [9]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0);
         assertEquals("9 key max 5 L0 columns", 5, params.mNumColumns);
@@ -2007,6 +2128,7 @@
 
     // |___ [6] [7] [8] [9]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout9KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1);
         assertEquals("9 key max 5 L1 columns", 5, params.mNumColumns);
@@ -2028,6 +2150,7 @@
 
     // |___   [6] [7] [8] [9]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout9KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2);
         assertEquals("9 key max 5 L2 columns", 5, params.mNumColumns);
@@ -2049,6 +2172,7 @@
 
     //     [9] [8] [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout9KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0);
         assertEquals("9 key max 5 R0 columns", 5, params.mNumColumns);
@@ -2070,6 +2194,7 @@
 
     //     [9] [8] [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout9KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1);
         assertEquals("9 key max 5 R1 columns", 5, params.mNumColumns);
@@ -2091,6 +2216,7 @@
 
     //   [9] [8] [6] [7]   ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout9KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2);
         assertEquals("9 key max 5 R2 columns", 5, params.mNumColumns);
@@ -2112,6 +2238,7 @@
 
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout10KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0);
         assertEquals("10 key max 5 M0 columns", 5, params.mNumColumns);
@@ -2134,6 +2261,7 @@
 
     // |[6] [7] [8] [9] [A]
     // |<1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0);
         assertEquals("10 key max 5 L0 columns", 5, params.mNumColumns);
@@ -2156,6 +2284,7 @@
 
     // |___ [6] [7] [8] [9] [A]
     // |___ <1> [2] [3] [4] [5]
+    @Test
     public void testLayout10KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1);
         assertEquals("10 key max 5 L1 columns", 5, params.mNumColumns);
@@ -2178,6 +2307,7 @@
 
     // |___ [8] [6] [7] [9] [A]
     // |___ [3] <1> [2] [4] [5]
+    @Test
     public void testLayout10KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2);
         assertEquals("10 key max 5 L2 columns", 5, params.mNumColumns);
@@ -2200,6 +2330,7 @@
 
     // [A] [9] [8] [7] [6]|
     // [5] [4] [3] [2] <1>|
+    @Test
     public void testLayout10KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0);
         assertEquals("10 key max 5 R0 columns", 5, params.mNumColumns);
@@ -2222,6 +2353,7 @@
 
     // [A] [9] [8] [7] [6] ___|
     // [5] [4] [3] [2] <1> ___|
+    @Test
     public void testLayout10KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1);
         assertEquals("10 key max 5 R1 columns", 5, params.mNumColumns);
@@ -2244,6 +2376,7 @@
 
     // [A] [9] [8] [6] [7] ___|
     // [5] [4] [3] <1> [2] ___|
+    @Test
     public void testLayout10KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2);
         assertEquals("10 key max 5 R2 columns", 5, params.mNumColumns);
@@ -2267,6 +2400,7 @@
     //   [9] [A] [B]
     // [7] [5] [6] [8]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout11KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0);
         assertEquals("11 key max 5 M0 columns", 4, params.mNumColumns);
@@ -2291,6 +2425,7 @@
     // [B] [9] [A] [C]
     // [7] [5] [6] [8]
     // [3] <1> [2] [4]
+    @Test
     public void testLayout12KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0);
         assertEquals("12 key max 5 M0 columns", 4, params.mNumColumns);
@@ -2316,6 +2451,7 @@
     //     [D] [B] [C]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout13KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0);
         assertEquals("13 key max 5 M0 columns", 5, params.mNumColumns);
@@ -2342,6 +2478,7 @@
     //   [D] [B] [C] [E]
     // [A] [8] [6] [7] [9]
     // [5] [3] <1> [2] [4]
+    @Test
     public void testLayout14KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0);
         assertEquals("13 key max 5 M0 columns", 5, params.mNumColumns);
