package com.python.pydev.analysis;
import org.eclipse.jface.text.Document;
import org.python.pydev.core.IPythonNature;
import org.python.pydev.parser.jython.ParseException;
import com.python.pydev.analysis.messages.IMessage;
public class OccurrencesAnalyzerPy36Test extends AnalysisTestsBase {
private int initialGrammar;
@Override
public void setUp() throws Exception {
initialGrammar = GRAMMAR_TO_USE_FOR_PARSING;
GRAMMAR_TO_USE_FOR_PARSING = IPythonNature.GRAMMAR_PYTHON_VERSION_3_6;
super.setUp();
}
@Override
public void tearDown() throws Exception {
GRAMMAR_TO_USE_FOR_PARSING = initialGrammar;
ParseException.verboseExceptions = true;
super.tearDown();
}
public void testUsedVariable1() throws Exception {
doc = new Document(""
+ "def bar(a):\n" +
" pass\n" +
"\n" +
"def foo():\n" +
" v = [1]\n" +
" bar(a=(*v, ))" +
"");
checkNoError();
}
public void testSyntaxErrorOnFStrings() throws Exception {
doc = new Document("f'fstring{'" +
"");
IMessage[] messages = checkError("SyntaxError: Empty expression not allowed in f-string, Unbalanced '{'");
assertEquals(1, messages.length);
assertEquals(1, messages[0].getStartLine(doc));
assertEquals(1, messages[0].getEndLine(doc));
assertEquals(10, messages[0].getStartCol(doc));
assertEquals(11, messages[0].getEndCol(doc));
}
public void testSyntaxErrorOnFStrings2() throws Exception {
doc = new Document("\n\nf'fstring{'" +
"");
IMessage[] messages = checkError("SyntaxError: Empty expression not allowed in f-string, Unbalanced '{'");
assertEquals(1, messages.length);
assertEquals(3, messages[0].getStartLine(doc));
assertEquals(3, messages[0].getEndLine(doc));
assertEquals(10, messages[0].getStartCol(doc));
assertEquals(11, messages[0].getEndCol(doc));
}
public void testSyntaxErrorOnFStrings3() throws Exception {
doc = new Document("\n\nf''''\nfstring{'''" +
"");
IMessage[] messages = checkError("SyntaxError: Empty expression not allowed in f-string, Unbalanced '{'");
assertEquals(1, messages.length);
assertEquals(4, messages[0].getStartLine(doc));
assertEquals(4, messages[0].getEndLine(doc));
assertEquals(7, messages[0].getStartCol(doc));
assertEquals(8, messages[0].getEndCol(doc));
}
public void testErrorOnFStringsExpression() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("f'fstring{i i i}'" +
"");
IMessage[] messages = checkError("SyntaxError: invalid syntax");
assertEquals(1, messages.length);
assertEquals(1, messages[0].getStartLine(doc));
assertEquals(1, messages[0].getEndLine(doc));
assertEquals(13, messages[0].getStartCol(doc));
assertEquals(14, messages[0].getEndCol(doc));
}
public void testErrorOnFStringsExpression2() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("\n\nf'fstring{i i i}'" +
"");
IMessage[] messages = checkError("SyntaxError: invalid syntax");
assertEquals(1, messages.length);
assertEquals(3, messages[0].getStartLine(doc));
assertEquals(3, messages[0].getEndLine(doc));
assertEquals(13, messages[0].getStartCol(doc));
assertEquals(14, messages[0].getEndCol(doc));
}
public void testErrorOnMultiLineFStringsExpression() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("f'''\nfstring{i i i}\n\n'''" +
"");
IMessage[] messages = checkError("SyntaxError: invalid syntax");
assertEquals(1, messages.length);
assertEquals(2, messages[0].getStartLine(doc));
assertEquals(2, messages[0].getEndLine(doc));
assertEquals(11, messages[0].getStartCol(doc));
assertEquals(12, messages[0].getEndCol(doc));
}
public void testErrorOnMultiLineFStringsExpression2() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("\n\nf'''\nfstring{i i i}\n\n'''" +
"");
IMessage[] messages = checkError("SyntaxError: invalid syntax");
assertEquals(1, messages.length);
assertEquals(4, messages[0].getStartLine(doc));
assertEquals(4, messages[0].getEndLine(doc));
assertEquals(11, messages[0].getStartCol(doc));
assertEquals(12, messages[0].getEndCol(doc));
}
public void testSemanticAnalysisOfFStrings() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("a = 10\nf'{a}'" +
"");
checkNoError();
}
public void testSemanticAnalysisOfFStrings2() throws Exception {
ParseException.verboseExceptions = false;
doc = new Document("a = 10\nf'{b}'" +
"");
IMessage[] messages = checkError("Undefined variable: b");
assertEquals(1, messages.length);
assertEquals(2, messages[0].getStartLine(doc));
assertEquals(2, messages[0].getEndLine(doc));
assertEquals(4, messages[0].getStartCol(doc));
assertEquals(5, messages[0].getEndCol(doc));
}
}