testtextfieldinput.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 274 行

JAVA
274
字号
/* *   * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package javax.microedition.lcdui;import com.sun.midp.i3test.*;import com.sun.midp.chameleon.*;import com.sun.midp.chameleon.input.*;import java.util.Vector;import com.sun.midp.events.*;import com.sun.midp.lcdui.EventConstants;import com.sun.midp.configurator.Constants;import com.sun.midp.util.SerialCallback;/** * This test case covers Input Session management code in TextField and * TextBox.  * Bugs it tests against is : *         6297297 - IllegalStateException in event processing thread */public class TestTextFieldInput extends TestCase {    /** instance of display */    Display display;    /** callback serialization adaptor */    SerialCallback scb;    /** instance of form */    Form form;    /** instance of text field */    TextField tf;    /** sample of the long text string */     static final String longtext = "some" +        " long long long long long long long long" +                " long long long long long long long long" +                " long long long long long long long long" +                " text";    /**     * Checks the command in Menu     *      * @param c Command     * @return true if the command is in menu, false otherwise     */    boolean isCommandInMenu(Command c) {        Command[] soft2 = display.getWindow().getSoftTwo();        if (soft2 == null) {            return false;        }        for (int i = 0; i < soft2.length; i++) {            if (soft2[i] == c) {                return true;            }        }        return false;      }        /**     * Checks the input states     */    void verifyInputStates() {/*        TextFieldLFImpl lf = (TextFieldLFImpl)tf.textFieldLF;        if (lf.hasFocus) {            if (lf.editable) {                // Input mode indicator layer exists                assertSame("Indicator layer",                            display.getWindow().getTopMostPopup(),                           lf.inputModeIndicator);                                // Input session should have been started                assertTrue("Input session",                           lf.inputSession.getCurrentInputMode() != null);                                // At least one input mode available for constaint ANY                assertTrue("Available IMs",                           lf.inputSession.getAvailableModes().length >= 1);                                // Input mode selection command exists in menu                assertTrue("InputSubMenu", isCommandInMenu(lf.inputMenu));                                // cursor is visible                assertTrue("Cursor", lf.cursor.visible);                                // No active autoscrolling task                assertTrue("AutoScrolling", lf.textScrollPainter == null);                            } else {                // cursor is invisible                assertTrue("Cursor", !lf.cursor.visible);                                // if contents too long, autoscrolling should be activated                assertTrue("AutoScrolling",                           lf.textWidth <= lf.scrollWidth ||                           lf.textScrollPainter != null);                                // input session is ended                assertTrue("Input session",                           lf.inputSession.getCurrentInputMode() == null);                                // Input mode selection command doesn't exist in menu                assertTrue("InputSubMenu", !isCommandInMenu(lf.inputMenu));            }        } else {            // autoscrolling is not activated            assertTrue("AutoScrolling", lf.textScrollPainter == null);                        // input mode selection command doesn't exist in menu            assertTrue("InputSubMenu", !isCommandInMenu(lf.inputMenu));        }  */             }        /**     * Verifies available input modes     * @param isNumericOnly if only numeric only, false otherwise       */    void verifyAvailableInputModes(boolean isNumericOnly) {        TextFieldLFImpl lf = (TextFieldLFImpl)tf.textFieldLF;        Command[] cmds = lf.inputMenu.getSubCommands();        boolean hasAlpha = false, hasNumeric = false;        AlphaNumericInputMode alphaIM = new AlphaNumericInputMode();        NumericInputMode numericIM = new NumericInputMode();                if (cmds != null) {            for (int i = 0; i < cmds.length; i++) {                if (alphaIM.getName().equals(cmds[i].getLabel())) {                    hasAlpha = true;                } else if (numericIM.getName().equals(cmds[i].getLabel())) {                    hasNumeric = true;                }            }        }                assertTrue("Numeric IM", hasNumeric);        assertTrue("AlphaNumeric IM", isNumericOnly || hasAlpha);    }        /**     * Starts the test     */    void setUp() {        display = new StubDisplay();        scb = new SerialCallback(display);                form = new Form("Form");        tf = new TextField("TextField", longtext, 256, TextField.ANY);        form.append(tf);        form.append(new DateField("DateField", DateField.TIME));    }        /**     * Show the form on the display     */    void testShow() {        declare("testShow");                // Make form shown        display.setCurrent(form);        scb.invokeAndWait();        assertTrue(form.isShown());                // Expect textfield1 in focus        verifyInputStates();        // Expect both AlphaNumeric and Numeric input modes are available        verifyAvailableInputModes(false);    }        /**     * Tests setConstraints method     */    void testSetConstraints() {        declare("testSetUneditable");                tf.setConstraints(TextField.ANY | TextField.UNEDITABLE);        verifyInputStates();                declare("testSetNumeric");                // Change input constraints from ANY to NUMERIC editable        tf.setConstraints(TextField.NUMERIC);        verifyInputStates();        // Expect AlphaNumeric input mode does not exist        verifyAvailableInputModes(true);    }        /**     * Tests traverse in/ traverse out     */    void testTraverse() {        EventQueue eventQueue = EventQueue.getEventQueue();        NativeEvent event;        // Restore textfield to ANY editable        tf.setConstraints(TextField.ANY);        tf.setString(longtext);        FormLFImpl formlf = (FormLFImpl)form.formLF;        TextFieldLFImpl tfLF = (TextFieldLFImpl)tf.textFieldLF;                declare("testTraverseOut");        event = new NativeEvent(EventTypes.KEY_EVENT);        event.intParam1 = EventConstants.PRESSED;        event.intParam2 = Constants.KEYCODE_DOWN;        event.intParam4 = display.displayId;        eventQueue.post(event);                // wait till the focus is transferred        scb.invokeAndWait();        assertFalse(tfLF.hasFocus);        verifyInputStates();                declare("testTraverseIn");        event = new NativeEvent(EventTypes.KEY_EVENT);        event.intParam1 = EventConstants.PRESSED;        event.intParam2 = Constants.KEYCODE_UP;        event.intParam4 = display.displayId;        eventQueue.post(event);        // wait till the focus is transferred        scb.invokeAndWait();        assertTrue(tfLF.hasFocus);        verifyInputStates();    }        /**     * destroy test     */    void tearDown() {    }        /**     * Overridden from TestCase parent. This method will kick off each     * individual test     */    public void runTests() {        setUp();                testShow();        testSetConstraints();        testTraverse();        tearDown();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?