Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java5
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java258
2 files changed, 261 insertions, 2 deletions
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
index 7b01385b8b..fbd30f6de3 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
@@ -41,8 +41,9 @@ import org.junit.runners.Suite;
Test_org_eclipse_swt_custom_StyleRange.class, Test_org_eclipse_swt_custom_CCombo.class,
Test_org_eclipse_swt_custom_TableTreeItem.class, Test_org_eclipse_swt_custom_CLabel.class,
Test_org_eclipse_swt_custom_CTabItem.class, Test_org_eclipse_swt_custom_StyledText.class,
- Test_org_eclipse_swt_custom_StyledTextLineSpacingProvider.class, Test_org_eclipse_swt_custom_CTabFolder.class,
- Test_org_eclipse_swt_widgets_Spinner.class, Test_org_eclipse_swt_widgets_ScrolledComposite.class})
+ Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.class, Test_org_eclipse_swt_custom_StyledTextLineSpacingProvider.class,
+ Test_org_eclipse_swt_custom_CTabFolder.class, Test_org_eclipse_swt_widgets_Spinner.class,
+ Test_org_eclipse_swt_widgets_ScrolledComposite.class})
public class AllWidgetTests {
public static void main(String[] args) {
JUnitCore.main(AllWidgetTests.class.getName());
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java
new file mode 100644
index 0000000000..dc0018a3eb
--- /dev/null
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2018 Angelo ZERR.
+ * 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:
+ * Angelo Zerr <angelo.zerr@gmail.com> - StyledText.setStyleRange resets less cache - Bug 530019
+ */
+package org.eclipse.swt.tests.junit;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.TextLayout;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Automated Test Suite for class org.eclipse.swt.custom.StyledText to check there is no regression with Bug 530019
+ *
+ * @see org.eclipse.swt.custom.StyledText
+ */
+public class Test_org_eclipse_swt_custom_StyledText_VariableLineHeight {
+
+ Shell shell;
+ StyledText styledText;
+
+ @Before
+ public void setUp() {
+ shell = new Shell();
+ styledText = new StyledText(shell, SWT.NULL);
+ styledText.setLineSpacingProvider(l -> 0);
+ }
+
+ @After
+ public void tearDown() {
+ shell.dispose();
+ }
+
+ @Test
+ public void testRise() {
+ styledText.setText("a\nb\nc\nd");
+ int length = styledText.getCharCount();
+
+ // No style
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with rise=1
+ StyleRange style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.rise = 1;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(1, 0);
+
+ // style with rise=0
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.rise = 0;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with rise=2
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.rise = 2;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(2, 0);
+
+ // style with rise=2 again
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.rise = 2;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(2, 0);
+ }
+
+ @Test
+ public void testFont() {
+ styledText.setText("a\nb\nc\nd");
+
+ // Create little, big font
+ Font initialFont = styledText.getFont();
+ FontData[] fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(24);
+ }
+ Font bigFont = new Font(styledText.getDisplay(), fontData);
+ fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(fontData[i].getHeight() - 1);
+ }
+ Font littleFont = new Font(styledText.getDisplay(), fontData);
+
+ int length = styledText.getCharCount();
+
+ // No style
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with big font
+ StyleRange style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = bigFont;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0, bigFont);
+
+ // style with no font
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = null;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with big font
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = bigFont;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0, bigFont);
+
+ // style with little font
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = littleFont;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with no font
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = null;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0);
+
+ // style with little font
+ style = new StyleRange();
+ style.start = 0;
+ style.length = length;
+ style.foreground = styledText.getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ style.font = littleFont;
+ styledText.replaceStyleRanges(0, length, new StyleRange[] { style });
+ assertVariableLineHeightEquals(0, 0);
+
+ bigFont.dispose();
+ littleFont.dispose();
+ }
+
+ @Test
+ public void testLittleFontSeveralRanges() {
+ styledText.setText("abc\nd");
+
+ // Create little, big font
+ Font initialFont = styledText.getFont();
+ FontData[] fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(fontData[i].getHeight() / 2);
+ }
+ Font littleFont1 = new Font(styledText.getDisplay(), fontData);
+ fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(fontData[i].getHeight() / 4);
+ }
+ Font littleFont2 = new Font(styledText.getDisplay(), fontData);
+
+ StyleRange[] ranges = new StyleRange[2];
+ ranges[0] = new StyleRange();
+ ranges[0].start = 0;
+ ranges[0].length = 1;
+ ranges[0].font = littleFont1;
+
+ ranges[1] = new StyleRange();
+ ranges[1].start = 1;
+ ranges[1].length = 1;
+ ranges[1].font = littleFont2;
+
+ styledText.replaceStyleRanges(0, 3,ranges);
+ // 2 little fonts, line height is the height of the default font of StyledText
+ assertVariableLineHeightEquals(0, 0);
+
+ littleFont1.dispose();
+ littleFont2.dispose();
+ }
+
+ @Test
+ public void testBigFontSeveralRanges() {
+ styledText.setText("abc\nd");
+
+ // Create little, big font
+ Font initialFont = styledText.getFont();
+ FontData[] fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(fontData[i].getHeight() * 2);
+ }
+ Font bigFont = new Font(styledText.getDisplay(), fontData);
+ fontData = initialFont.getFontData();
+ for (int i = 0; i < fontData.length; i++) {
+ fontData[i].setHeight(fontData[i].getHeight() / 2);
+ }
+ Font littleFont = new Font(styledText.getDisplay(), fontData);
+
+
+ StyleRange[] ranges = new StyleRange[2];
+ ranges[0] = new StyleRange();
+ ranges[0].start = 0;
+ ranges[0].length = 1;
+ ranges[0].font = bigFont;
+
+ ranges[1] = new StyleRange();
+ ranges[1].start = 1;
+ ranges[1].length = 1;
+ ranges[1].font = littleFont;
+
+ styledText.replaceStyleRanges(0, 3,ranges);
+ // line height is the height of the big font
+ assertVariableLineHeightEquals(0, 0, bigFont);
+
+ bigFont.dispose();
+ littleFont.dispose();
+ }
+
+ private void assertVariableLineHeightEquals(int expected, int lineIndex) {
+ assertVariableLineHeightEquals(expected, lineIndex, null);
+ }
+
+ private void assertVariableLineHeightEquals(int expected, int lineIndex, Font font) {
+ int fontHeight = styledText.getLineHeight();
+ if (font != null) {
+ TextLayout layout = new TextLayout(font.getDevice());
+ layout.setFont(font);
+ layout.setText("a");
+ fontHeight = layout.getBounds().height;
+ layout.dispose();
+ }
+ int actual = styledText.getLinePixel(lineIndex + 1) - styledText.getLinePixel(lineIndex) - fontHeight;
+ Assert.assertEquals(expected, actual);
+ }
+
+} \ No newline at end of file

Back to the top