/** * Copyright (c) 2005-2012 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 24/09/2005 */ package com.python.pydev.analysis.ctrl_1; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.editor.codefolding.MarkerAnnotationAndPosition; import com.python.pydev.analysis.AnalysisPreferencesStub; import com.python.pydev.analysis.CtxInsensitiveImportComplProposal; import com.python.pydev.analysis.IAnalysisPreferences; import com.python.pydev.analysis.additionalinfo.AdditionalInfoTestsBase; import com.python.pydev.analysis.ui.AutoImportsPreferencesPage; public class UndefinedVariableFixParticipantTest extends AdditionalInfoTestsBase { private UndefinedVariableFixParticipant participant; private AnalysisPreferencesStub prefs; private int start; private int end; private int type; private MarkerAnnotationAndPosition marker; private String s; private PySelection ps; private String line; private int offset; private ArrayList<ICompletionProposal> props; public static void main(String[] args) { try { UndefinedVariableFixParticipantTest test = new UndefinedVariableFixParticipantTest(); test.setUp(); test.testFix7(); test.tearDown(); System.out.println("finished"); junit.textui.TestRunner.run(UndefinedVariableFixParticipantTest.class); } catch (Exception e) { e.printStackTrace(); } } @Override public void setUp() throws Exception { super.setUp(); participant = new UndefinedVariableFixParticipant(); super.restorePythonPath(false); prefs = new AnalysisPreferencesStub(); props = new ArrayList<ICompletionProposal>(); } public void testFix() throws Exception { start = 6; end = 13; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); s = "print testlib"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(1, props); assertEquals("Import testlib", props.get(0).getDisplayString()); } public void testFix2() throws Exception { start = 6; end = 13; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); // hard: undefined: testlib // the result should be testlib.unittest because the token is actually a module. If it was // not a module, there would be no problems s = "print testlib.unittest"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(2, props); assertContains("Import testlib.unittest", props); assertContains("Import testlib", props); } public void testFix3() throws Exception { start = 6; end = 13; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); //try 2 s = "print testlib.unittest.anothertest"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(3, props); assertContains("Import testlib.unittest.anothertest", props); assertContains("Import testlib.unittest", props); assertContains("Import testlib", props); } public void testFix4() throws Exception { start = 6; end = 13; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); //try 3 s = "print testlib.unittest.anothertest.AnotherTest"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(3, props); assertContains("Import testlib.unittest.anothertest", props); assertContains("Import testlib.unittest", props); assertContains("Import testlib", props); } public void testFix5() throws Exception { start = 6; end = 17; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); //try 3 s = "print AnotherTest"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(1, props); assertContains("Import AnotherTest (testlib.unittest.anothertest)", props); } public void testFix6() throws Exception { start = 6; end = 11; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); //try 3 s = "print DTest"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(1, props); //appears with __init__ assertContains("Import DTest (relative.rel1.__init__)", props); CtxInsensitiveImportComplProposal compl = (CtxInsensitiveImportComplProposal) props.get(0); //but applies without it assertEquals("from relative.rel1 import DTest", compl.realImportRep); } public void testFix7() throws Exception { AutoImportsPreferencesPage.TESTS_DO_IGNORE_IMPORT_STARTING_WITH_UNDER = true; try { start = 6; end = 11; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); s = "print Priv3"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(1, props); //appears with _ assertContains("Import Priv3 (relative.rel1._priv1._priv2._priv3)", props); CtxInsensitiveImportComplProposal compl = (CtxInsensitiveImportComplProposal) props.get(0); //but applies without it assertEquals("from relative.rel1 import Priv3", compl.realImportRep); } finally { AutoImportsPreferencesPage.TESTS_DO_IGNORE_IMPORT_STARTING_WITH_UNDER = false; } } public void testFix8() throws Exception { start = 6; end = 14; type = IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE; marker = createMarkerStub(start, end, type); s = "print NotPriv3"; ps = new PySelection(new Document(s)); line = s; offset = s.length(); props = new ArrayList<ICompletionProposal>(); participant.addProps(marker, prefs, line, ps, offset, nature, null, props); printProps(1, props); //appears with _ assertContains("Import NotPriv3 (relative.rel1._priv1._priv2.notpriv3)", props); CtxInsensitiveImportComplProposal compl = (CtxInsensitiveImportComplProposal) props.get(0); //but applies without it assertEquals("from relative.rel1._priv1._priv2.notpriv3 import NotPriv3", compl.realImportRep); } private void assertContains(String expected, List<ICompletionProposal> props) { StringBuffer buffer = new StringBuffer(); for (ICompletionProposal proposal : props) { buffer.append("\n"); buffer.append(proposal.getDisplayString()); if (proposal.getDisplayString().equals(expected)) { return; } } fail("not found. Available:\n" + buffer); } private void printProps(int i, List<ICompletionProposal> props) { if (props.size() != i) { for (ICompletionProposal proposal : props) { System.out.println(proposal.getDisplayString()); } } assertEquals(i, props.size()); } }