/******************************************************************************* * 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.custom.CCombo; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; import org.eclipse.riena.core.test.RienaTestCase; import org.eclipse.riena.core.test.collect.UITestCase; import org.eclipse.riena.core.util.ReflectionUtils; import org.eclipse.riena.ui.ridgets.IComboRidget; import org.eclipse.riena.ui.ridgets.IDateTextRidget; import org.eclipse.riena.ui.ridgets.IRidget; import org.eclipse.riena.ui.ridgets.swt.DefaultRealm; import org.eclipse.riena.ui.swt.CompletionCombo; import org.eclipse.riena.ui.swt.DatePickerComposite; import org.eclipse.riena.ui.swt.ImageButton; import org.eclipse.riena.ui.swt.utils.UIControlsFactory; /** * Tests for {@link DisabledMarkerVisualizer}. */ @UITestCase public class DisabledMarkerVisualizerTest extends RienaTestCase { private Shell shell; private DefaultRealm realm; @Override protected void setUp() throws Exception { super.setUp(); shell = new Shell(); realm = new DefaultRealm(); } @Override protected void tearDown() throws Exception { if (shell != null) { shell.dispose(); shell = null; } if (realm != null) { realm.dispose(); realm = null; } super.tearDown(); } // testing methods ////////////////// public void testGetChildrenFromComposite() { final Composite parent = new Composite(shell, SWT.NONE); new Label(parent, SWT.NONE); new Text(parent, SWT.NONE); final DisabledMarkerVisualizer visualizer = new DisabledMarkerVisualizer(null); final Control[] result = ReflectionUtils.invokeHidden(visualizer, "getChildren", parent); //$NON-NLS-1$ assertEquals(2, result.length); assertTrue(result[0] instanceof Label); assertTrue(result[1] instanceof Text); } /** * As per Bug 318301. */ public void testGetChildrenFromCCombo() { final CCombo parent = new CCombo(shell, SWT.NONE); final DisabledMarkerVisualizer visualizer = new DisabledMarkerVisualizer(null); final Control[] result = ReflectionUtils.invokeHidden(visualizer, "getChildren", parent); //$NON-NLS-1$ assertEquals(2, result.length); assertTrue(result[0] instanceof Text); assertTrue(result[1] instanceof Button); } /** * As per Bug 322030 */ public void testVisualizerAndDatePickerEnablement() { final IDateTextRidget ridget = new DateTextRidget(); final DatePickerComposite control = new DatePickerComposite(shell, SWT.NONE); final Button pickerButton = ReflectionUtils.getHidden(control, "pickerButton"); //$NON-NLS-1$ ridget.setUIControl(control); ridget.setOutputOnly(true); assertFalse(pickerButton.isEnabled()); final DisabledMarkerVisualizer visualizer = new DisabledMarkerVisualizer(ridget); ReflectionUtils.invokeHidden(visualizer, "updateDisabled", control, false); //$NON-NLS-1$ assertFalse(pickerButton.isEnabled()); ReflectionUtils.invokeHidden(visualizer, "updateDisabled", control, true); //$NON-NLS-1$ assertFalse(pickerButton.isEnabled()); } /** * As per Bug 322030 */ public void testVisualizerAndCompletionComboEnablement() { final IComboRidget ridget = new CompletionComboRidget(); final CompletionCombo control = UIControlsFactory.createCompletionCombo(shell, SWT.NONE); final Button arrow = ReflectionUtils.getHidden(control, "arrow"); //$NON-NLS-1$ ridget.setUIControl(control); ridget.setOutputOnly(true); assertFalse(arrow.isEnabled()); final DisabledMarkerVisualizer visualizer = new DisabledMarkerVisualizer(ridget); ReflectionUtils.invokeHidden(visualizer, "updateDisabled", control, false); //$NON-NLS-1$ assertFalse(arrow.isEnabled()); ReflectionUtils.invokeHidden(visualizer, "updateDisabled", control, true); //$NON-NLS-1$ assertFalse(arrow.isEnabled()); } /** * Tests the method {@code dontAddDisabledPainter}. */ public void testDontAddDisabledPainter() { final MyDisabledMarkerVisualizer visualizer = new MyDisabledMarkerVisualizer(null); final Text text = UIControlsFactory.createText(shell, SWT.BORDER); final Button button = UIControlsFactory.createButton(shell, "OK"); //$NON-NLS-1$ final Label label = UIControlsFactory.createLabel(shell, "Text"); //$NON-NLS-1$ final ImageButton imageButton = UIControlsFactory.createImageButton(shell, SWT.NONE); IRenderDisabledStateWidget[] renderDisabledStateWidgets = new IRenderDisabledStateWidget[] {}; MyDisabledMarkerVisualizer.update(renderDisabledStateWidgets); assertFalse(visualizer.dontAddDisabledPainter(text)); assertFalse(visualizer.dontAddDisabledPainter(button)); assertFalse(visualizer.dontAddDisabledPainter(label)); assertFalse(visualizer.dontAddDisabledPainter(imageButton)); renderDisabledStateWidgets = new IRenderDisabledStateWidget[] { new MyRenderDisabledStateWidget(Button.class), new MyRenderDisabledStateWidget(Label.class), new MyRenderDisabledStateWidget(ImageButton.class) }; MyDisabledMarkerVisualizer.update(renderDisabledStateWidgets); assertFalse(visualizer.dontAddDisabledPainter(text)); assertTrue(visualizer.dontAddDisabledPainter(button)); assertTrue(visualizer.dontAddDisabledPainter(label)); assertTrue(visualizer.dontAddDisabledPainter(imageButton)); } private class MyDisabledMarkerVisualizer extends DisabledMarkerVisualizer { public MyDisabledMarkerVisualizer(final IRidget ridget) { super(ridget); } @Override public boolean dontAddDisabledPainter(final Control control) { return super.dontAddDisabledPainter(control); } } private class MyRenderDisabledStateWidget implements IRenderDisabledStateWidget { private final Class<? extends Widget> widgetClass; public MyRenderDisabledStateWidget(final Class<? extends Widget> widgetClass) { this.widgetClass = widgetClass; } public Class<? extends Widget> getWidgetClass() { return widgetClass; } } }