diff options
Diffstat (limited to 'tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java')
-rw-r--r-- | tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText_VariableLineHeight.java | 514 |
1 files changed, 257 insertions, 257 deletions
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 index e187c29148..e70e77e420 100644 --- 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 @@ -1,261 +1,261 @@ -/**
- * Copyright (c) 2018 Angelo ZERR.
+/** + * Copyright (c) 2018 Angelo ZERR. * - * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
+ * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * - * SPDX-License-Identifier: EPL-2.0
- *
- * 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);
- }
-
+ * SPDX-License-Identifier: EPL-2.0 + * + * 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 |