1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.inputmethod.keyboard.layout.expected; 18 19 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; 20 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey; 21 import com.android.inputmethod.latin.common.Constants; 22 23 /** 24 * Base class to create an expected keyboard for unit test. 25 */ 26 public abstract class AbstractLayoutBase { 27 // Those helper methods have a lower case name to be readable when defining expected keyboard 28 // layouts. 29 30 // Helper method to create an {@link ExpectedKey} object that has the label. key(final String label, final ExpectedKey ... moreKeys)31 public static ExpectedKey key(final String label, final ExpectedKey ... moreKeys) { 32 return ExpectedKey.newInstance(label, moreKeys); 33 } 34 35 // Helper method to create an {@link ExpectedKey} object that has the label and the output text. key(final String label, final String outputText, final ExpectedKey ... moreKeys)36 public static ExpectedKey key(final String label, final String outputText, 37 final ExpectedKey ... moreKeys) { 38 return ExpectedKey.newInstance(label, outputText, moreKeys); 39 } 40 41 // Helper method to create an {@link ExpectedKey} object that has the label and the output code. key(final String label, final int code, final ExpectedKey ... moreKeys)42 public static ExpectedKey key(final String label, final int code, 43 final ExpectedKey ... moreKeys) { 44 return ExpectedKey.newInstance(label, code, moreKeys); 45 } 46 47 // Helper method to create an {@link ExpectedKey} object that has the icon and the output text. key(final int iconId, final String outputText, final ExpectedKey ... moreKeys)48 public static ExpectedKey key(final int iconId, final String outputText, 49 final ExpectedKey ... moreKeys) { 50 return ExpectedKey.newInstance(iconId, outputText, moreKeys); 51 } 52 53 // Helper method to create an {@link ExpectedKey} object that has the icon and the output code. key(final int iconId, final int code, final ExpectedKey ... moreKeys)54 public static ExpectedKey key(final int iconId, final int code, 55 final ExpectedKey ... moreKeys) { 56 return ExpectedKey.newInstance(iconId, code, moreKeys); 57 } 58 59 // Helper method to create an {@link ExpectedKey} object that has new "more keys". key(final ExpectedKey key, final ExpectedKey ... moreKeys)60 public static ExpectedKey key(final ExpectedKey key, final ExpectedKey ... moreKeys) { 61 return ExpectedKey.newInstance(key.getVisual(), key.getOutput(), moreKeys); 62 } 63 64 // Helper method to create an {@link ExpectedAdditionalMoreKey} object for an 65 // "additional more key" that has the label. 66 // The additional more keys can be defined independently from other more keys. The position of 67 // the additional more keys in the long press popup keyboard can be controlled by specifying 68 // special marker "%" in the usual more keys definitions. additionalMoreKey(final String label)69 public static ExpectedAdditionalMoreKey additionalMoreKey(final String label) { 70 return ExpectedAdditionalMoreKey.newInstance(label); 71 } 72 73 // Helper method to create an {@link ExpectedKey} object for a "more key" that has the label. moreKey(final String label)74 public static ExpectedKey moreKey(final String label) { 75 return ExpectedKey.newInstance(label); 76 } 77 78 // Helper method to create an {@link ExpectedKey} object for a "more key" that has the label 79 // and the output text. moreKey(final String label, final String outputText)80 public static ExpectedKey moreKey(final String label, final String outputText) { 81 return ExpectedKey.newInstance(label, outputText); 82 } 83 84 // Helper method to create an {@link ExpectedKey} object for a "more key" that has the label 85 // and the output code. moreKey(final String label, final int code)86 public static ExpectedKey moreKey(final String label, final int code) { 87 return ExpectedKey.newInstance(label, code); 88 } 89 90 // Helper method to create an {@link ExpectedKey} object for a "more key" that has the icon 91 // and the output text. moreKey(final int iconId, final String outputText)92 public static ExpectedKey moreKey(final int iconId, final String outputText) { 93 return ExpectedKey.newInstance(iconId, outputText); 94 } 95 96 // Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey}, 97 // {@link ExpectedKey} array, and {@link String}. joinMoreKeys(final Object ... moreKeys)98 public static ExpectedKey[] joinMoreKeys(final Object ... moreKeys) { 99 return joinKeys(moreKeys); 100 } 101 102 // Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey}, 103 // {@link ExpectedKey} array, and {@link String}. joinKeys(final Object ... keys)104 public static ExpectedKey[] joinKeys(final Object ... keys) { 105 return ExpectedKeyboardBuilder.joinKeys(keys); 106 } 107 108 // Icon ids. 109 private static final int ICON_DELETE = KeyboardIconsSet.getIconId( 110 KeyboardIconsSet.NAME_DELETE_KEY); 111 private static final int ICON_SPACE = KeyboardIconsSet.getIconId( 112 KeyboardIconsSet.NAME_SPACE_KEY); 113 private static final int ICON_TAB = KeyboardIconsSet.getIconId( 114 KeyboardIconsSet.NAME_TAB_KEY); 115 private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId( 116 KeyboardIconsSet.NAME_SHORTCUT_KEY); 117 private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId( 118 KeyboardIconsSet.NAME_SETTINGS_KEY); 119 private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId( 120 KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY); 121 private static final int ICON_ENTER = KeyboardIconsSet.getIconId( 122 KeyboardIconsSet.NAME_ENTER_KEY); 123 private static final int ICON_EMOJI_ACTION = KeyboardIconsSet.getIconId( 124 KeyboardIconsSet.NAME_EMOJI_ACTION_KEY); 125 private static final int ICON_EMOJI_NORMAL = KeyboardIconsSet.getIconId( 126 KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY); 127 private static final int ICON_SHIFT = KeyboardIconsSet.getIconId( 128 KeyboardIconsSet.NAME_SHIFT_KEY); 129 private static final int ICON_SHIFTED_SHIFT = KeyboardIconsSet.getIconId( 130 KeyboardIconsSet.NAME_SHIFT_KEY_SHIFTED); 131 private static final int ICON_ZWNJ = KeyboardIconsSet.getIconId( 132 KeyboardIconsSet.NAME_ZWNJ_KEY); 133 private static final int ICON_ZWJ = KeyboardIconsSet.getIconId( 134 KeyboardIconsSet.NAME_ZWJ_KEY); 135 136 // Functional keys. 137 protected static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE); 138 protected static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB); 139 protected static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT); 140 protected static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS); 141 protected static final ExpectedKey LANGUAGE_SWITCH_KEY = key( 142 ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH); 143 protected static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER); 144 protected static final ExpectedKey EMOJI_ACTION_KEY = key(ICON_EMOJI_ACTION, Constants.CODE_EMOJI); 145 protected static final ExpectedKey EMOJI_NORMAL_KEY = key(ICON_EMOJI_NORMAL, Constants.CODE_EMOJI); 146 protected static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE); 147 protected static final ExpectedKey CAPSLOCK_MORE_KEY = key(" ", Constants.CODE_CAPSLOCK); 148 protected static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT, 149 Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY); 150 protected static final ExpectedKey SHIFTED_SHIFT_KEY = key(ICON_SHIFTED_SHIFT, 151 Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY); 152 protected static final ExpectedKey ALPHABET_KEY = key("ABC", Constants.CODE_SWITCH_ALPHA_SYMBOL); 153 protected static final ExpectedKey SYMBOLS_KEY = key("?123", Constants.CODE_SWITCH_ALPHA_SYMBOL); 154 protected static final ExpectedKey BACK_TO_SYMBOLS_KEY = key("?123", Constants.CODE_SHIFT); 155 protected static final ExpectedKey SYMBOLS_SHIFT_KEY = key("= \\ <", Constants.CODE_SHIFT); 156 protected static final ExpectedKey TABLET_SYMBOLS_SHIFT_KEY = key("~ [ <", Constants.CODE_SHIFT); 157 158 // U+00A1: "¡" INVERTED EXCLAMATION MARK 159 // U+00BF: "¿" INVERTED QUESTION MARK 160 protected static final ExpectedKey[] EXCLAMATION_AND_QUESTION_MARKS = joinKeys( 161 key("!", moreKey("\u00A1")), key("?", moreKey("\u00BF"))); 162 // U+200C: ZERO WIDTH NON-JOINER 163 // U+200D: ZERO WIDTH JOINER 164 protected static final ExpectedKey ZWNJ_KEY = key(ICON_ZWNJ, "\u200C"); 165 protected static final ExpectedKey ZWJ_KEY = key(ICON_ZWJ, "\u200D"); 166 // Domain key 167 protected static final ExpectedKey DOMAIN_KEY = 168 key(".com", joinMoreKeys(".net", ".org", ".gov", ".edu")).preserveCase(); 169 170 // Punctuation more keys for phone form factor. 171 protected static final ExpectedKey[] PHONE_PUNCTUATION_MORE_KEYS = joinKeys( 172 ",", "?", "!", "#", ")", "(", "/", ";", 173 "'", "@", ":", "-", "\"", "+", "%", "&"); 174 // Punctuation more keys for tablet form factor. 175 protected static final ExpectedKey[] TABLET_PUNCTUATION_MORE_KEYS = joinKeys( 176 ",", "'", "#", ")", "(", "/", ";", 177 "@", ":", "-", "\"", "+", "%", "&"); 178 } 179