/**
* Copyright (c) 2005-2011 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 Mar 21, 2005
*
* @author Fabio Zadrozny
*/
package org.python.pydev.editor;
import junit.framework.TestCase;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.swt.graphics.RGB;
import org.python.pydev.editor.PyCodeScanner.NumberDetector;
import org.python.pydev.editor.preferences.PydevEditorPrefs;
import org.python.pydev.ui.ColorAndStyleCache;
/**
* @author Fabio Zadrozny
*/
public class PyCodeScannerTest extends TestCase {
private NumberDetector detector;
private ColorAndStyleCache colorCache;
public static void main(String[] args) {
PyCodeScannerTest test = new PyCodeScannerTest();
try {
test.setUp();
test.testScanner5();
test.tearDown();
System.out.println("Finished");
junit.textui.TestRunner.run(PyCodeScannerTest.class);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
detector = new PyCodeScanner.NumberDetector();
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
}
public void testNumber() {
assertTrue(detector.isWordStart('1'));
assertTrue(detector.isWordPart('.'));
assertTrue(detector.isWordPart('2'));
assertTrue(detector.isWordPart('e'));
assertTrue(detector.isWordPart('5'));
assertFalse(detector.isWordPart(' '));
}
public void testHexa() {
assertTrue(detector.isWordStart('0'));
assertTrue(detector.isWordPart('x'));
assertTrue(detector.isWordPart('F'));
assertTrue(detector.isWordPart('F'));
assertFalse(detector.isWordPart(' '));
}
private PyCodeScanner createCodeScanner() {
PreferenceStore store = new PreferenceStore();
store.putValue(PydevEditorPrefs.KEYWORD_COLOR, StringConverter.asString(new RGB(1, 0, 0)));
store.putValue(PydevEditorPrefs.SELF_COLOR, StringConverter.asString(new RGB(2, 0, 0)));
store.putValue(PydevEditorPrefs.CODE_COLOR, StringConverter.asString(new RGB(3, 0, 0)));
store.putValue(PydevEditorPrefs.DECORATOR_COLOR, StringConverter.asString(new RGB(4, 0, 0)));
store.putValue(PydevEditorPrefs.NUMBER_COLOR, StringConverter.asString(new RGB(5, 0, 0)));
store.putValue(PydevEditorPrefs.FUNC_NAME_COLOR, StringConverter.asString(new RGB(6, 0, 0)));
store.putValue(PydevEditorPrefs.CLASS_NAME_COLOR, StringConverter.asString(new RGB(7, 0, 0)));
store.putValue(PydevEditorPrefs.OPERATORS_COLOR, StringConverter.asString(new RGB(8, 0, 0)));
store.putValue(PydevEditorPrefs.PARENS_COLOR, StringConverter.asString(new RGB(9, 0, 0)));
this.colorCache = new ColorAndStyleCache(store);
PyCodeScanner scanner = new PyCodeScanner(colorCache);
return scanner;
}
public void testScanner() throws Exception {
String str = "class Example(object): \n" +
" \n"
+
" def Call(self, param1=None): \n" +
" return param1 + 10 * 10 \n"
+
" \n" +
" def Call2(self): \n"
+
" return self.Call(param1=10)" +
"";
PyCodeScanner scanner = createCodeScanner();
scanner.setRange(new Document(str), 0, str.length());
IToken nextToken = scanner.nextToken();
while (!nextToken.isEOF()) {
scanner.getTokenOffset();
scanner.getTokenLength();
nextToken = scanner.nextToken();
}
}
public void testScanner2() throws Exception {
PyCodeScanner scanner = createCodeScanner();
String str = "def Method():pass";
scanner.setRange(new Document(str), 0, str.length());
assertToken(scanner, 0, 3, colorCache.getKeywordTextAttribute());//def
assertToken(scanner, 3, 1, colorCache.getCodeTextAttribute()); //whitespace
assertToken(scanner, 4, 6, colorCache.getFuncNameTextAttribute()); //Method
assertToken(scanner, 10, 1, colorCache.getParensTextAttribute()); //(
assertToken(scanner, 11, 1, colorCache.getParensTextAttribute()); //)
assertToken(scanner, 12, 1, colorCache.getCodeTextAttribute()); //:
assertToken(scanner, 13, 4, colorCache.getKeywordTextAttribute()); //pass
}
public void testScanner3() throws Exception {
PyCodeScanner scanner = createCodeScanner();
String str = "a=1+2";
scanner.setRange(new Document(str), 0, str.length());
assertToken(scanner, 0, 1, colorCache.getCodeTextAttribute());//a
assertToken(scanner, 1, 1, colorCache.getOperatorsTextAttribute()); //=
assertToken(scanner, 2, 1, colorCache.getNumberTextAttribute()); //1
assertToken(scanner, 3, 1, colorCache.getOperatorsTextAttribute()); //+
assertToken(scanner, 4, 1, colorCache.getNumberTextAttribute()); //2
}
public void testScanner4() throws Exception {
PyCodeScanner scanner = createCodeScanner();
String str = "class Clas():pass";
scanner.setRange(new Document(str), 0, str.length());
assertToken(scanner, 0, 5, colorCache.getKeywordTextAttribute());//class
assertToken(scanner, 5, 1, colorCache.getCodeTextAttribute()); //whitespace
assertToken(scanner, 6, 4, colorCache.getClassNameTextAttribute()); //Class1
assertToken(scanner, 10, 1, colorCache.getParensTextAttribute()); //(
assertToken(scanner, 11, 1, colorCache.getParensTextAttribute()); //)
assertToken(scanner, 12, 1, colorCache.getCodeTextAttribute()); //:
assertToken(scanner, 13, 4, colorCache.getKeywordTextAttribute()); //pass
}
public void testScanner5() throws Exception {
PyCodeScanner scanner = createCodeScanner();
String str = "a=''; b";
scanner.setRange(new Document(str), 0, str.length());
assertToken(scanner, 0, 1, colorCache.getCodeTextAttribute());//a
assertToken(scanner, 1, 1, colorCache.getOperatorsTextAttribute()); //=
assertToken(scanner, 2, 1, colorCache.getCodeTextAttribute()); //'
assertToken(scanner, 3, 1, colorCache.getCodeTextAttribute()); //'
assertToken(scanner, 4, 1, colorCache.getCodeTextAttribute()); //;
assertToken(scanner, 5, 1, colorCache.getCodeTextAttribute()); //
assertToken(scanner, 6, 1, colorCache.getCodeTextAttribute()); //b
assertToken(scanner, 7, 0, colorCache.getCodeTextAttribute()); //EOF
}
private void assertToken(PyCodeScanner scanner, int offset, int len, TextAttribute data) {
IToken token = scanner.nextToken();
assertEquals(offset, scanner.getTokenOffset());
assertEquals(len, scanner.getTokenLength());
TextAttribute tokenData = (TextAttribute) token.getData();
if (len > 0) {
assertEquals(data.getForeground(), tokenData.getForeground());
}
}
}