/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.internal.ui.ridgets.swt;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.riena.core.util.ReflectionUtils;
import org.eclipse.riena.internal.ui.swt.test.UITestHelper;
import org.eclipse.riena.ui.ridgets.IDateTextRidget;
import org.eclipse.riena.ui.ridgets.IRidget;
import org.eclipse.riena.ui.swt.DatePickerComposite;
import org.eclipse.riena.ui.swt.utils.UIControlsFactory;
/**
* A {@link DateTextRidget} can wrap either a {@link Text} or a
* {@link DatePickerComposite} widget. This test case is for DateTextRidget
* using DatePickerComposite as the ridget's underlying control.
*
* @see DateTextRidgetTest
*/
public class DateTextRidgetWithDatePickerCompositeTest extends AbstractSWTRidgetTest {
@Override
protected IRidget createRidget() {
final DateTextRidget result = new DateTextRidget();
result.setFormat(IDateTextRidget.FORMAT_DDMMYYYY);
return result;
}
@Override
protected DateTextRidget getRidget() {
return (DateTextRidget) super.getRidget();
}
@Override
protected Control createWidget(final Composite parent) {
final Control result = new DatePickerComposite(getShell(), SWT.SINGLE | SWT.RIGHT);
result.setData(UIControlsFactory.KEY_TYPE, UIControlsFactory.TYPE_DATE);
result.setLayoutData(new RowData(100, SWT.DEFAULT));
return result;
}
@Override
protected DatePickerComposite getWidget() {
return (DatePickerComposite) super.getWidget();
}
/**
* With a DatePickerComposite as the ridget's underlying control,
* {@link IRidget#getUIControl()} returns a reference to the
* DatePickerComposite widget, and {@link TextRidget#getTextWidget()}
* returns a reference to the Text widget contained inside the
* DatePickerComposite instance.
*/
public void testUIControlVsTextWidgetDistinction() {
final DateTextRidget ridget = getRidget();
assertTrue(ridget.getUIControl() instanceof DatePickerComposite);
final Object textWidget = ReflectionUtils.invokeHidden(ridget, "getTextWidget", (Object[]) null);
assertTrue(textWidget instanceof Text);
}
/**
* Test to make sure that the whole of the date picker is hidden and
* re-shown. (It notably tests that not just the Text widget contained in
* the DatePickerComposite is hidden but the whole composite.)
*/
public void testVisibility() {
final DateTextRidget ridget = getRidget();
final Text text = (Text) ReflectionUtils.invokeHidden(ridget, "getTextWidget", (Object[]) null);
assertTrue(text.isVisible());
ridget.setVisible(false);
assertFalse(ridget.isVisible());
assertFalse(text.getParent().isVisible());
assertFalse(text.isVisible());
assertTrue(text.getVisible());
ridget.setVisible(true);
assertTrue(ridget.isVisible());
assertTrue(text.isVisible());
assertTrue(text.getParent().isVisible());
}
/**
* As per Bug 317564.
*/
public void testPickerButtonDisabledWhenOutputOnly() {
final DateTextRidget ridget = getRidget();
final DatePickerComposite control = getWidget();
final Button pickerButton = (Button) ReflectionUtils.getHidden(control, "pickerButton");
assertTrue(ridget.isEnabled());
assertFalse(ridget.isOutputOnly());
assertTrue(control.isEnabled());
assertTrue(pickerButton.isEnabled());
ridget.setOutputOnly(true);
assertTrue(control.isEnabled());
assertFalse(pickerButton.isEnabled());
ridget.setOutputOnly(false);
assertTrue(control.isEnabled());
assertTrue(pickerButton.isEnabled());
ridget.setEnabled(false);
assertFalse(control.isEnabled());
assertFalse(pickerButton.isEnabled());
ridget.setEnabled(true);
assertTrue(control.isEnabled());
assertTrue(pickerButton.isEnabled());
// not editable, toggle enabled
ridget.setOutputOnly(true);
ridget.setEnabled(false);
ridget.setEnabled(true);
UITestHelper.readAndDispatch(control);
assertTrue(control.isEnabled());
assertFalse(pickerButton.isEnabled());
// reset
ridget.setOutputOnly(false);
// not ednabled, toggle editable
ridget.setEnabled(false);
ridget.setOutputOnly(true);
ridget.setOutputOnly(false);
UITestHelper.readAndDispatch(control);
assertFalse(control.isEnabled());
assertFalse(pickerButton.isEnabled());
}
}