/******************************************************************************* * 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.jdt.text.tests; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; 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.IDocumentPartitioner; import org.eclipse.jface.text.IDocumentPartitioningListener; import org.eclipse.jface.text.ITypedRegion; import org.eclipse.jface.text.TypedRegion; import org.eclipse.jdt.ui.text.IJavaPartitions; import org.eclipse.jdt.ui.text.JavaTextTools; public class JavaPartitionerTest extends TestCase { private JavaTextTools fTextTools; private Document fDocument; protected boolean fDocumentPartitioningChanged; public JavaPartitionerTest(String name) { super(name); } @Override protected void setUp() { fTextTools= new JavaTextTools(new PreferenceStore()); fDocument= new Document(); IDocumentPartitioner partitioner= fTextTools.createDocumentPartitioner(); partitioner.connect(fDocument); fDocument.setDocumentPartitioner(partitioner); fDocument.set("xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"); fDocumentPartitioningChanged= false; fDocument.addDocumentPartitioningListener(new IDocumentPartitioningListener() { @Override public void documentPartitioningChanged(IDocument document) { fDocumentPartitioningChanged= true; } }); } public static Test suite() { return new TestSuite(JavaPartitionerTest.class); } @Override protected void tearDown () { fTextTools.dispose(); fTextTools= null; IDocumentPartitioner partitioner= fDocument.getDocumentPartitioner(); partitioner.disconnect(); fDocument= null; } protected String print(ITypedRegion r) { return "[" + r.getOffset() + "," + r.getLength() + "," + r.getType() + "]"; } protected void checkPartitioning(ITypedRegion[] expectation, ITypedRegion[] result) { assertEquals("invalid number of partitions", expectation.length, result.length); for (int i= 0; i < expectation.length; i++) { ITypedRegion e= expectation[i]; ITypedRegion r= result[i]; assertTrue(print(r) + " != " + print(e), r.equals(e)); } } public void testInitialPartitioning() { try { // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(38, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(43, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testIntraPartitionChange() { try { fDocument.replace(34, 3, "y"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\ny\n/***/\nxxx"); assertTrue(!fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 3, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(36, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(41, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testIntraPartitionChange2() { try { fDocument.replace(41, 0, "yyy"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/**yyy*/\nxxx"); // assertTrue(!fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(38, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(46, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testInsertNewPartition() { try { fDocument.replace(35, 1, "/***/"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx/***/x\n/***/\nxxx"); assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 2, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(35, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(40, 2, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(42, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(47, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testRemovePartition1() { try { fDocument.replace(13, 16, ""); // "xxx\n/*xxx*/\nx/**/\nxxx\n/***/\nxxx"); assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 2, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(13, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(17, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(22, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(27, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testRemovePartition2() { testJoinPartition3(); fDocumentPartitioningChanged= false; try { fDocument.replace(5, 2, ""); // "xxx\nxxx\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 12, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(12, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(20, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(25, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(29, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(34, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(39, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testJoinPartitions1() { try { fDocument.replace(31, 1, ""); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/*/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 13, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(42, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testJoinPartitions2() { try { fDocument.replace(32, 1, ""); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 13, IJavaPartitions.JAVA_DOC), new TypedRegion(42, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testJoinPartition3() { try { fDocument.replace(9, 2, ""); // "xxx\n/*xxx\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 18, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(22, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(27, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(31, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(36, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(41, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testSplitPartition1() { testJoinPartitions1(); fDocumentPartitioningChanged= false; try { // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/*/\nxxx\n/***/\nxxx" fDocument.replace(31, 0, "*"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); } catch (BadLocationException x) { assertTrue(false); } testInitialPartitioning(); } public void testSplitPartition2() { testJoinPartitions2(); fDocumentPartitioningChanged= false; try { // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**\nxxx\n/***/\nxxx" fDocument.replace(32, 0, "/"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); } catch (BadLocationException x) { assertTrue(false); } testInitialPartitioning(); } public void testSplitPartition3() { fDocumentPartitioningChanged= false; try { // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx" fDocument.replace(12, 9, ""); // "xxx\n/*xxx*/\nx*/\nxxx\n/**/\nxxx\n/***/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 9, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(20, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(34, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testCorruptPartitioning1() { try { fDocument.replace(0, fDocument.getLength(), "/***/\n/***/"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(6, 5, IJavaPartitions.JAVA_DOC) }; checkPartitioning(expectation, result); fDocument.replace(6, 0, "*/\n/***/\n/*"); // "/***/\n*/\n/***/\n/*/***/" result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(9, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(14, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(15, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; } catch (BadLocationException x) { assertTrue(false); } } public void testCorruptPartitioning2() { try { fDocument.replace(0, fDocument.getLength(), "/***/\n/***/\n/***/"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(6, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(11, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(12, 5, IJavaPartitions.JAVA_DOC) }; checkPartitioning(expectation, result); fDocument.replace(6, 0, "*/\n/***/\n/*"); // "/***/\n*/\n/***/\n/*/***/\n/***/" result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(9, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(14, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(15, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(22, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(23, 5, IJavaPartitions.JAVA_DOC) }; } catch (BadLocationException x) { assertTrue(false); } } public void testCorruptPartitioning3() { try { fDocument.replace(0, fDocument.getLength(), "/***/\n/**/"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(6, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(0, 9, "/***/\n/***/\n/***/\n/**"); // "/***/\n/***/\n/***/\n/***/" result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(6, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(11, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(12, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(17, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(18, 5, IJavaPartitions.JAVA_DOC) }; } catch (BadLocationException x) { assertTrue(false); } } public void testOpenPartition1() { try { fDocument.replace(42, 1, ""); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(38, 8, IJavaPartitions.JAVA_DOC) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testOpenPartition2() { try { fDocument.replace(47, 0, "/*"); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx/*" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(38, 5, IJavaPartitions.JAVA_DOC), new TypedRegion(43, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(47, 2, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testChangeContentTypeOfPartition() { try { fDocument.replace(39, 1, ""); // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/**/\nxxx" assertTrue(fDocumentPartitioningChanged); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(4, 7, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(16, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(29, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(38, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(42, 4, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testPartitionFinder() { try { ITypedRegion[] partitioning= fDocument.computePartitioning(0, fDocument.getLength()); for (int i= 0; i < partitioning.length; i++) { ITypedRegion expected= partitioning[i]; for (int j= 0; j < expected.getLength(); j++) { ITypedRegion result= fDocument.getPartition(expected.getOffset() + j); assertTrue(expected.equals(result)); } } } catch (BadLocationException x) { assertTrue(false); } } public void testExtendPartition() { try { fDocument.replace(0, fDocument.getLength(), "/*"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 2, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(2, 0, " "); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 3, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testTransformPartition() { try { fDocument.replace(0, fDocument.getLength(), "/*"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 2, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(2, 0, "*"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 3, IJavaPartitions.JAVA_DOC) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testTogglePartition() { try { fDocument.replace(0, fDocument.getLength(), "\t/*\n\tx\n\t/*/\n\ty\n//\t*/"); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation1= { new TypedRegion(0, 1, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(1, 10, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(11, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(15, 5, IJavaPartitions.JAVA_SINGLE_LINE_COMMENT) }; checkPartitioning(expectation1, result); fDocumentPartitioningChanged= false; fDocument.replace(0, 0, "//"); // "//\t/*\n\tx\n\t/*/\n\ty\n//\t*/" assertTrue(fDocumentPartitioningChanged); result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation2= { new TypedRegion(0, 6, IJavaPartitions.JAVA_SINGLE_LINE_COMMENT), new TypedRegion(6, 4, IDocument.DEFAULT_CONTENT_TYPE), new TypedRegion(10, 12, IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation2, result); } catch (BadLocationException x) { assertTrue(false); } } public void testEditing1() { try { fDocument.replace(0, fDocument.getLength(), ""); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 0, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "/"); fDocument.replace(fDocument.getLength(), 0, "*"); fDocument.replace(fDocument.getLength(), 0, "*"); fDocument.replace(fDocument.getLength(), 0, "/"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "\r\n"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 4, IJavaPartitions.JAVA_MULTI_LINE_COMMENT), new TypedRegion(4, 2, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testEditing2() { try { fDocument.replace(0, fDocument.getLength(), ""); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 0, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "/"); fDocument.replace(fDocument.getLength(), 0, "*"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "\r\n"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "*"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "*"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_MULTI_LINE_COMMENT) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } public void testEditing3() { try { fDocument.replace(0, fDocument.getLength(), ""); ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength()); TypedRegion[] expectation= { new TypedRegion(0, 0, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "/"); fDocument.replace(fDocument.getLength(), 0, "*"); fDocument.replace(fDocument.getLength(), 0, "*"); fDocument.replace(fDocument.getLength(), 0, "\r\n *"); fDocument.replace(fDocument.getLength(), 0, "/"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), IJavaPartitions.JAVA_DOC) }; checkPartitioning(expectation, result); fDocument.replace(fDocument.getLength(), 0, "*"); result= fDocument.computePartitioning(0, fDocument.getLength()); expectation= new TypedRegion[] { new TypedRegion(0, 8, IJavaPartitions.JAVA_DOC), new TypedRegion(8, 1, IDocument.DEFAULT_CONTENT_TYPE) }; checkPartitioning(expectation, result); } catch (BadLocationException x) { assertTrue(false); } } }