| /******************************************************************************* |
| * Copyright (c) 2000, 2013 IBM Corporation and others. |
| * |
| * 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: |
| * IBM Corporation - initial API and implementation |
| * Anton Leherbauer (Wind River Systems) |
| * Andrew Ferguson (Symbian) |
| *******************************************************************************/ |
| package org.eclipse.cdt.ui.tests.text; |
| |
| import org.eclipse.cdt.internal.ui.text.CTextTools; |
| import org.eclipse.cdt.ui.text.ICPartitions; |
| 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 junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| |
| /** |
| * Tests to verify the C partitioning. |
| * Derived from JavaPartitionerTest. |
| */ |
| public class CPartitionerTest extends TestCase { |
| private CTextTools fTextTools; |
| private Document fDocument; |
| protected boolean fDocumentPartitioningChanged; |
| |
| public CPartitionerTest(String name) { |
| super(name); |
| } |
| |
| @Override |
| protected void setUp() { |
| fTextTools = new CTextTools(); |
| |
| fDocument = new Document(); |
| IDocumentPartitioner partitioner = fTextTools.createDocumentPartitioner(null); |
| 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(CPartitionerTest.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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(38, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 3, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(36, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(38, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(35, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(40, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(42, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(47, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testInsertStringPartition() { |
| try { |
| fDocument.replace(35, 1, "\"yyy\""); |
| // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(35, 5, ICPartitions.C_STRING), |
| new TypedRegion(40, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(42, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(47, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testInsertCharacterPartition() { |
| try { |
| fDocument.replace(35, 1, "'y'"); |
| // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(35, 3, ICPartitions.C_CHARACTER), |
| new TypedRegion(38, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(40, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(45, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testInsertPreprocessorPartition() { |
| try { |
| fDocument.replace(4, 0, " # include <x.h>\n"); |
| // "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"x\n/***/\nxxx"); |
| // "xxx\n # include <x.h>\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"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, 17, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(21, 7, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(28, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(33, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(41, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(46, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(50, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(55, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(60, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testRemovePartition1() { |
| try { |
| fDocument.replace(13, 16, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(13, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(17, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(22, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(20, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(25, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(29, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(34, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(39, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testJoinPartitions1() { |
| try { |
| fDocument.replace(31, 1, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 13, ICPartitions.C_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, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 13, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(42, 4, IDocument.DEFAULT_CONTENT_TYPE) }; |
| |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testJoinPartition3() { |
| try { |
| fDocument.replace(9, 2, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(22, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(27, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(31, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(36, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 9, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(20, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, 5, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 4, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(9, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(14, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(15, 7, ICPartitions.C_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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(12, 5, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 4, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(9, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(14, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(15, 7, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(22, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(23, 5, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| } 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, 4, ICPartitions.C_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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(12, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(17, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(18, 5, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testOpenPartition1() { |
| try { |
| fDocument.replace(42, 1, null); |
| // "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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(38, 8, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(24, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(29, 4, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(33, 5, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(38, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(43, 4, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(47, 2, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| 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, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(2, 0, " "); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 3, ICPartitions.C_MULTI_LINE_COMMENT) }; |
| |
| 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, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(11, 4, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(15, 5, ICPartitions.C_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, ICPartitions.C_SINGLE_LINE_COMMENT), |
| new TypedRegion(6, 4, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(10, 12, ICPartitions.C_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(), ICPartitions.C_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, ICPartitions.C_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(), ICPartitions.C_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(), ICPartitions.C_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(), ICPartitions.C_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(), ICPartitions.C_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(), ICPartitions.C_MULTI_LINE_COMMENT) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(fDocument.getLength(), 0, "*"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(8, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingString() { |
| 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, "y"); |
| fDocument.replace(fDocument.getLength(), 0, "y"); |
| fDocument.replace(fDocument.getLength(), 0, "\""); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(fDocument.getLength(), 0, "y"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 4, ICPartitions.C_STRING), |
| new TypedRegion(4, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert escaped double quote |
| fDocument.replace(2, 0, "\\\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 6, ICPartitions.C_STRING), |
| new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert closing and opening double quote |
| fDocument.replace(2, 2, "\"\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 3, ICPartitions.C_STRING), |
| new TypedRegion(3, 3, ICPartitions.C_STRING), |
| new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert line continuation and newline |
| fDocument.replace(2, 2, "\\\r\n"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 7, ICPartitions.C_STRING), |
| new TypedRegion(7, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // delete line continuation |
| fDocument.replace(2, 1, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 4, ICPartitions.C_STRING), |
| new TypedRegion(4, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(5, 2, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingCharacter() { |
| 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, "y"); |
| fDocument.replace(fDocument.getLength(), 0, "y"); |
| fDocument.replace(fDocument.getLength(), 0, "'"); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_CHARACTER) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(fDocument.getLength(), 0, "y"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 4, ICPartitions.C_CHARACTER), |
| new TypedRegion(4, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert escaped single quote |
| fDocument.replace(2, 0, "\\'"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 6, ICPartitions.C_CHARACTER), |
| new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert closing and opening quote |
| fDocument.replace(2, 2, "''"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 3, ICPartitions.C_CHARACTER), |
| new TypedRegion(3, 3, ICPartitions.C_CHARACTER), |
| new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert line continuation and newline |
| fDocument.replace(2, 2, "\\\r\n"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 7, ICPartitions.C_CHARACTER), |
| new TypedRegion(7, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // delete line continuation |
| fDocument.replace(2, 1, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 4, ICPartitions.C_CHARACTER), |
| new TypedRegion(4, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(5, 2, ICPartitions.C_CHARACTER) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingPreprocessor() { |
| 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, "\t"); |
| fDocument.replace(fDocument.getLength(), 0, "include <float.h> "); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_PREPROCESSOR) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(fDocument.getLength(), 0, "// "); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 21, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(21, 5, ICPartitions.C_SINGLE_LINE_COMMENT), }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(21, 5, "/* */"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 21, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(21, 5, ICPartitions.C_MULTI_LINE_COMMENT), }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(fDocument.getLength(), 0, "\nz"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 21, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(21, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(26, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(27, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert escaped backslash |
| fDocument.replace(2, 0, "\\\\"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 23, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(23, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(28, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(29, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // replace one backslash with a newline |
| fDocument.replace(3, 1, "\n"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 23, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(23, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(28, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(29, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert backslash and newline inside multiline comment |
| fDocument.replace(26, 0, "\\\r\n"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 23, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(23, 8, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(31, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(32, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // delete NL leaving only CR |
| fDocument.replace(28, 1, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 23, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(23, 7, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(30, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(31, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // delete backslash |
| fDocument.replace(26, 1, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 23, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(23, 6, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(29, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(30, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| |
| // insert white space before # |
| fDocument.replace(0, 0, " \t"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 26, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(26, 6, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(32, 1, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(33, 1, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testLineSplicing_Bug124113() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "// comment... \\\\\ncontinued"); |
| |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { |
| new TypedRegion(0, fDocument.getLength(), ICPartitions.C_SINGLE_LINE_COMMENT) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "#define D \\\\\ncontinued"); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_PREPROCESSOR) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "\"str\\\\\ncontinued\""); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "'\\\\\nc'"); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_CHARACTER) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testCommentInPreprocessorString() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "#define S \"http://www.foo.bar\""); |
| |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_PREPROCESSOR) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "#define S \"http:/* */\""); |
| |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_PREPROCESSOR) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testString1() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "\"[string]\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, fDocument.getLength(), ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "\"string1\" \"string2\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 9, ICPartitions.C_STRING), |
| new TypedRegion(9, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(10, 9, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testString2() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "\"string\"RRRRRRRR\"string\"nostring"); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 8, ICPartitions.C_STRING), |
| new TypedRegion(8, 8, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(16, 8, ICPartitions.C_STRING), |
| new TypedRegion(24, 8, IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testRawString1() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "R\"(line 1\n/*line 2*/\nline 3\n)\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(1, fDocument.getLength() - 1, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "R\"()\"//comment"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(1, fDocument.getLength() - 10, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 9, 9, ICPartitions.C_SINGLE_LINE_COMMENT), }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), "R\"delimiter(line 1\n()delimitex\nline 3\n)delimiter\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(1, fDocument.getLength() - 1, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testRawString2() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 6, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), |
| "#define X x\nR\"delimiter(line 1\n()delimitex\nline 3\n)delimiter\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 12, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(12, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(13, fDocument.getLength() - 13, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testRawString3() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| fDocument.replace(0, fDocument.getLength(), |
| "#define X x\nR\"delimiter(line 1\n()delimitex\nline 3\n)del)delimiter\" \"str\""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 12, ICPartitions.C_PREPROCESSOR), |
| new TypedRegion(12, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(13, fDocument.getLength() - 19, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testRawString_Bug352544() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "BAR\"(\";"); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 3, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(3, 3, ICPartitions.C_STRING), |
| new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE), }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingRawString1() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| // insert line |
| fDocument.replace(8, 0, "line 0\n"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| // delete text |
| fDocument.replace(12, 8, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingRawString2() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| // insert opening delimiter |
| fDocument.replace(7, 0, "***"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 6, ICPartitions.C_STRING) }; |
| checkPartitioning(expectation, result); |
| |
| // insert closing delimiter |
| fDocument.replace(fDocument.getLength() - 7, 0, "***"); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| // invalidate closing delimiter |
| fDocument.replace(fDocument.getLength() - 7, 1, ""); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 6, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testEditingRawString3() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), "/***/R\"\"(line 1\nline 2\nline 3\n)\"\" \"str\""); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 12, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 6, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| |
| // insert text after closing quote |
| fDocument.replace(fDocument.getLength() - 6, 0, " "); |
| result = fDocument.computePartitioning(0, fDocument.getLength()); |
| expectation = new TypedRegion[] { new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT), |
| new TypedRegion(5, 1, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(6, fDocument.getLength() - 13, ICPartitions.C_STRING), |
| new TypedRegion(fDocument.getLength() - 7, 2, IDocument.DEFAULT_CONTENT_TYPE), |
| new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING), }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| |
| public void testNumberSeparators() { |
| try { |
| fDocument.replace(0, fDocument.getLength(), |
| "0b1'100'100'100\n1'123'456\n0x1000'1000\n0111'1000\n0xAABB'CCDD"); |
| ITypedRegion[] result = fDocument.computePartitioning(0, fDocument.getLength()); |
| TypedRegion[] expectation = { new TypedRegion(0, fDocument.getLength(), IDocument.DEFAULT_CONTENT_TYPE) }; |
| checkPartitioning(expectation, result); |
| } catch (BadLocationException x) { |
| assertTrue(false); |
| } |
| } |
| } |