| /******************************************************************************* |
| * 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); |
| } |
| } |
| } |