org.jboss.reddeer.jface.test.viewer.TreeViewerHandlerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.reddeer.jface.test.viewer.TreeViewerHandlerTest.java

Source

/******************************************************************************* 
 * Copyright (c) 2016 Red Hat, Inc. 
 * Distributed under license by Red Hat, Inc. All rights reserved. 
 * This program is 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: 
 * Red Hat, Inc. - initial API and implementation 
 ******************************************************************************/
package org.jboss.reddeer.jface.test.viewer;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import org.eclipse.jface.preference.JFacePreferences;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.jboss.reddeer.jface.exception.JFaceLayerException;
import org.jboss.reddeer.jface.viewer.handler.TreeViewerHandler;
import org.jboss.reddeer.junit.runner.RedDeerSuite;
import org.jboss.reddeer.core.condition.ShellWithTextIsActive;
import org.jboss.reddeer.swt.impl.tree.DefaultTree;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(RedDeerSuite.class)
public class TreeViewerHandlerTest {

    private static String title = "Testing shell";

    private TreeViewerHandler treeViewerHandler = TreeViewerHandler.getInstance();

    @Before
    public void setUp() {
        org.jboss.reddeer.core.util.Display.syncExec(new Runnable() {
            @Override
            public void run() {
                JFaceResources.getColorRegistry().put(JFacePreferences.COUNTER_COLOR, new RGB(0, 127, 174));

                Shell shell = new Shell(Display.getDefault(), SWT.CLOSE | SWT.RESIZE);
                shell.setText(title);
                shell.setSize(400, 400);
                shell.setLayout(new GridLayout(2, false));

                Composite composite = createPartControl(shell);
                composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));

                shell.open();
            }
        });
    }

    @After
    public void cleanup() {
        org.jboss.reddeer.core.util.Display.syncExec(new Runnable() {
            @Override
            public void run() {
                for (Shell shell : org.jboss.reddeer.core.util.Display.getDisplay().getShells()) {
                    if (shell.getText().equals(title)) {
                        shell.dispose();
                        break;
                    }
                }
                new WaitWhile(new ShellWithTextIsActive(title));
            }
        });
    }

    @Test
    public void nonStyledTextTreeItem1Tree1() {
        String txt = treeViewerHandler.getNonStyledText(new DefaultTree(0).getItems().get(0));
        assertTrue("Non-styled was " + "'" + txt + "', but should be '0nonstyled1'", txt.equals("0nonstyled1"));
    }

    @Test
    public void nonStyledTextTreeItem2Tree1() {
        String txt = treeViewerHandler.getNonStyledText(new DefaultTree(0).getItems().get(1));
        assertTrue("Non-styled was " + "'" + txt + "', but should be '1nonstyled1'", txt.equals("1nonstyled1"));
    }

    @Test
    public void nonStyledTextTreeItem3Tree1() {
        String txt = treeViewerHandler.getNonStyledText(new DefaultTree(0).getItems().get(2));
        assertTrue("Non-styled was " + "'" + txt + "', but should be '2nonstyled1'", txt.equals("2nonstyled1"));
    }

    @Test
    public void nonStyledTextTreeItem4Tree1() {
        String txt = treeViewerHandler.getNonStyledText(new DefaultTree(0).getItems().get(3));
        assertTrue("Non-styled was " + "'" + txt + "', but should be '3nonstyled1'", txt.equals("3nonstyled1"));
    }

    @Test
    public void getStyledPrefixTreeItem2Tree1() {
        String txt = treeViewerHandler.getStyledTexts(new DefaultTree(0).getItems().get(1))[0];
        assertTrue("Styled prefix was " + "'" + txt + "', but should be '1spre1'", txt.equals("1spre1"));
    }

    @Test
    public void getStyledPrefixTreeItem4Tree1() {
        String txt = treeViewerHandler.getStyledTexts(new DefaultTree(0).getItems().get(3))[0];
        assertTrue("Styled prefix was " + "'" + txt + "', but should be '3spre1'", txt.equals("3spre1"));
    }

    @Test
    public void getStyledPostfixTreeItem3Tree1() {
        String txt = treeViewerHandler.getStyledTexts(new DefaultTree(0).getItems().get(2))[0];
        assertTrue("Styled postfix was " + "'" + txt + "', but should be '2spost1'", txt.equals("2spost1"));
    }

    @Test
    public void getStyledPostfixTreeItem4Tree1() {
        String txt = treeViewerHandler.getStyledTexts(new DefaultTree(0).getItems().get(3))[1];
        assertTrue("Styled postfix was " + "'" + txt + "', but should be '3spost1'", txt.equals("3spost1"));
    }

    @Test
    public void treeItem1Tree2() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(1), "0nonstyled2");
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 1 from second tree");
        }
    }

    @Test
    public void treeItem1Tree1() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(0), new String[] { "0nonstyled1" });
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 1 from first tree");
        }
    }

    @Test
    public void treeItem1PathTree2() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(1), new String[] { "0nonstyled2" });
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 1 from second tree");
        }
    }

    @Test
    public void treeItem2Tree2() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(1), "1nonstyled2");
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 2 from second tree");
        }
    }

    @Test
    public void treeItem3Tree2() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(1), "2nonstyled2");
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 3 from second tree");
        }
    }

    @Test
    public void treeItem4Tree2() {
        try {
            treeViewerHandler.getTreeItem(new DefaultTree(1), "3nonstyled2");
        } catch (JFaceLayerException ex) {
            fail("Cannot get TreeItem 4 from second tree");
        }
    }

    private Composite createPartControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);

        composite.setLayout(new GridLayout(2, true));

        Label label = new Label(composite, SWT.NONE);
        label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
        label.setText("Tree with decorators #1");

        Label label2 = new Label(composite, SWT.NONE);
        label2.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, false));
        label2.setText("Tree with decorators #2");

        // First tree  viewer
        final TreeViewer treeViewer = new TreeViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

        StyledTreeItemLabelProvider labelProvider = new StyledTreeItemLabelProvider(1);
        TreeItemProvider treeItemProvider = new TreeItemProvider();

        treeViewer.setLabelProvider(labelProvider);
        treeViewer.setContentProvider(treeItemProvider);

        GridData data = new GridData(GridData.BEGINNING, GridData.FILL, true, true);
        treeViewer.getControl().setLayoutData(data);
        treeViewer.setInput(new Object());

        // Second tree viewer
        final TreeViewer treeViewer2 = new TreeViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

        StyledTreeItemLabelProvider labelProvider2 = new StyledTreeItemLabelProvider(2);
        TreeItemProvider treeItemProvider2 = new TreeItemProvider();

        treeViewer2.setLabelProvider(labelProvider2);
        treeViewer2.setContentProvider(treeItemProvider2);

        GridData data2 = new GridData(GridData.END, GridData.FILL, true, true);
        treeViewer2.getControl().setLayoutData(data2);
        treeViewer2.setInput(new Object());

        return composite;
    }

    private static class StyledTreeItemLabelProvider extends StyledCellLabelProvider {

        private int modifier;

        public StyledTreeItemLabelProvider(int modifier) {
            this.modifier = modifier;
        }

        @Override
        public void update(ViewerCell cell) {
            // result on given cell text
            String cellText = (String) cell.getElement();

            StyledString styledLabel = new StyledString();

            String customLabel;
            if (cellText.contains("1")) {
                if (cellText.contains("2")) {
                    customLabel = "3";
                } else {
                    customLabel = "1";
                }
            } else {
                if (cellText.contains("2")) {
                    customLabel = "2";
                } else {
                    customLabel = "0";
                }
            }

            if (cellText.contains("1")) {
                styledLabel.append(customLabel + "spre" + modifier, StyledString.COUNTER_STYLER);
                styledLabel.append(" ", null);
            }

            styledLabel.append(customLabel + "nonstyled" + modifier, null);

            if (cellText.contains("2")) {
                styledLabel.append(" ", null);
                styledLabel.append(customLabel + "spost" + modifier, StyledString.COUNTER_STYLER);
            }

            cell.setText(styledLabel.toString());
            cell.setStyleRanges(styledLabel.getStyleRanges());

            super.update(cell);
        }

        @Override
        protected void measure(Event event, Object element) {
            super.measure(event, element);
        }
    }

    private static class TreeItemProvider implements ITreeContentProvider {

        @Override
        public Object[] getElements(Object element) {
            String[] items = new String[4];
            // 1 mean styled prefix, 0 non-styled text, 2 styled postfix
            items[0] = "0";
            items[1] = "1 0";
            items[2] = "0 2";
            items[3] = "1 0 2";
            return items;
        }

        @Override
        public void dispose() {
        }

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }

        @Override
        public Object[] getChildren(Object arg0) {
            return null;
        }

        @Override
        public Object getParent(Object arg0) {
            return null;
        }

        @Override
        public boolean hasChildren(Object arg0) {
            return false;
        }
    }
}