SwingTextKeyboardDriver.java revision 13978:1993af50385d
1/* 2 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23package org.netbeans.jemmy.drivers.text; 24 25import java.awt.event.InputEvent; 26import java.awt.event.KeyEvent; 27 28import org.netbeans.jemmy.Timeout; 29import org.netbeans.jemmy.drivers.DriverManager; 30import org.netbeans.jemmy.drivers.KeyDriver; 31import org.netbeans.jemmy.operators.ComponentOperator; 32import org.netbeans.jemmy.operators.JEditorPaneOperator; 33import org.netbeans.jemmy.operators.JTextAreaOperator; 34import org.netbeans.jemmy.operators.JTextComponentOperator; 35 36/** 37 * TextDriver for swing text component types. Uses keyboard operations. 38 * 39 * @author Alexandre Iline(alexandre.iline@oracle.com) 40 */ 41public class SwingTextKeyboardDriver extends TextKeyboardDriver { 42 43 /** 44 * Constructs a SwingTextKeyboardDriver. 45 */ 46 public SwingTextKeyboardDriver() { 47 super(new String[]{"org.netbeans.jemmy.operators.JTextComponentOperator"}); 48 } 49 50 @Override 51 public void clearText(ComponentOperator oper) { 52 if (oper instanceof JTextAreaOperator 53 || oper instanceof JEditorPaneOperator) { 54 DriverManager.getFocusDriver(oper).giveFocus(oper); 55 KeyDriver kdriver = DriverManager.getKeyDriver(oper); 56 selectText(oper, 0, getText(oper).length()); 57 kdriver.pushKey(oper, KeyEvent.VK_DELETE, 0, 58 oper.getTimeouts().create("ComponentOperator.PushKeyTimeout")); 59 } else { 60 super.clearText(oper); 61 } 62 } 63 64 @Override 65 public String getText(ComponentOperator oper) { 66 return ((JTextComponentOperator) oper).getDisplayedText(); 67 } 68 69 @Override 70 public int getCaretPosition(ComponentOperator oper) { 71 return ((JTextComponentOperator) oper).getCaretPosition(); 72 } 73 74 @Override 75 public int getSelectionStart(ComponentOperator oper) { 76 return ((JTextComponentOperator) oper).getSelectionStart(); 77 } 78 79 @Override 80 public int getSelectionEnd(ComponentOperator oper) { 81 return ((JTextComponentOperator) oper).getSelectionEnd(); 82 } 83 84 @Override 85 public NavigationKey[] getKeys(ComponentOperator oper) { 86 boolean multiString 87 = oper instanceof JTextAreaOperator 88 || oper instanceof JEditorPaneOperator; 89 NavigationKey[] result = new NavigationKey[multiString ? 8 : 4]; 90 result[0] = new UpKey(KeyEvent.VK_LEFT, 0); 91 result[1] = new DownKey(KeyEvent.VK_RIGHT, 0); 92 ((UpKey) result[0]).setDownKey((DownKey) result[1]); 93 ((DownKey) result[1]).setUpKey((UpKey) result[0]); 94 if (multiString) { 95 result[2] = new UpKey(KeyEvent.VK_UP, 0); 96 result[3] = new DownKey(KeyEvent.VK_DOWN, 0); 97 ((UpKey) result[2]).setDownKey((DownKey) result[3]); 98 ((DownKey) result[3]).setUpKey((UpKey) result[2]); 99 result[4] = new UpKey(KeyEvent.VK_PAGE_UP, 0); 100 result[5] = new DownKey(KeyEvent.VK_PAGE_DOWN, 0); 101 ((UpKey) result[4]).setDownKey((DownKey) result[5]); 102 ((DownKey) result[5]).setUpKey((UpKey) result[4]); 103 result[6] = new HomeKey(KeyEvent.VK_HOME, InputEvent.CTRL_MASK); 104 result[7] = new EndKey(KeyEvent.VK_END, InputEvent.CTRL_MASK, this, oper); 105 } else { 106 result[2] = new HomeKey(KeyEvent.VK_HOME, 0); 107 result[3] = new EndKey(KeyEvent.VK_END, 0, this, oper); 108 } 109 return result; 110 } 111 112 @Override 113 public Timeout getBetweenTimeout(ComponentOperator oper) { 114 return oper.getTimeouts().create("TextComponentOperator.BetweenKeysTimeout"); 115 } 116} 117