blob: d0c3d841df4e3b8e286b13faab1e1b20b964789b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.jdt.text.tests;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.text.tests.Accessor;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentExtension3;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.tests.TestTextViewer;
import org.eclipse.jdt.ui.text.IJavaPartitions;
import org.eclipse.jdt.ui.text.JavaTextTools;
public class JavaLineSegmentationTest extends TestCase {
protected TestTextViewer fTextViewer;
protected IDocument fDocument;
protected JavaTextTools fTextTools;
public JavaLineSegmentationTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(JavaLineSegmentationTest.class);
}
protected void setUp() {
fTextViewer= new TestTextViewer();
fTextTools= new JavaTextTools(new PreferenceStore());
fDocument= new Document();
IDocumentPartitioner partitioner= fTextTools.createDocumentPartitioner();
partitioner.connect(fDocument);
if (fDocument instanceof IDocumentExtension3) {
IDocumentExtension3 extension3= (IDocumentExtension3) fDocument;
extension3.setDocumentPartitioner(IJavaPartitions.JAVA_PARTITIONING, partitioner);
} else {
fDocument.setDocumentPartitioner(partitioner);
}
}
protected void tearDown () {
fTextTools.dispose();
fTextTools= null;
IDocumentPartitioner partitioner;
if (fDocument instanceof IDocumentExtension3) {
IDocumentExtension3 extension3= (IDocumentExtension3) fDocument;
partitioner= extension3.getDocumentPartitioner(IJavaPartitions.JAVA_PARTITIONING);
} else {
partitioner= fDocument.getDocumentPartitioner();
}
partitioner.disconnect();
fDocument= null;
}
void checkSegmentation(int[] result, int[] expectation) {
if (expectation == null) {
assertTrue("invalid segments", result == null);
} else {
assertTrue(result != null);
assertTrue("invalid number of segments", expectation.length == result.length);
for (int i= 0; i < expectation.length; i++)
assertTrue(result[i] + " != " + expectation[i], expectation[i] == result[i]);
}
}
public void test11() {
fDocument.set("abcde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, null);
} catch (BadLocationException x) {
assertTrue(false);
}
}
private int[] getBidiLineSegments(ITextViewer viewer, int lineOffset) throws BadLocationException {
IDocument document= viewer.getDocument();
Accessor javaSourceViewerClass= new Accessor("org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer", getClass().getClassLoader());
return (int[])javaSourceViewerClass.invoke("getBidiLineSegments", new Class[] {IDocument.class, int.class}, new Object[] {document, new Integer(lineOffset)});
}
public void test12() {
fDocument.set("abcde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, null);
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test13() {
fDocument.set("\nabcde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, null);
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test14() {
fDocument.set("\nabcde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, null);
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test21() {
fDocument.set("\"ab\"cde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test22() {
fDocument.set("\"ab\"cde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test23() {
fDocument.set("\n\"ab\"cde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test24() {
fDocument.set("\n\"ab\"cde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test31() {
fDocument.set("\"ab\"c\"de\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4, 5 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test32() {
fDocument.set("\"ab\"c\"de\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4, 5 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test33() {
fDocument.set("\n\"ab\"c\"de\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4, 5 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test34() {
fDocument.set("\n\"ab\"c\"de\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4, 5 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test41() {
fDocument.set("\"ab\"\"cd\"e");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4, 8 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test42() {
fDocument.set("\"ab\"\"cd\"e\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4, 8 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test43() {
fDocument.set("\n\"ab\"\"cd\"e");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4, 8 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test44() {
fDocument.set("\n\"ab\"\"cd\"e\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4, 8 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test51() {
fDocument.set("\"ab\"\"cde\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test52() {
fDocument.set("\"ab\"\"cde\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test53() {
fDocument.set("\n\"ab\"\"cde\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test54() {
fDocument.set("\n\"ab\"\"cde\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test61() {
fDocument.set("\"abcde\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test62() {
fDocument.set("\"abcde\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test63() {
fDocument.set("\n\"abcde\"");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test64() {
fDocument.set("\n\"abcde\"\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test71() {
fDocument.set("ab\"\"cde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 2, 4});
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test72() {
fDocument.set("ab\"\"cde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 0);
checkSegmentation(result, new int[] { 0, 2, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test73() {
fDocument.set("\nab\"\"cde");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 2, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
public void test74() {
fDocument.set("\nab\"\"cde\n");
fTextViewer.setDocument(fDocument);
try {
int[] result= getBidiLineSegments(fTextViewer, 1);
checkSegmentation(result, new int[] { 0, 2, 4 });
} catch (BadLocationException x) {
assertTrue(false);
}
}
}