org.eclipse.riena.internal.ui.ridgets.swt.MessageBoxRidgetTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.riena.internal.ui.ridgets.swt.MessageBoxRidgetTest.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2013 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 java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

import org.eclipse.riena.internal.ui.swt.test.UITestHelper;
import org.eclipse.riena.ui.ridgets.IMessageBoxRidget;
import org.eclipse.riena.ui.ridgets.IMessageBoxRidget.MessageBoxOption;
import org.eclipse.riena.ui.ridgets.IRidget;
import org.eclipse.riena.ui.ridgets.listener.FocusEvent;
import org.eclipse.riena.ui.ridgets.listener.IFocusListener;
import org.eclipse.riena.ui.swt.MessageBox;

/**
 * Tests for the MessageBoxRidget.
 */
public class MessageBoxRidgetTest extends AbstractRidgetTestCase {

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.riena.internal.ui.ridgets.swt.AbstractSWTRidgetTest#createWidget
     * (org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected MessageBox createWidget(final Composite parent) {
        return new MockMessageBox(parent);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.riena.internal.ui.ridgets.swt.AbstractSWTRidgetNonWidgetTest
     * #createRidget()
     */
    @Override
    protected IRidget createRidget() {
        return new MessageBoxRidget();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.riena.internal.ui.ridgets.swt.AbstractSWTRidgetNonWidgetTest
     * #getRidget()
     */
    @Override
    protected IMessageBoxRidget getRidget() {
        return (IMessageBoxRidget) super.getRidget();
    }

    @Override
    protected MockMessageBox getWidget() {
        return (MockMessageBox) super.getWidget();
    }

    public void testSetText() throws Exception {

        // show message box to transfer values set
        getRidget().show();

        assertNull(getWidget().text);
        assertNull(getRidget().getText());

        getRidget().setText("TestMessageText");
        // show message box to transfer values set
        getRidget().show();

        assertEquals("TestMessageText", getWidget().text);
        assertEquals("TestMessageText", getRidget().getText());
    }

    public void testSetTitle() throws Exception {

        // show message box to transfer values set
        getRidget().show();

        assertNull(getWidget().title);
        assertNull(getRidget().getTitle());

        getRidget().setTitle("TestMessageTitle");
        // show message box to transfer values set
        getRidget().show();

        assertEquals("TestMessageTitle", getWidget().title);
        assertEquals("TestMessageTitle", getRidget().getTitle());
    }

    public void testSetType() throws Exception {

        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.NONE, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.PLAIN, getRidget().getType());

        getRidget().setType(IMessageBoxRidget.Type.ERROR);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.ERROR, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.ERROR, getRidget().getType());

        getRidget().setType(IMessageBoxRidget.Type.WARNING);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.WARNING, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.WARNING, getRidget().getType());

        getRidget().setType(IMessageBoxRidget.Type.INFORMATION);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.INFORMATION, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.INFORMATION, getRidget().getType());

