org.bonitasoft.studio.properties.test.TestConditionExpression.java Source code

Java tutorial

Introduction

Here is the source code for org.bonitasoft.studio.properties.test.TestConditionExpression.java

Source

/**
 * Copyright (C) 2012 BonitaSoft S.A.
 * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2.0 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.bonitasoft.studio.properties.test;

import org.bonitasoft.studio.common.ExpressionConstants;
import org.bonitasoft.studio.common.jface.SWTBotConstants;
import org.bonitasoft.studio.properties.i18n.Messages;
import org.bonitasoft.studio.test.swtbot.util.SWTBotTestUtil;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swtbot.eclipse.gef.finder.SWTBotGefTestCase;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.waits.Conditions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * @author Aurelie Zara
 *
 */

@RunWith(SWTBotJunit4ClassRunner.class)
public class TestConditionExpression extends SWTBotGefTestCase implements SWTBotConstants {
    private final String poolName = "Test Conditions";
    private final String poolVersion = "1.0";
    private final String validErrorMessage = "wrong XText validation, no underline error should be displayed";
    private final String unvalidErrorMessage = "wrong XText validation, underline error should be displayed";

    @Before
    public void initialiseTest() {
        SWTBotTestUtil.createNewDiagram(bot);
        configurePool(poolName, poolVersion);
    }

    @Test
    public void testConditionExpressions() throws Exception {
        SWTBotTestUtil.selectTabbedPropertyView(bot, "Data");
        bot.button(Messages.Add).click();
        SWTBotTestUtil.addNewData(bot, "myData", "Text", false, null);

        bot.button(Messages.Add).click();
        SWTBotTestUtil.addNewData(bot, "myData2", "Boolean", false, null);

        SWTBotTestUtil.configureSequenceFlow(bot, "testCondition", poolName, false, "",
                ExpressionConstants.CONDITION_TYPE);
        bot.button(IDialogConstants.OK_LABEL).click();

        testValidConditionExpression("1234555<122233445", ExpressionConstants.CONDITION_TYPE);
        testValidConditionExpression("123444.345345==324234324.23423432", ExpressionConstants.CONDITION_TYPE);
        testValidConditionExpression("123.567777>=234234234324", ExpressionConstants.CONDITION_TYPE);

        testValidConditionExpression("myData<\"myString\"", ExpressionConstants.CONDITION_TYPE);

        testValidConditionExpression("!myData2", ExpressionConstants.CONDITION_TYPE);
        testValidConditionExpression("myData2", ExpressionConstants.CONDITION_TYPE);

        testUnvalidConditionExpression("myData != true", ExpressionConstants.CONDITION_TYPE, true, true);
        testUnvalidConditionExpression("myData", ExpressionConstants.CONDITION_TYPE, true, true);

        testValidConditionExpression("\"myString\"<\"myString1\"", ExpressionConstants.CONDITION_TYPE);
        testUnvalidConditionExpression("myString<\"myString1\"", ExpressionConstants.CONDITION_TYPE, true, false);
        testUnvalidConditionExpression("\"myString\"<myString1", ExpressionConstants.CONDITION_TYPE, true, true);

    }

    private void testUnvalidConditionExpression(String condition, String expressionType, boolean leftError,
            boolean rightError) throws OperationCanceledException, InterruptedException {
        SWTBotTestUtil.initializeComparisonExpression(bot, condition);
        Point p1 = getLeftExpressionColumnLength(condition);
        StyleRange styles = SWTBotTestUtil.getTextStyleInEditExpressionDialog(bot,
                ExpressionConstants.CONDITION_TYPE, 0, p1.x);
        if (leftError) {
            assertTrue(unvalidErrorMessage + " expression = " + condition, styles.underline);
        } else {
            assertFalse(validErrorMessage + " expression = " + condition, styles.underline);
        }
        Point p2 = getRighExpressionColumnLength(condition);
        bot.sleep(500);
        styles = SWTBotTestUtil.getTextStyleInEditExpressionDialog(bot, ExpressionConstants.CONDITION_TYPE, 0,
                p2.x);
        if (rightError) {
            assertTrue(unvalidErrorMessage + " expression = " + condition, styles.underline);
        } else {
            assertFalse(validErrorMessage + " expression = " + condition, styles.underline);
        }
        bot.button(IDialogConstants.CANCEL_LABEL).click();
    }

