/** | |
* Copyright (c) 2017 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 | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* Angelo Zerr <angelo.zerr@gmail.com> - Customize different line spacing of StyledText - Bug 522020 | |
*/ | |
package org.eclipse.swt.tests.junit; | |
import static org.junit.Assert.assertArrayEquals; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.custom.StyledText; | |
import org.eclipse.swt.custom.StyledTextLineSpacingProvider; | |
import org.eclipse.swt.widgets.Shell; | |
import org.junit.Before; | |
import org.junit.Test; | |
/** | |
* Automated Test Suite for class | |
* org.eclipse.swt.custom.StyledTextLineSpacingProvider | |
* | |
* @see org.eclipse.swt.custom.StyledTextLineSpacingProvider | |
*/ | |
public class Test_org_eclipse_swt_custom_StyledTextLineSpacingProvider { | |
class IntegerLineSpacingProvider implements StyledTextLineSpacingProvider { | |
@Override | |
public Integer getLineSpacing(int lineIndex) { | |
try { | |
String text = styledText.getLine(lineIndex); | |
return Integer.parseInt(text); | |
} catch (Exception e) { | |
return null; | |
} | |
} | |
} | |
Shell shell; | |
StyledText styledText; | |
@Before | |
public void setUp() { | |
shell = new Shell(); | |
styledText = new StyledText(shell, SWT.NULL); | |
} | |
@Test | |
public void test_setLineSpacingProvider() { | |
styledText.setText("a\n45\nc\n57"); | |
// Tests with none line spacing provider | |
assertLineSpacingEquals(0, 0, 0, 0, 0); | |
// Tests with integer line spacing provider | |
styledText.setLineSpacingProvider(new IntegerLineSpacingProvider()); | |
assertLineSpacingEquals(0, 0, 45, 0, 57); | |
// Tests with reset line spacing provider | |
styledText.setLineSpacingProvider(null); | |
assertLineSpacingEquals(0, 0, 0, 0, 0); | |
} | |
@Test | |
public void test_replaceTextRange() { | |
styledText.setText("a\n45\nc\n57"); | |
styledText.setLineSpacingProvider(new IntegerLineSpacingProvider()); | |
assertLineSpacingEquals(0, 0, 45, 0, 57); | |
// Replace 45 with b | |
styledText.replaceTextRange(2, 2, "b"); | |
assertLineSpacingEquals(0, 0, 0, 0, 57); | |
// Replace b with 45 | |
styledText.replaceTextRange(2, 1, "45"); | |
assertLineSpacingEquals(0, 0, 45, 0, 57); | |
} | |
private void assertLineSpacingEquals(int... expecteds) { | |
int lineHeight = styledText.getLineHeight(); | |
int[] actuals = new int[expecteds.length]; | |
for (int i = 0; i < expecteds.length; i++) { | |
actuals[i] = styledText.getLinePixel(i) - ((i > 0) ? styledText.getLinePixel(i - 1) + lineHeight : 0); | |
} | |
assertArrayEquals(expecteds, actuals); | |
} | |
} |