/******************************************************************************
* Copyright (C) 2006-2013 Fabio Zadrozny
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Fabio Zadrozny <fabiofz@gmail.com> - initial API and implementation
******************************************************************************/
/*
* Created on 25/08/2005
*
* @author Fabio Zadrozny
*/
package com.python.pydev.codecompletion.participant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.python.pydev.core.ExtensionHelper;
import org.python.pydev.core.TestDependent;
import org.python.pydev.editor.codecompletion.PyCodeCompletion;
import org.python.pydev.editor.codecompletion.revisited.modules.CompiledModule;
import org.python.pydev.shared_core.SharedCorePlugin;
import com.python.pydev.analysis.additionalinfo.AdditionalInfoTestsBase;
import com.python.pydev.codecompletion.ctxinsensitive.CtxParticipant;
public class CompletionParticipantBuiltinsTest extends AdditionalInfoTestsBase {
public static void main(String[] args) {
try {
// DEBUG_TESTS_BASE = true;
CompletionParticipantBuiltinsTest test = new CompletionParticipantBuiltinsTest();
test.setUp();
test.testImportCompletion2();
test.tearDown();
System.out.println("Finished");
junit.textui.TestRunner.run(CompletionParticipantBuiltinsTest.class);
} catch (Exception e) {
e.printStackTrace();
} catch (Error e) {
e.printStackTrace();
}
}
@Override
public void setUp() throws Exception {
super.setUp();
CompiledModule.COMPILED_MODULES_ENABLED = true;
participant = new CtxParticipant();
ExtensionHelper.testingParticipants = new HashMap<String, List<Object>>();
ArrayList<Object> participants = new ArrayList<Object>(); /*IPyDevCompletionParticipant*/
participants.add(participant);
ExtensionHelper.testingParticipants.put(ExtensionHelper.PYDEV_COMPLETION, participants);
codeCompletion = new PyCodeCompletion();
this.restorePythonPath(false);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
useOriginalRequestCompl = false;
ExtensionHelper.testingParticipants = null;
}
// public void testCompletionBuiltins() throws Exception {
//// wx.Frame.CaptureMouse()
//// wx.Frame.CacheBestSize()
//// wx.Frame.AcceptsFocus()
//// wx.Frame.AcceptsFocusFromKeyboard()
// useOriginalRequestCompl = true;
// String s = "" +
// "def m1(a):\n" +
// " a.Accepts";
// requestCompl(s, -1, -1, new String[]{"AcceptsFocus()", "AcceptsFocusFromKeyboard()"});
//
//
// }
public void testImportCompletion2() throws Exception {
if (SharedCorePlugin.skipKnownFailures()) {
return;
}
if (TestDependent.PYTHON_WXPYTHON_PACKAGES != null) {
CompiledModule module = new CompiledModule("wx", this.getManager().getModulesManager(),
this.getManager().getNature());
participant = new CtxParticipant();
ICompletionProposal[] proposals = requestCompl("Frame", -1, -1, new String[] {});
assertContains("Frame - wx", proposals); //Expected to fail. See: com.python.pydev.analysis.additionalinfo.builders.AdditionalInfoModulesObserver.notifyCompiledModuleCreated(CompiledModule, IModulesManager)
}
}
public void testDiscoverReturnFromDocstring2() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype testlib.unittest.GUITest'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverReturnFromDocstring3() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype GUITest'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverReturnFromDocstring4() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype :class:`GUITest`'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverReturnFromDocstring5() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype :class:`~GUITest`'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverReturnFromDocstring6() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype :class:`!GUITest`'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverReturnFromDocstring7() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':rtype :function:`IgnoreTitle GUITest`'\n" +
"a = Foo()\n" +
"a.rara().";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverParamFromDocstring() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, a):\n" +
" ':type a: GUITest'\n" +
" a.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
/**
* See: http://sphinx-doc.org/ext/autodoc.html#directive-autoattribute
*
* For module data members and class attributes, documentation can either be put:
*
* - into a comment with special formatting (using a #: to start the comment instead of just #),
* - in a docstring after the definition i.e.: a = 10\n':type int'
*
* - Comments need to be either on a line of their own before the definition i.e.: #: :type int\na = 10
* - or immediately after the assignment on the same line. -- i.e.: a = 10 #: :type int
*
* The latter form is restricted to one line only.
* - Check LocalScope to fix this tests!
*/
public void testDiscoverParamFromInline1() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, lst):\n" +
" for a in lst: #: :type a: GUITest\n" +
" a.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverParamFromInline2() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, lst):\n" +
" #: :type a: GUITest\n" +
" for a in lst:\n" +
" a.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverParamFromInline2a() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, lst):\n" +
" #@type a: GUITest\n" +
" for a in lst:\n" +
" a.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testDiscoverParamFromInline3() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"class Foo:\n" +
" def rara(self, lst):\n" +
" for a in lst:\n" +
" ': :type a: GUITest'\n" +
" a.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "SetWidget(widget, show, wait)" });
assertTrue(comps.length > 30);
}
public void testUsePyTestFixture() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"def test_it(my_fixture_b)\n" +
" my_fixture_b.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "method1()", "method2()" });
// Only B completions (method1, method2, __repr__, __str__, etc.)
assertTrue(comps.length < 20);
}
public void testUsePyTestYieldFixture() throws Exception {
this.useOriginalRequestCompl = true;
String s;
s = "" +
"def test_it(my_fixture_c)\n" +
" my_fixture_c.";
ICompletionProposal[] comps = requestCompl(s, s.length(), -1, new String[] { "method3()", "method4()" });
// Only C completions (method3, method4, __repr__, __str__, etc.)
assertTrue(comps.length < 20);
}
}