/****************************************************************************
* Copyright (c) 2008 Jeremy Dowdall
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Jeremy Dowdall <jeremyd@aspencloud.com> - initial API and implementation
*****************************************************************************/
package org.eclipse.nebula.widgets.cdatetime;
import java.util.Calendar;
import java.util.Date;
import org.eclipse.nebula.cwt.test.AbstractVTestCase;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
public class FocusTests extends AbstractVTestCase {
private CdtTester tester;
private Button button;
private Button button1;
private Button button2;
private CDateTime cdt1;
private CDateTime cdt2;
public void setUp1() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN);
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE);
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp2() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE);
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN);
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp3() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE);
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN);
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp4() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN);
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE);
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp5() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN | CDT.TAB_FIELDS);
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE | CDT.TAB_FIELDS);
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp6() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN | CDT.TAB_FIELDS);
cdt1.setPattern("z MM/dd/yyyy");
cdt1.setSelection(new Date());
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE | CDT.TAB_FIELDS);
cdt2.setPattern("MM/dd/yyyy");
cdt2.setSelection(new Date());
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
public void setUp7() throws Exception {
Shell shell = getShell();
shell.setLayout(new GridLayout(4, false));
button1 = new Button(shell, SWT.TOGGLE);
button1.setText("B1");
button1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt1 = new CDateTime(shell, CDT.BORDER | CDT.DROP_DOWN | CDT.TAB_FIELDS);
cdt1.setPattern("MM/dd/yyyy z");
cdt1.setSelection(new Date());
cdt1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
cdt2 = new CDateTime(shell, CDT.BORDER | CDT.SIMPLE | CDT.TAB_FIELDS);
cdt2.setPattern("MM/dd/yyyy");
cdt2.setSelection(new Date());
cdt2.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
}
private Listener listener;
public void focusListenersSetup() {
listener = new Listener() {
public void handleEvent(Event event) {
if(SWT.FocusIn == event.type) {
System.out.println("FocusIn: " + event.widget);
} else if(SWT.FocusOut == event.type) {
System.out.println("FocusOut: " + event.widget);
}
}
};
cdt1 = new CDateTime(getShell(), CDT.BORDER | CDT.SIMPLE);
cdt1.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
System.out.println("FocusGained: cdt1");
}
public void focusLost(FocusEvent e) {
System.out.println("FocusLost: cdt1");
}
});
cdt1.addListener(SWT.FocusIn, listener);
cdt1.addListener(SWT.FocusOut, listener);
cdt2 = new CDateTime(getShell(), CDT.BORDER | CDT.SIMPLE);
cdt2.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
System.out.println("FocusGained: cd2");
}
public void focusLost(FocusEvent e) {
System.out.println("FocusLost: cd2");
}
});
cdt2.addListener(SWT.FocusIn, listener);
cdt2.addListener(SWT.FocusOut, listener);
}
public void testFocusListeners() {
assertTrue(hasFocus(cdt1));
System.out.println("click cdt1");
click(cdt1);
System.out.println("click cdt2");
click(cdt2);
}
public void testMouse_1() {
assertTrue(hasFocus(button1));
click(button1);
assertTrue(hasFocus(button1));
click(cdt1);
assertTrue(hasFocus(cdt1.getTextWidget()));
click(button2);
assertTrue(hasFocus(button2));
click(cdt2);
assertTrue(hasFocus(cdt2));
}
public void testTabFieldsForward_5() {
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button1));
}
public void testTabFieldsForward_6() {
syncExec(new Runnable() {
public void run() {
button1.setFocus();
}
});
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button1));
}
public void testTabFieldsReverse_5() {
assertTrue(hasFocus(button1));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyUp(SWT.SHIFT);
}
public void testTabFieldsReverse_7() {
syncExec(new Runnable() {
public void run() {
button1.setFocus();
}
});
assertTrue(hasFocus(button1));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyUp(SWT.SHIFT);
}
public void testTabKeyForward_1() {
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button1));
}
public void testTabKeyForward_2() {
assertTrue(hasFocus(getComposite(getPanel(cdt1))));
keyPress('\t');
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt2.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(getPanel(cdt1).getComposite()));
}
public void testTabKeyForward_3() {
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(getPanel(cdt1).getComposite()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
}
public void testTabKeyForward_4() {
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
}
public void testTabKeyReverse_1() {
assertTrue(hasFocus(button1));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyUp(SWT.SHIFT);
}
public void testTabKeyReverse_2() {
assertTrue(hasFocus(getPanel(cdt1).getComposite()));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(getPanel(cdt1).getComposite()));
keyUp(SWT.SHIFT);
}
public void testTabKeyReverse_3() {
assertTrue(hasFocus(button1));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(cdt2.getTextWidget()));
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(getPanel(cdt1).getComposite()));
keyPress('\t');
assertTrue(hasFocus(button1));
keyUp(SWT.SHIFT);
}
public void testTabKeyReverse_4() {
assertTrue(hasFocus(cdt1.getTextWidget()));
keyDown(SWT.SHIFT);
keyPress('\t');
assertTrue(hasFocus(button2));
keyPress('\t');
assertTrue(hasFocus(cdt2));
keyPress('\t');
assertTrue(hasFocus(button1));
keyPress('\t');
assertTrue(hasFocus(cdt1.getTextWidget()));
keyUp(SWT.SHIFT);
}
public void dateUpdatedAfterFocusLostSetup() {
tester = new CdtTester(getShell(), CDT.BORDER | CDT.DROP_DOWN | CDT.COMPACT);
tester.setPattern("dd");
Calendar cal = tester.getCalendarInstance();
cal.set(Calendar.DATE, 1);
tester.setSelection(cal.getTime());
button = new Button(getShell(), SWT.PUSH);
button.setText("test");
}
public void testDateUpdatedAfterFocusLost() {
assertEquals("01", tester.getText());
// test focusOut from mouse click
Date date = tester.getSelection();
delay(1000);
click(tester.getCDateTime().getTextWidget());
delay(1000);
keyPress('0');
keyPress('3');
delay(1000);
click(button);
delay(1000);
System.out.println(tester.getSelection());
System.out.println(date);
assertEquals("03", tester.getText());
assertFalse("Dates should not equal", date.equals(tester.getSelection()));
// test focusOut from tab key
date = tester.getCalendarTime();
click(tester.getCDateTime().getTextWidget());
keyPress('0');
keyPress('5');
keyPress('\t');
assertEquals("05", tester.getText());
assertFalse("Dates should not equal", date.equals(tester.getCalendarTime()));
}
private void delay(int i) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}