/**
* 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 Dec 9, 2006
* @author Fabio
*/
package com.python.pydev.analysis;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.Document;
import org.python.pydev.core.MisconfigurationException;
import org.python.pydev.editor.autoedit.TestIndentPrefs;
import org.python.pydev.editor.codecompletion.revisited.modules.AbstractModule;
import org.python.pydev.editor.codecompletion.revisited.modules.SourceModule;
import com.python.pydev.analysis.messages.IMessage;
public class OccurrencesAnalyzerListCompTest extends AnalysisTestsBase {
public static void main(String[] args) {
try {
OccurrencesAnalyzerListCompTest analyzer2 = new OccurrencesAnalyzerListCompTest();
analyzer2.setUp();
analyzer2.testListComprehension6();
analyzer2.tearDown();
System.out.println("finished");
junit.textui.TestRunner.run(OccurrencesAnalyzerListCompTest.class);
System.out.println("finished all");
} catch (Throwable e) {
e.printStackTrace();
}
System.exit(0);
}
public void testListComprehension() {
doc = new Document("def m1():\n" +
" print [i for i in range(10)]");
checkNoError();
}
public void testListComprehension2() {
doc = new Document("enumeratedDays = ((0, ('monday', 'mon')), (1, ('tuesday', 'tue')))\n" +
"print dict((day, index) for index, daysRep in enumeratedDays for day in daysRep)\n");
checkNoError();
}
public void testListComprehension3() {
doc = new Document("enumeratedDays = ((0, ('monday', 'mon')), (1, ('tuesday', 'tue')))\n" +
"print dict((index) for index, daysRep in (enumeratedDays for day in daysRep))\n");
analyzer = new OccurrencesAnalyzer();
msgs = analyzeDoc();
printMessages(msgs, 1);
assertEquals("Undefined variable: daysRep", msgs[0].getMessage());
}
private IMessage[] analyzeDoc() {
try {
return analyzer.analyzeDocument(nature,
(SourceModule) AbstractModule.createModuleFromDoc(null, null, doc, nature, true), prefs, doc,
new NullProgressMonitor(), new TestIndentPrefs(true, 4));
} catch (MisconfigurationException e) {
throw new RuntimeException(e);
}
}
public void testListComprehension3a() {
doc = new Document("enumeratedDays = ((0, ('monday', 'mon')), (1, ('tuesday', 'tue')))\n" +
"print dict((day, index) for index, daysRep in (foo for day in enumeratedDays))\n");
analyzer = new OccurrencesAnalyzer();
msgs = analyzeDoc();
assertEquals(2, msgs.length);
assertContainsMsg("Undefined variable: foo", msgs);
assertContainsMsg("Undefined variable: day", msgs);
}
public void testListComprehension3b() {
doc = new Document("enumeratedDays = ((0, ('monday', 'mon')), (1, ('tuesday', 'tue')))\n" +
"print dict((day, index) for index, daysRep in (day for day in enumeratedDays))\n");//the day from the "(day for day in enumeratedDays)" should not be kept in the scope
analyzer = new OccurrencesAnalyzer();
msgs = analyzeDoc();
printMessages(msgs, 1);
assertEquals("Undefined variable: day", msgs[0].getMessage());
}
public void testListComprehension4() {
doc = new Document("enumeratedDays = ((0, ('monday', 'mon')), (1, ('tuesday', 'tue')))\n" +
"print dict((day, index) for index, daysRep in enumeratedDays for day in bla)\n");
analyzer = new OccurrencesAnalyzer();
msgs = analyzeDoc();
printMessages(msgs, 1);
assertEquals("Undefined variable: bla", msgs[0].getMessage());
}
public void testListComprehension5() {
doc = new Document("data = [[1,2,3],[4,5,6]]\n" +
"newdata = [[val * 2 for val in lst] for lst in data]\n");
checkNoError();
}
public void testListComprehension6() {
doc = new Document("def double_cycle():\n" +
" print [[i ** j for i in range(10)] for j in range(5)]\n"
+
"\n");
checkNoError();
}
}