blob: 689e8dc81e387e14de011ee3ec9c9d9b5e4fb880 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.text.tests;
import java.util.Iterator;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextPresentation;
public class TextPresentationTest extends TestCase {
private static final int NORMAL= SWT.NORMAL;
private static final int BOLD= SWT.BOLD;
// private static final int ITALIC= SWT.ITALIC;
private TextPresentation fTextPresentation;
private StyleRange[] fAllRanges;
private StyleRange[] fNonDefaultRanges;
public static Test suite() {
return new TestSuite(TextPresentationTest.class);
}
protected void setUp() {
setUpStyleRanges();
setUpTextPresentation();
}
private void setUpStyleRanges() {
fAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL)
};
fNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD)
};
}
private void setUpTextPresentation() {
fTextPresentation= new TextPresentation();
fTextPresentation.setDefaultStyleRange(createStyleRange(0, 140, NORMAL));
for (int i= 0; i < fAllRanges.length; i++)
fTextPresentation.addStyleRange(fAllRanges[i]);
}
private StyleRange createStyleRange(int start, int end, int style) {
return createStyleRange(start, end, null, null, style);
}
private StyleRange createStyleRange(int start, int end, Color foreground, Color background, int style) {
return new StyleRange(start, end - start, foreground, background, style);
}
private StyleRange createStyleRange(int start, int end, int foreground, int background, int style) {
return createStyleRange(start, end, createColor(foreground, foreground, foreground), createColor(background, background, background), style);
}
private Display fDisplay= Display.getDefault();
/**
* Creates a new color.
*
* @param red the amount of red in the color
* @param green the amount of green in the color
* @param blue the amount of blue in the color
* @return <code>null</code> if any of the parameters is smaller than 0 or greater than 255
*/
private Color createColor(int red, int green, int blue) {
if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255)
return null;
return new Color(fDisplay, red, green, blue);
}
private void checkRegions(StyleRange[] expectedAllRanges, StyleRange[] expectedNonDefaultRanges) {
Iterator e= fTextPresentation.getAllStyleRangeIterator();
for (int i= 0; i < expectedAllRanges.length; i++) {
assertTrue(e.hasNext());
assertEquals(expectedAllRanges[i], e.next());
}
assertTrue(!e.hasNext());
e= fTextPresentation.getNonDefaultStyleRangeIterator();
for (int i= 0; i < expectedNonDefaultRanges.length; i++) {
assertTrue(e.hasNext());
assertEquals(expectedNonDefaultRanges[i], e.next());
}
assertTrue(!e.hasNext());
}
public void testUnclippedRegions() {
checkRegions(fAllRanges, fNonDefaultRanges);
}
public void testClippedRegions1() {
fTextPresentation.setResultWindow(new Region(0, 140));
checkRegions(fAllRanges, fNonDefaultRanges);
}
public void testClippedRegions2() {
fTextPresentation.setResultWindow(new Region(30, 70));
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 17, NORMAL),
createStyleRange( 17, 24, BOLD),
createStyleRange( 24, 66, NORMAL),
createStyleRange( 66, 70, BOLD)
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 17, 24, BOLD),
createStyleRange( 66, 70, BOLD)
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at start of first existing range.
*/
public void testMergeStyleRange1() {
StyleRange range= createStyleRange(0, 2, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange(0, 2, 1, -1, NORMAL),
createStyleRange( 2, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange(0, 2, 1, -1, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at end of last existing range.
*/
public void testMergeStyleRange2() {
StyleRange range= createStyleRange(138, 140, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 138, NORMAL),
createStyleRange(138, 140, 1, -1, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
createStyleRange(138, 140, 1, -1, NORMAL),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at start of existing default range.
*/
public void testMergeStyleRange3() {
StyleRange range= createStyleRange(20, 22, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 22, 1, -1, NORMAL),
createStyleRange( 22, 47, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 22, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range within existing default range.
*/
public void testMergeStyleRange4() {
StyleRange range= createStyleRange(22, 24, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 22, NORMAL),
createStyleRange(22, 24, 1, -1, NORMAL),
createStyleRange( 24, 47, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(22, 24, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at end of existing default range.
*/
public void testMergeStyleRange5() {
StyleRange range= createStyleRange(45, 47, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 45, NORMAL),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at start of existing non-default range.
*/
public void testMergeStyleRange6() {
StyleRange range= createStyleRange(47, 49, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range within existing non-default range.
*/
public void testMergeStyleRange7() {
StyleRange range= createStyleRange(49, 51, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 49, BOLD),
createStyleRange(49, 51, 1, -1, BOLD),
createStyleRange( 51, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 49, BOLD),
createStyleRange(49, 51, 1, -1, BOLD),
createStyleRange( 51, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range at end of existing non-default range.
*/
public void testMergeStyleRange8() {
StyleRange range= createStyleRange(52, 54, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range from existing default to non-default range.
*/
public void testMergeStyleRange9() {
StyleRange range= createStyleRange(45, 49, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 45, NORMAL),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range from existing non-default to default range.
*/
public void testMergeStyleRange10() {
StyleRange range= createStyleRange(52, 56, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange(54, 56, 1, -1, NORMAL),
createStyleRange( 56, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange(54, 56, 1, -1, NORMAL),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range from existing default over non-default to default range.
*/
public void testMergeStyleRange11() {
StyleRange range= createStyleRange(45, 56, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 45, NORMAL),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 54, 1, -1, BOLD),
createStyleRange(54, 56, 1, -1, NORMAL),
createStyleRange( 56, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 54, 1, -1, BOLD),
createStyleRange(54, 56, 1, -1, NORMAL),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range from existing non-default over default to non-default range.
*/
public void testMergeStyleRange12() {
StyleRange range= createStyleRange(52, 98, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange(54, 96, 1, -1, NORMAL),
createStyleRange(96, 98, 1, -1, BOLD),
createStyleRange( 98, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange( 47, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange(54, 96, 1, -1, NORMAL),
createStyleRange(96, 98, 1, -1, BOLD),
createStyleRange( 98, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range over existing default range.
*/
public void testMergeStyleRange13() {
StyleRange range= createStyleRange(20, 47, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 47, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 47, 1, -1, NORMAL),
createStyleRange( 47, 54, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
/**
* Merge range over existing non-default range.
*/
public void testMergeStyleRange14() {
StyleRange range= createStyleRange(47, 54, 1, -1, NORMAL);
fTextPresentation.mergeStyleRange(range);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange( 0, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange( 20, 47, NORMAL),
createStyleRange(47, 54, 1, -1, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 140, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange( 4, 20, BOLD),
createStyleRange(47, 54, 1, -1, BOLD),
createStyleRange( 96, 102, BOLD),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
public void testMergeStyleRanges1() {
StyleRange[] ranges= new StyleRange[] {
createStyleRange(0, 2, 1, -1, NORMAL), // at start of first existing
createStyleRange(20, 22, 1, -1, NORMAL), // at start of existing default
createStyleRange(24, 26, 1, -1, NORMAL), // within existing default
createStyleRange(45, 47, 1, -1, NORMAL), // at end of existing default
createStyleRange(47, 49, 1, -1, NORMAL), // at start of existing non-default
createStyleRange(50, 51, 1, -1, NORMAL), // within existing non-default
createStyleRange(52, 54, 1, -1, NORMAL), // at end of existing non-default
createStyleRange(138, 140, 1, -1, NORMAL), // at end of last existing
};
fTextPresentation.mergeStyleRanges(ranges);
StyleRange[] expectedAllRanges= new StyleRange[] {
createStyleRange(0, 2, 1, -1, NORMAL),
createStyleRange( 2, 4, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 22, 1, -1, NORMAL),
createStyleRange( 22, 24, NORMAL),
createStyleRange(24, 26, 1, -1, NORMAL),
createStyleRange( 26, 45, NORMAL),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 50, BOLD),
createStyleRange(50, 51, 1, -1, BOLD),
createStyleRange( 51, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange( 54, 96, NORMAL),
createStyleRange( 96, 102, BOLD),
createStyleRange(102, 138, NORMAL),
createStyleRange(138, 140, 1, -1, NORMAL),
};
StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
createStyleRange(0, 2, 1, -1, NORMAL),
createStyleRange( 4, 20, BOLD),
createStyleRange(20, 22, 1, -1, NORMAL),
createStyleRange(24, 26, 1, -1, NORMAL),
createStyleRange(45, 47, 1, -1, NORMAL),
createStyleRange(47, 49, 1, -1, BOLD),
createStyleRange( 49, 50, BOLD),
createStyleRange(50, 51, 1, -1, BOLD),
createStyleRange( 51, 52, BOLD),
createStyleRange(52, 54, 1, -1, BOLD),
createStyleRange( 96, 102, BOLD),
createStyleRange(138, 140, 1, -1, NORMAL),
};
checkRegions(expectedAllRanges, expectedNonDefaultRanges);
}
// Template
//
// public void testMergeStyleRange0() {
//// StyleRange range= createStyleRange(0, 2, 1, -1, NORMAL);
//// fTextPresentation.mergeStyleRange(range);
//
//// StyleRange[] ranges= new StyleRange[] {
//// createStyleRange(0, 2, 1, -1, NORMAL),
//// };
//// fTextPresentation.mergeStyleRanges(ranges);
//
// StyleRange[] expectedAllRanges= new StyleRange[] {
// createStyleRange( 0, 4, NORMAL),
// createStyleRange( 4, 20, BOLD),
// createStyleRange( 20, 47, NORMAL),
// createStyleRange( 47, 54, BOLD),
// createStyleRange( 54, 96, NORMAL),
// createStyleRange( 96, 102, BOLD),
// createStyleRange(102, 140, NORMAL),
// };
//
// StyleRange[] expectedNonDefaultRanges= new StyleRange[] {
// createStyleRange( 4, 20, BOLD),
// createStyleRange( 47, 54, BOLD),
// createStyleRange( 96, 102, BOLD),
// };
//
// checkRegions(expectedAllRanges, expectedNonDefaultRanges);
// }
}