/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Created on May 29, 2006
*/
package org.python.pydev.editor;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.rules.IToken;
import org.python.pydev.core.IPythonPartitions;
import org.python.pydev.core.partition.PyPartitionScanner;
import org.python.pydev.core.partition.PyPartitioner;
import org.python.pydev.shared_core.testutils.TestUtils;
import junit.framework.TestCase;
public class PyPartitionScannerTest extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(PyPartitionScannerTest.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testPartitioning() throws Exception {
Document doc = new Document("class Foo: #comment\n" +
" pass\n");
IDocumentPartitioner partitioner = PyPartitionScanner.addPartitionScanner(doc, null);
assertEquals(IPythonPartitions.PY_DEFAULT, partitioner.getContentType(5));
assertEquals(IPythonPartitions.PY_COMMENT, partitioner.getContentType(15));
}
public void testPartitioning2() throws Exception {
Document doc = new Document("class Foo: #comment\n" +
" pass\n");
PyPartitionScanner pyPartitionScanner = new PyPartitionScanner();
pyPartitionScanner.setRange(doc, 0, doc.getLength());
IToken nextPartition = pyPartitionScanner.nextToken();
while (!nextPartition.isEOF()) {
String data = (String) nextPartition.getData();
assertTrue("Found: " + data, data == null || data.equals(IPythonPartitions.PY_COMMENT));
nextPartition = pyPartitionScanner.nextToken();
}
}
public void testPartitioning3() throws Exception {
String txt = ""
+ "'\\\n"
+ "\\\n"
+ "a' b '\\\n"
+ "c\\\n"
+ "e' x'g' ''' h ''' "
+ "";
IDocument document = new Document(txt);
PyPartitioner partitioner = PyPartitionScanner.createPyPartitioner();
String scan = TestUtils.scan(partitioner.getScanner(), document);
assertEquals(TestUtils.listToExpected("__python_singleline_bytes_or_unicode1:0:7",
"null:7:1",
"null:8:1",
"null:9:1",
"__python_singleline_bytes_or_unicode1:10:8",
"null:18:1",
"null:19:1",
"__python_singleline_bytes_or_unicode1:20:3",
"null:23:1",
"__python_multiline_bytes_or_unicode1:24:9",
"null:33:1"), scan);
partitioner.connect(document);
document.setDocumentPartitioner(partitioner);
checkPartitions(document, "__python_singleline_bytes_or_unicode1:0:7",
"__dftl_partition_content_type:7:10",
"__python_singleline_bytes_or_unicode1:10:18",
"__dftl_partition_content_type:18:20",
"__python_singleline_bytes_or_unicode1:20:23",
"__dftl_partition_content_type:23:24",
"__python_multiline_bytes_or_unicode1:24:33",
"__dftl_partition_content_type:33:");
document.replace(txt.length() - " ''' ".length(), 0, "i");
checkPartitions(document, "__python_singleline_bytes_or_unicode1:0:7",
"__dftl_partition_content_type:7:10",
"__python_singleline_bytes_or_unicode1:10:18",
"__dftl_partition_content_type:18:20",
"__python_singleline_bytes_or_unicode1:20:23",
"__dftl_partition_content_type:23:24",
"__python_multiline_bytes_or_unicode1:24:34",
"__dftl_partition_content_type:34:");
document.replace(txt.length() - " ''' ".length() + 1, 0, "j");
checkPartitions(document, "__python_singleline_bytes_or_unicode1:0:7",
"__dftl_partition_content_type:7:10",
"__python_singleline_bytes_or_unicode1:10:18",
"__dftl_partition_content_type:18:20",
"__python_singleline_bytes_or_unicode1:20:23",
"__dftl_partition_content_type:23:24",
"__python_multiline_bytes_or_unicode1:24:35",
"__dftl_partition_content_type:35:");
}
public void testPartitioning4() throws Exception {
String txt = ""
+ "class F:\n"
+ " '''test'''\n"
+ " \"\"\"test\"\"\"\n"
+ " 'test'\n"
+ " \"test\"\n"
+ " `test`\n"
+ " #test\n"
+ " test = 10.\n"
+ "";
IDocument document = new Document(txt);
PyPartitioner partitioner = PyPartitionScanner.createPyPartitioner();
String scan = TestUtils.scan(partitioner.getScanner(), document);
assertEquals(TestUtils.listToExpected("null:0:1",
"null:1:1",
"null:2:1",
"null:3:1",
"null:4:1",
"null:5:1",
"null:6:1",
"null:7:1",
"null:8:1",
"null:9:1",
"null:10:1",
"null:11:1",
"null:12:1",
"__python_multiline_bytes_or_unicode1:13:10",
"null:23:1",
"null:24:1",
"__python_multiline_bytes_or_unicode2:25:10",
"null:35:1",
"null:36:1",
"__python_singleline_bytes_or_unicode1:37:6",
"null:43:1",
"null:44:1",
"__python_singleline_bytes_or_unicode2:45:6",
"null:51:1",
"null:52:1",
"__python_backquotes:53:6",
"null:59:1",
"null:60:1",
"__python_comment:61:6",
"null:67:1",
"null:68:1",
"null:69:1",
"null:70:1",
"null:71:1",
"null:72:1",
"null:73:1",
"null:74:1",
"null:75:1",
"null:76:1",
"null:77:1",
"null:78:1"), scan);
}
public void testPartitioning5() throws Exception {
String txt = ""
+ "'''test'''"
+ "";
IDocument document = new Document(txt);
PyPartitioner partitioner = PyPartitionScanner.createPyPartitioner();
String scan = TestUtils.scan(partitioner.getScanner(), document);
assertEquals(TestUtils.listToExpected("__python_multiline_bytes_or_unicode1:0:10"), scan);
}
private void checkPartitions(IDocument document, String... expected) throws Exception {
String found = TestUtils.getContentTypesAsStr(document);
assertEquals(TestUtils.listToExpected(expected), found);
}
}