javauis/lcdui_qt/tsrc/uitestsrc/t_uirobot/form/FormItemTest.java
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:47:24 +0300
changeset 23 98ccebc37403
parent 21 2a9601315dfc
permissions -rw-r--r--
Revision: v2.1.24 Kit: 201019

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
package t_uirobot.form;

import j2meunit.framework.*;

import javax.microedition.lcdui.*;

import t_uirobot.ItemUITestBase;

import com.nokia.mj.impl.uitestutils.Key;

/**
 * TEST CASE SPECIFICATION <br>
 * <br>
 * Short description of the module test:
 * <li> UI-robot based test to test item-related form functionality,
 * for example adding and removing items to form. <br>
 * <br>
 * Created: 2008-11-12
 */
public class FormItemTest extends ItemUITestBase
{

    /**
     * Constructor.
     */
    public FormItemTest()
    {
        super();
    }

    /**
     * Constructor.
     *
     * @param sTestName Test name.
     * @param rTestMethod Test method.
     */
    public FormItemTest(String sTestName, TestMethod rTestMethod)
    {
        super(sTestName, rTestMethod);
    }

    /**
     * Creates the test suite. You need to add a new aSuite.addTest antry for
     * any new test methods, otherwise they won't be run.
     *
     * @return New testsuite.
     */
    public Test suite()
    {
        TestSuite aSuite = new TestSuite();

        aSuite.addTest(new FormItemTest("testAppendItemAfterSetCurrent",
                                        new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((FormItemTest) tc).testAppendItemAfterSetCurrent();
            }
        }));

        aSuite.addTest(new FormItemTest(
                           "testRemoveCommandFromLabeledFocusedItem",
                           new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((FormItemTest) tc).
                testRemoveCommandFromLabeledFocusedItem();
            }
        }));

        aSuite.addTest(new FormItemTest(
                           "testAddRemoveItems",
                           new TestMethod()
        {
            public void run(TestCase tc)
            {
                ((FormItemTest) tc).testAddRemoveItems();
            }
        }));

        /*
        aSuite.addTest(new FormItemTest("testRemoveItemsWhenBackground",
                new TestMethod() {
                    public void run(TestCase tc) {
                        ((FormItemTest) tc).testRemoveItemsWhenBackground();
                    }
                }));
             */

        return aSuite;
    }

    /**
     * Tests to remove command from focused item which has label and
     * verifies that focus is moved to next/previous focusable item.
     */
    public void testRemoveCommandFromLabeledFocusedItem()
    {
        StringItem button1 = new StringItem("label", "click!", Item.BUTTON);
        StringItem button2 = new StringItem("label", "click2!", Item.BUTTON);

        Command c1 = new Command("Ok1", "", Command.ITEM, 0);
        Command c2 = new Command("Ok2", "", Command.ITEM, 0);

        button1.addCommand(c1);
        button1.setItemCommandListener(this);
        button2.addCommand(c2);
        button2.setItemCommandListener(this);

        form.append(button1);
        form.append(button2);

        setCurrent(form);

        // First item should be focused. Remove command from it, and
        // make sure the focus is transfered to second button:
        button1.removeCommand(c1);
        block(CHANGE_DISPLAYABLE_DELAY);

        key(Key.CBA1);
        assertItemCmdListener("case1", c2, button2);

        // Add command back to first item and remove command from second one.
        // Verify that the focus is moved to first one:
        button1.addCommand(c1);
        button2.removeCommand(c2);
        //block(CHANGE_DISPLAYABLE_DELAY);
        block(CHANGE_DISPLAYABLE_DELAY);

        key(Key.CBA1);
        assertItemCmdListener("case2", c1, button1);
    }

    /**
     * Tests to add and remove items to/from form.
     */
    public void testAddRemoveItems()
    {
        Command ok1 = new Command("Ok1", "", Command.ITEM, 0);
        Command ok2 = new Command("Ok2", "", Command.ITEM, 0);

        Form form2 = new Form("form2");
        StringItem button1 = new StringItem(null, "button1", StringItem.BUTTON);
        StringItem button2 = new StringItem(null, "button2", StringItem.BUTTON);
        button1.addCommand(ok1);
        button2.addCommand(ok2);
        button1.setItemCommandListener(this);
        button2.setItemCommandListener(this);
        form.append(button1);
        form.append(button2);

        setCurrent(form);

        // Move to second button, hide form, remove second button, show
        // form and verify that the first button is selected:
        key(Key.RightArrow);

        setCurrent(form2);

        form.delete(1);

        setCurrent(form);
        key(Key.CBA1);
        assertItemCmdListener("case1", ok1, button1);

        // Add second button again and move to it and verify the command
        // works:
        form.append(button2);
        block(CHANGE_DISPLAYABLE_DELAY);
        key(Key.RightArrow);

        key(Key.CBA1);
        assertItemCmdListener("case2", ok2, button2);
    }

    /**
     * Tests to append item to form after form is set current. Then
     * verifies the focus transfer works.
     */
    public void testAppendItemAfterSetCurrent()
    {
        StringItem hyperlink = new StringItem("label", "url",
                                              StringItem.HYPERLINK);
        StringItem button1 = new StringItem(null, "button1",
                                            StringItem.BUTTON);

        Command dummyCommand = new Command("dummy", "", Command.ITEM, 0);
        button1.addCommand(dummyCommand);

        Command ok = new Command("Ok", "", Command.ITEM, 0);

        setCurrent(form);

        form.append(button1);
        form.append(hyperlink);

        hyperlink.setItemCommandListener(this);
        hyperlink.addCommand(ok);

        // Give some time for layouter because adding command to hyperlink
        // means relayouting:
        block(CHANGE_DISPLAYABLE_DELAY);

        // Move to hyperlink, click command and verify it works:
        key(Key.RightArrow);
        key(Key.CBA1);
        assertItemCmdListener("case1", ok, hyperlink);

        // Click command by using MSK and verify it works:
        key(Key.Select);
        assertItemCmdListener("case2", ok, hyperlink);
    }

    /**
     * Test that command are working properly in case of
     */
    public void testRemoveItemsWhenBackground()
    {
        Form forma = new Form("Form A");
        Form formb = new Form("Form B");
        Command dummyCommand1 = new Command("dummy1", "", Command.ITEM, 0);
        Command dummyCommand2 = new Command("dummy2", "", Command.ITEM, 0);
        Command dummyCommand3 = new Command("dummy3", "", Command.ITEM, 0);
        Command dummyCommand4 = new Command("dummy4", "", Command.ITEM, 0);
        Gauge g1 = new Gauge("Gauge1", true, 10, 0);
        Gauge g2 = new Gauge("Gauge2", true, 10, 0);
        Gauge g3 = new Gauge("Gauge3", true, 10, 0);
        Gauge g4 = new Gauge("Gauge4", true, 10, 0);
        setCurrent(forma);

        forma.append(g1);
        forma.append(g2);
        forma.append(g3);
        forma.append(g4);
        g1.addCommand(dummyCommand1);
        g1.setItemCommandListener(this);
        g2.addCommand(dummyCommand2);
        g2.setItemCommandListener(this);
        g3.addCommand(dummyCommand3);
        g3.setItemCommandListener(this);
        g4.addCommand(dummyCommand4);
        g4.setItemCommandListener(this);
        block(CHANGE_DISPLAYABLE_DELAY);
        key(Key.DownArrow);
        key(Key.DownArrow);
        key(Key.DownArrow);
        key(Key.Select);
        assertItemCmdListener("case1", dummyCommand4, g4);

        setCurrent(formb);

        //delete 3 list items from Form A
        forma.delete(1);
        forma.delete(1);
        forma.delete(1);
        formb.append(g2);
        block(CHANGE_DISPLAYABLE_DELAY);
        key(Key.Select);
        assertItemCmdListener("case2", dummyCommand2, g2);

        //check the focus was not changed when another item is added.
        formb.append(g3);
        block(CHANGE_DISPLAYABLE_DELAY);
        key(Key.Select);
        assertItemCmdListener("case3", dummyCommand2, g2);

        //switch displayble back to Form a
        setCurrent(forma);
        key(Key.Select);
        assertItemCmdListener("case4", dummyCommand1, g1);

        //delete first item from From B
        formb.delete(0);
        //add it to Form A
        forma.append(g2);
        block(CHANGE_DISPLAYABLE_DELAY);
        key(Key.DownArrow);
        key(Key.Select);
        assertItemCmdListener("case5", dummyCommand2, g2);
    }

}