blob: 3689aca986ea67ab5a10811b4e7b9bacada87bc8 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2013, 2013 SAP AG.
* 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:
* mwenz - Bug 415884 - Cannot query size of a multi-line text
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.ui.tests;
import static org.junit.Assert.fail;
import org.eclipse.graphiti.datatypes.IDimension;
import org.eclipse.graphiti.mm.algorithms.AlgorithmsFactory;
import org.eclipse.graphiti.mm.algorithms.MultiText;
import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.algorithms.styles.Font;
import org.eclipse.graphiti.mm.algorithms.styles.StylesFactory;
import org.eclipse.graphiti.mm.algorithms.styles.StylesPackage;
import org.eclipse.graphiti.tests.reuse.GFAbstractTestCase;
import org.eclipse.graphiti.ui.services.GraphitiUi;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class LayoutServiceTest extends GFAbstractTestCase {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
private static Font font;
@BeforeClass
public static void before() {
GFAbstractTestCase.before();
font = StylesFactory.eINSTANCE.createFont();
font.eSet(StylesPackage.eINSTANCE.getFont_Name(), "dummy");
}
@Test
public void testPlainCalculation() throws Exception {
IDimension textSize1 = GraphitiUi.getUiLayoutService().calculateTextSize("Plain text", font);
IDimension textSize2 = GraphitiUi.getUiLayoutService().calculateTextSize(
"Plain text " + LINE_SEPARATOR + " continued", font);
checkEquivalentHeight(textSize1, textSize2);
Assert.assertTrue(textSize1.getWidth() < textSize2.getWidth());
}
@Test
public void testNewLineCalculation() throws Exception {
IDimension textSize1 = GraphitiUi.getUiLayoutService().calculateTextSize("Plain text", font, true);
IDimension textSize2 = GraphitiUi.getUiLayoutService().calculateTextSize(
"Plain text " + LINE_SEPARATOR + " continued", font, true);
checkExpectedHeight(textSize1, 16);
checkExpectedHeight(textSize2, 32);
}
@Test
public void testPlainTextCalculation() throws Exception {
Text text1 = AlgorithmsFactory.eINSTANCE.createText();
text1.setFont(font);
text1.setValue("Plain text");
Text text2 = AlgorithmsFactory.eINSTANCE.createText();
text2.setFont(font);
text2.setValue("Plain text " + LINE_SEPARATOR + " continued");
IDimension textSize1 = GraphitiUi.getUiLayoutService().calculateTextSize(text1);
IDimension textSize2 = GraphitiUi.getUiLayoutService().calculateTextSize(text2);
checkEquivalentHeight(textSize1, textSize2);
Assert.assertTrue(textSize1.getWidth() < textSize2.getWidth());
}
@Test
public void testMultiTextCalculation() throws Exception {
MultiText text1 = AlgorithmsFactory.eINSTANCE.createMultiText();
text1.setFont(font);
text1.setValue("Plain text");
MultiText text2 = AlgorithmsFactory.eINSTANCE.createMultiText();
text2.setFont(font);
text2.setValue("Plain text " + LINE_SEPARATOR + " continued");
IDimension textSize1 = GraphitiUi.getUiLayoutService().calculateTextSize(text1);
IDimension textSize2 = GraphitiUi.getUiLayoutService().calculateTextSize(text2);
checkExpectedHeight(textSize1, 16);
checkExpectedHeight(textSize2, 32);
}
private void checkEquivalentHeight(IDimension dimension1, IDimension dimension2) {
// On Linux the heights of the dimensions differ by one or two (15 and
// 16 or 17), while on Windows they are the same; the difference of two
// appeared first after moving to the own HIPP instance
// --> accept the difference on Linux as valid
int height1 = dimension1.getHeight();
int height2 = dimension2.getHeight();
int difference = Math.abs(height1 - height2);
if (!(difference <= 2)) {
fail("ERROR: Difference too large: height1: " + height1 + ", height2: " + height2);
}
}
private void checkExpectedHeight(IDimension dimension, int expectedHeight) {
// On Linux the heights of the dimensions differ by one or two (15 and
// 16 or 17), while on Windows they are the same; the difference of two
// appeared first after moving to the own HIPP instance
// --> accept the difference on Linux as valid
int height = dimension.getHeight();
int difference = Math.abs(height - expectedHeight);
if (!(difference <= 2)) {
fail("ERROR: Difference too large: height: " + height + ", expected height: " + expectedHeight);
}
}
}