    private void testValidConditionExpression(String condition, String expressionType)
            throws OperationCanceledException, InterruptedException {
        SWTBotTestUtil.initializeComparisonExpression(bot, condition);
        Point p1 = getLeftExpressionColumnLength(condition);
        StyleRange styles = SWTBotTestUtil.getTextStyleInEditExpressionDialog(bot,
                ExpressionConstants.CONDITION_TYPE, 0, p1.x);
        assertFalse(validErrorMessage, styles.underline);
        Point p2 = getRighExpressionColumnLength(condition);
        bot.sleep(500);
        styles = SWTBotTestUtil.getTextStyleInEditExpressionDialog(bot, ExpressionConstants.CONDITION_TYPE, 0,
                p2.x);
        bot.button(IDialogConstants.OK_LABEL).click();
        assertFalse(validErrorMessage + " expression = " + condition, styles.underline);
    }

    private void configurePool(String poolName, String version) {
        SWTBotTestUtil.selectTabbedPropertyView(bot, "Pool");
        bot.button(org.bonitasoft.studio.common.Messages.edit).click();
        bot.waitUntil(
                Conditions.shellIsActive(org.bonitasoft.studio.common.Messages.openNameAndVersionDialogTitle));
        bot.textWithLabel(Messages.name).setText(poolName);
        bot.textWithLabel(Messages.version).setText(version);
        bot.button(IDialogConstants.OK_LABEL).click();
    }

    private Point getLeftExpressionColumnLength(String condition) {
        int operatorIndex;
        if (condition.contains(">")) {
            operatorIndex = condition.indexOf(">");
            return new Point(0, operatorIndex);
        } else if (condition.contains(">=")) {
            operatorIndex = condition.indexOf(">=");
            return new Point(0, operatorIndex);
        } else if (condition.contains("=")) {
            operatorIndex = condition.indexOf("==");
            return new Point(0, operatorIndex);
        } else if (condition.contains("!=")) {
            operatorIndex = condition.indexOf("!=");
            return new Point(0, operatorIndex);
        } else if (condition.contains("<")) {
            operatorIndex = condition.indexOf("<");
            return new Point(0, operatorIndex);
        } else if (condition.contains("<=")) {
            operatorIndex = condition.indexOf("<=");
            return new Point(0, operatorIndex);
        } else if (condition.contains("!")) {
            return new Point(1, condition.length());
        }
        return new Point(0, condition.length());
    }

    private Point getRighExpressionColumnLength(String condition) {
        int operatorIndex;
        if (condition.contains(">")) {
            operatorIndex = condition.indexOf(">");
            return new Point(operatorIndex + 2, condition.length() - 1);
        } else if (condition.contains(">=")) {
            operatorIndex = condition.indexOf(">=");
            return new Point(operatorIndex + 3, condition.length() - 1);
        } else if (condition.contains("=")) {
            operatorIndex = condition.indexOf("==");
            return new Point(operatorIndex + 2, condition.length() - 1);
        } else if (condition.contains("!=")) {
            operatorIndex = condition.indexOf("!=");
            return new Point(operatorIndex + 3, condition.length() - 1);
        } else if (condition.contains("<")) {
            operatorIndex = condition.indexOf("<");
            return new Point(operatorIndex + 2, condition.length() - 1);
        } else if (condition.contains("<=")) {
            operatorIndex = condition.indexOf("<=");
            return new Point(operatorIndex + 3, condition.length() - 1);
        } else if (condition.contains("!")) {
            return new Point(1, condition.length());
        }
        return new Point(1, condition.length());
    }

    @After
    public void close() {
        bot.activeEditor().close();
    }
}