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