/**
* 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.
*/
package com.python.pydev.analysis.tabnanny;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.Document;
import org.python.pydev.editor.autoedit.TestIndentPrefs;
import com.python.pydev.analysis.AnalysisPreferencesStub;
import com.python.pydev.analysis.messages.IMessage;
public class TabNannyTest extends TestCase {
public static void main(String[] args) {
try {
TabNannyTest analyzer2 = new TabNannyTest();
analyzer2.setUp();
analyzer2.testNoInconsistentIndentInStrings();
analyzer2.tearDown();
System.out.println("finished");
junit.textui.TestRunner.run(TabNannyTest.class);
System.out.println("finished all");
} catch (Throwable e) {
e.printStackTrace();
}
System.exit(0);
}
private AnalysisPreferencesStub prefs;
@Override
protected void setUp() throws Exception {
this.prefs = new AnalysisPreferencesStub();
}
public void testTabErrors1() throws Exception {
Document doc = new Document("" +
"aaa\n" +
"\t\n" +
" \n" +
" \t\n" +
"ccc\n" +
"");
List<IMessage> messages = TabNanny.analyzeDoc(doc, this.prefs, "", new TestIndentPrefs(true, 4),
new NullProgressMonitor());
for (IMessage m : messages) {
assertEquals("Mixed Indentation: Tab found", m.getMessage());
int startLine = m.getStartLine(null);
if (startLine == 2) {
assertEquals(1, m.getStartCol(null));
assertEquals(2, m.getEndCol(null));
} else if (startLine == 4) {
assertEquals(5, m.getStartCol(null));
assertEquals(6, m.getEndCol(null));
} else {
throw new RuntimeException("Unexpected line:" + startLine);
}
}
assertEquals(2, messages.size());
}
public void testTabErrors2() throws Exception {
Document doc = new Document("" +
"def m(b):\n" +
" pass\n" +
"\tpass\n" +
" \n" +
" \n" +
" \n"
+
"\n" +
"");
List<IMessage> messages = TabNanny.analyzeDoc(doc, this.prefs, "", new TestIndentPrefs(true, 4),
new NullProgressMonitor());
IMessage m = messages.get(0);
assertEquals(1, messages.size());
assertEquals("Mixed Indentation: Tab found", m.getMessage());
assertEquals(3, m.getStartLine(null));
assertEquals(3, m.getEndLine(null));
assertEquals(1, m.getStartCol(null));
assertEquals(2, m.getEndCol(null));
}
public void testInconsistentIndent() throws Exception {
Document doc = new Document("" +
"def m(b):\n" +
" pass\n" +
" \n" +
"\n" +
"");
List<IMessage> messages = TabNanny.analyzeDoc(doc, this.prefs, "", new TestIndentPrefs(true, 4),
new NullProgressMonitor());
assertEquals(0, messages.size());
}
public void testNoInconsistentIndentInStrings() throws Exception {
Document doc = new Document("" +
"def foo():\n" +
" string = \"\"\"bla\n" +
"code()\n" +
" string ident\n"
+
" string ident\"\"\"\n" +
"\n" +
"");
List<IMessage> messages = TabNanny.analyzeDoc(doc, this.prefs, "", new TestIndentPrefs(true, 4),
new NullProgressMonitor());
assertEquals(0, messages.size());
}
public void testInconsistentIndent2() throws Exception {
Document doc = new Document("" +
"def m(b):\n" +
" pass\n" +
"\n" +
"");
List<IMessage> messages = TabNanny.analyzeDoc(doc, this.prefs, "", new TestIndentPrefs(true, 4),
new NullProgressMonitor());
assertEquals(1, messages.size());
IMessage m = messages.get(0);
assertEquals("Bad Indentation (3 spaces)", m.getMessage());
assertEquals(2, m.getStartLine(null));
assertEquals(2, m.getEndLine(null));
assertEquals(1, m.getStartCol(null));
assertEquals(4, m.getEndCol(null));
}
}