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. 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. 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. 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. 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. 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". 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. 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. 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. 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. 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. 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}. 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}. 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