javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt_uirobot/list/ListUITest.java
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt_uirobot/list/ListUITest.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,196 @@
+/*
+* 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 com.nokia.openlcdui.mt_uirobot.list;
+
+import junit.framework.*;
+
+import javax.microedition.lcdui.*;
+
+import com.nokia.openlcdui.mt_uirobot.UITestBase;
+
+import com.nokia.mj.impl.uitestutils.Key;
+
+/**
+ * TEST CASE SPECIFICATION <br>
+ * <br>
+ * Short description of the module test:
+ * <li> UI-robot based tests to test List's functionality. <br>
+ * <br>
+ * @created 7.8.2008
+ */
+public class ListUITest extends UITestBase {
+
+    private static final int SETCURRENT_TIMEOUT = 6000;
+    private static final int WAIT_CYCLE_TIME = 50;
+
+    private boolean syncFlag;
+
+    private Command lastCommand;
+    private Displayable lastDisplayable;
+
+    /**
+     * Constructor.
+     */
+    public ListUITest() {
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param sTestName name of the test
+     * @param rTestMethod TestMethod used
+     */
+    public ListUITest(String sTestName) {
+        super(sTestName);
+    }
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite();
+
+        java.util.Vector methodNames;
+	    java.util.Enumeration e;
+
+	    // Add widget tests
+	    methodNames = ListUITest.methodNames();
+	    e = methodNames.elements();
+	    while (e.hasMoreElements()) {
+	        suite.addTest(new ListUITest((String)e.nextElement()));
+	    }
+        
+        return suite;
+    }
+
+    public static java.util.Vector methodNames() {
+        java.util.Vector methodNames = new java.util.Vector();
+        methodNames.addElement("testDefaultSelectCmd");
+        return methodNames;
+    }
+    
+    public void runTest() throws Throwable {
+        if (getName().equals("testDefaultSelectCmd")) testDefaultSelectCmd();
+        else super.runTest();
+    }
+
+
+    /**
+     * Test method.
+     */
+    public void testDefaultSelectCmd() {
+        List list = new List("Implicit List", Choice.IMPLICIT);
+        list.setCommandListener(this);
+        assertSetCurrent(list);
+        list.append("item 1", null);
+        list.append("item 2", null);
+        list.append("item 3", null);
+        list.append("item 4", null);
+
+        clearCallbackValues();
+        key(Key.UpArrow);
+        key(Key.UpArrow);
+        key(Key.UpArrow);
+        key(Key.Select);
+        assertCommandListener(List.SELECT_COMMAND, list);
+        // TODO: assumes that eSWT table selection moves with latest added item
+        assertEquals("Wrong item selected", 0, list.getSelectedIndex());
+
+        clearCallbackValues();
+        Command command = new Command("Cmd1", null, Command.SCREEN, 0);
+        list.setSelectCommand(command);
+        key(Key.DownArrow);
+        key(Key.Select);
+        assertCommandListener(command, list);
+        assertEquals("Wrong item selected", 1, list.getSelectedIndex());
+    }
+
+    /**
+     * Catches commands and saves Command as well as Displayable to local member
+     * variables.
+     *
+     * @param aCommand Command.
+     * @param aDisplayable Displayable.
+     */
+    public void commandAction(Command aCommand, Displayable aDisplayable) {
+        lastCommand = aCommand;
+        lastDisplayable = aDisplayable;
+        doNotify();
+    }
+
+    /**
+     * Assert that changing displayable went fine.
+     *
+     * @param disp a displayable
+     */
+    protected void assertSetCurrent(Displayable disp) {
+        display.setCurrent(disp);
+        Displayable curr = null;
+        int waitSum = 0;
+        while (curr != disp && waitSum <= SETCURRENT_TIMEOUT) {
+            block(CHANGE_DISPLAYABLE_DELAY);
+            waitSum += CHANGE_DISPLAYABLE_DELAY;
+            curr = display.getCurrent();
+        }
+        assertEquals(disp + " should be current", disp, curr);
+    }
+
+    /**
+     * Assert the command listener values.
+     *
+     * @param expCmd expected Command
+     * @param expDisp expected Displayable
+     */
+    protected void assertCommandListener(Command expCmd, Displayable expDisp) {
+        assertTrue("Command listener wasn't called with " + expCmd.getLabel(),
+                syncFlag);
+        assertEquals("Last displayable mismatch", expDisp, lastDisplayable);
+        assertEquals("Last command should be " + expCmd.getLabel(), expCmd,
+                lastCommand);
+    }
+
+    /**
+     * Wait until someone calls doNotify or the timeout expires.
+     *
+     * @param timeout timeout
+     * @return true if the doNotify was called during this, else otherwise
+     */
+    protected boolean doWait(int timeout) {
+        clearCallbackValues();
+        int waitSum = 0;
+        // wait here until syncFlag gets true or timeout expires
+        while (!syncFlag && waitSum <= timeout) {
+            block(WAIT_CYCLE_TIME);
+            waitSum += WAIT_CYCLE_TIME;
+        }
+        return syncFlag;
+    }
+
+    /**
+     * Notify the doWait method.
+     */
+    protected void doNotify() {
+        syncFlag = true;
+    }
+
+    /**
+     * Clear command listener values.
+     */
+    protected void clearCallbackValues() {
+        syncFlag = false;
+        lastCommand = null;
+        lastDisplayable = null;
+    }
+
+}