        getRidget().setType(IMessageBoxRidget.Type.HELP);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.INFORMATION, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.HELP, getRidget().getType());

        getRidget().setType(IMessageBoxRidget.Type.QUESTION);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.QUESTION, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.QUESTION, getRidget().getType());

        getRidget().setType(null);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(MessageDialog.NONE, getWidget().type);
        assertEquals(IMessageBoxRidget.Type.PLAIN, getRidget().getType());
    }

    public void testSetOptions() throws Exception {

        // show message box to transfer values set
        getRidget().show();

        assertEquals(1, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.OK_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IMessageBoxRidget.OPTIONS_OK, getRidget().getOptions());

        getRidget().setOptions(IMessageBoxRidget.OPTIONS_YES_NO);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(2, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.YES_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IDialogConstants.NO_LABEL, getWidget().buttonLabels[1]);
        assertEquals(IMessageBoxRidget.OPTIONS_YES_NO, getRidget().getOptions());

        getRidget().setOptions(IMessageBoxRidget.OPTIONS_OK_CANCEL);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(2, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.OK_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IDialogConstants.CANCEL_LABEL, getWidget().buttonLabels[1]);
        assertEquals(IMessageBoxRidget.OPTIONS_OK_CANCEL, getRidget().getOptions());

        getRidget().setOptions(IMessageBoxRidget.OPTIONS_YES_NO_CANCEL);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(3, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.YES_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IDialogConstants.NO_LABEL, getWidget().buttonLabels[1]);
        assertEquals(IDialogConstants.CANCEL_LABEL, getWidget().buttonLabels[2]);
        assertEquals(IMessageBoxRidget.OPTIONS_YES_NO_CANCEL, getRidget().getOptions());

        final MessageBoxOption[] semiCustomOptions = new IMessageBoxRidget.MessageBoxOption[] {
                IMessageBoxRidget.OK, new IMessageBoxRidget.MessageBoxOption("TestCustomOptionText") };
        getRidget().setOptions(semiCustomOptions);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(2, getWidget().buttonLabels.length);
        assertEquals("OK", getWidget().buttonLabels[0]);
        assertEquals("TestCustomOptionText", getWidget().buttonLabels[1]);
        assertEquals(semiCustomOptions, getRidget().getOptions());

        final MessageBoxOption[] customOptions = new IMessageBoxRidget.MessageBoxOption[] {
                new IMessageBoxRidget.MessageBoxOption("TestCustomOptionText1"),
                new IMessageBoxRidget.MessageBoxOption("TestCustomOptionText2"),
                new IMessageBoxRidget.MessageBoxOption("TestCustomOptionText3") };
        getRidget().setOptions(customOptions);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(3, getWidget().buttonLabels.length);
        assertEquals("TestCustomOptionText1", getWidget().buttonLabels[0]);
        assertEquals("TestCustomOptionText2", getWidget().buttonLabels[1]);
        assertEquals("TestCustomOptionText3", getWidget().buttonLabels[2]);
        assertEquals(customOptions, getRidget().getOptions());

        getRidget().setOptions(IMessageBoxRidget.OPTIONS_OK);
        // show message box to transfer values set
        getRidget().show();

        assertEquals(1, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.OK_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IMessageBoxRidget.OPTIONS_OK, getRidget().getOptions());
    }

    public void testUsedInSharedView() throws Exception {

        getRidget().setText("TestMessageText1");
        getRidget().setTitle("TestMessageTitle1");
        getRidget().setType(IMessageBoxRidget.Type.QUESTION);
        getRidget().setOptions(IMessageBoxRidget.OPTIONS_OK_CANCEL);
        // show message box to transfer values set
        getRidget().show();

        final IMessageBoxRidget ridget2 = new MessageBoxRidget();
        ridget2.setText("TestMessageText2");
        ridget2.setTitle("TestMessageTitle2");
        ridget2.setType(IMessageBoxRidget.Type.WARNING);
        ridget2.setOptions(new IMessageBoxRidget.MessageBoxOption[] {
                new IMessageBoxRidget.MessageBoxOption("TestCustomOption") });

        getRidget().setUIControl(null);
        ridget2.setUIControl(getWidget());
        // show message box to transfer values set
        ridget2.show();

        assertEquals("TestMessageText2", getWidget().text);
        assertEquals("TestMessageTitle2", getWidget().title);
        assertEquals(MessageDialog.WARNING, getWidget().type);
        assertEquals(1, getWidget().buttonLabels.length);
        assertEquals("TestCustomOption", getWidget().buttonLabels[0]);

        getRidget().setUIControl(getWidget());
        // show message box to transfer values set
        getRidget().show();
        ridget2.setUIControl(null);

        assertEquals("TestMessageText1", getWidget().text);
        assertEquals("TestMessageTitle1", getWidget().title);
        assertEquals(MessageDialog.QUESTION, getWidget().type);
        assertEquals(2, getWidget().buttonLabels.length);
        assertEquals(IDialogConstants.OK_LABEL, getWidget().buttonLabels[0]);
        assertEquals(IDialogConstants.CANCEL_LABEL, getWidget().buttonLabels[1]);
    }

    public void testShow() throws Exception {

        getRidget().setTitle("TestMessageTitle");
        getRidget().setText("TestMessageText");
        getRidget().setType(IMessageBoxRidget.Type.QUESTION);
        getRidget().setOptions(IMessageBoxRidget.OPTIONS_YES_NO);

        // simulate 'yes' button, i.e. button with id 0 is clicked.
        setMessageBoxReturnValue(0);

        assertEquals(IMessageBoxRidget.YES, getRidget().show());

        // simulate 'close' button, i.e. button with id SWT.DEFAULT is clicked.
        setMessageBoxReturnValue(SWT.DEFAULT);

        assertEquals(IMessageBoxRidget.CLOSED, getRidget().show());

        final IMessageBoxRidget.MessageBoxOption option3 = new IMessageBoxRidget.MessageBoxOption(
                "TestCustomOption3");
        getRidget().setOptions(new IMessageBoxRidget.MessageBoxOption[] {
                new IMessageBoxRidget.MessageBoxOption("TestCustomOption1"),
                new IMessageBoxRidget.MessageBoxOption("TestCustomOption2"), option3,
                new IMessageBoxRidget.MessageBoxOption("TestCustomOption4") });

        setMessageBoxReturnValue(2);

        assertEquals(option3, getRidget().show());

        // simulate 'close' button, i.e. button with id SWT.DEFAULT is clicked.
        setMessageBoxReturnValue(SWT.DEFAULT);

        assertEquals(IMessageBoxRidget.CLOSED, getRidget().show());

        getRidget().setUIControl(null);

        assertNull(getRidget().show());
    }

    public void testGetID() throws Exception {

        getWidget().setPropertyName("testId");
        assertEquals("testId", getRidget().getID());
    }

    public void testGetSetUIControl() throws Exception {

        assertEquals(getWidget(), getRidget().getUIControl());
        getRidget().setUIControl(null);
        assertEquals(null, getRidget().getUIControl());
        getRidget().setUIControl(getWidget());
        assertEquals(getWidget(), getRidget().getUIControl());
    }

    public void testGetFocusable() {

        final IRidget aRidget = getRidget();

        assertTrue(aRidget.isFocusable());

        aRidget.setFocusable(false);

        assertFalse(aRidget.isFocusable());

        aRidget.setFocusable(true);

        assertTrue(aRidget.isFocusable());
    }

    public void testSetFocusable() {

        final IRidget aRidget = getRidget();
        final MockMessageBox aControl = getWidget();
        // getOtherControl().moveAbove(aControl); ???

        aControl.requestFocus();
        // TODO: focus not gained here, because control has to be shown to requested focus
        if (aControl.hasFocus()) { // skip if control cannot receive focus

            aRidget.setFocusable(false);
            getOtherControl().setFocus();

            assertTrue(getOtherControl().isFocusControl());

            UITestHelper.sendString(getOtherControl().getDisplay(), "\t");

            assertFalse(aControl.hasFocus());

            aRidget.setFocusable(true);

            getOtherControl().setFocus();
            UITestHelper.sendString(getOtherControl().getDisplay(), "\t");

            assertTrue(aControl.hasFocus());
        }
    }

    public void testRequestFocus() throws Exception {

        final MessageBox aControl = getWidget();
        aControl.requestFocus();
        // TODO: focus not gained here, because control has to be shown to requested focus
        if (aControl.hasFocus()) { // skip if control cannot receive focus
            assertTrue(getOtherControl().setFocus());

            assertFalse(aControl.hasFocus());
            assertFalse(getRidget().hasFocus());

            final List<FocusEvent> focusGainedEvents = new ArrayList<FocusEvent>();
            final List<FocusEvent> focusLostEvents = new ArrayList<FocusEvent>();
            final IFocusListener focusListener = new IFocusListener() {
                public void focusGained(final FocusEvent event) {
                    focusGainedEvents.add(event);
                }

                public void focusLost(final FocusEvent event) {
                    focusLostEvents.add(event);
                }
            };
            getRidget().addFocusListener(focusListener);

            getRidget().requestFocus();

            assertTrue(aControl.hasFocus());
            assertTrue(getRidget().hasFocus());
            assertEquals(1, focusGainedEvents.size());
            assertEquals(getRidget(), focusGainedEvents.get(0).getNewFocusOwner());
            assertEquals(0, focusLostEvents.size());

            assertTrue(getOtherControl().setFocus());

            assertFalse(aControl.hasFocus());
            assertFalse(getRidget().hasFocus());
            assertEquals(1, focusGainedEvents.size());
            assertEquals(1, focusLostEvents.size());
            assertEquals(getRidget(), focusLostEvents.get(0).getOldFocusOwner());

            getRidget().removeFocusListener(focusListener);

            getRidget().requestFocus();
            assertTrue(getOtherControl().setFocus());

            assertEquals(1, focusGainedEvents.size());
            assertEquals(1, focusLostEvents.size());
        }
    }

    @Override
    public void testFiresTooltipProperty() {
        // tooltips are not supported
    }

    @Override
    public void testIsVisible() {

        assertFalse(getRidget().isVisible());

        getRidget().setVisible(true);

        super.testIsVisible();
    }

    private void setMessageBoxReturnValue(final int returnValue) {
        getRidget().setUIControl(new MessageBox(getShell()) {

            @Override
            public void show(final String title, final String text, final int type, final String[] buttonLabels) {
            }

            @Override
            public int getResult() {
                return returnValue;
            }
        });
    }

    private void assertEquals(final MessageBoxOption[] expected, final MessageBoxOption[] actual) {
        if (Arrays.equals(expected, actual)) {
            return;
        }
        failNotEquals(null, expected, actual);
    }

    private final static class MockMessageBox extends MessageBox {

        private String title;
        private String text;
        private int type;
        private String[] buttonLabels;

        private MockMessageBox(final Composite parent) {
            super(parent);
        }

        @Override
        public void show(final String title, final String text, final int type, final String[] buttonLabels) {
            // save values her to check after showing that the call of show was performed with the correct arguments.
            this.title = title;
            this.text = text;
            this.type = type;
            this.buttonLabels = buttonLabels;
        }
    }

}