/**
* Copyright (c) 2015 by Brainwy Software Ltda. 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 org.python.pydev.editor.codecompletion;
import junit.framework.TestCase;
import org.python.pydev.core.UnpackInfo;
import org.python.pydev.parser.jython.ast.FunctionDef;
import org.python.pydev.parser.jython.ast.factory.AdapterPrefs;
import org.python.pydev.parser.jython.ast.factory.PyAstFactory;
import org.python.pydev.parser.visitors.NodeUtils;
public class NodeUtilsTest extends TestCase {
public void testHandledParamType0() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":type a: Bar"));
assertEquals("Bar", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledParamType0a() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":type a: list of Bar"));
assertEquals("list of Bar", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledParamType0b() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":type a: list(str)"));
assertEquals("list(str)", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledParamType1() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":param Bar a:"));
assertEquals("Bar", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledParamType2() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString("@param a: Bar"));
assertEquals("Bar", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledParamType3() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":param Bar a: some string"));
assertEquals("Bar", NodeUtils.getTypeForParameterFromDocstring("a", functionDef));
}
public void testHandledReturnType() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":rtype Bar"));
assertEquals("Bar", NodeUtils.getReturnTypeFromDocstring(functionDef));
}
public void testHandledReturnType1() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString("@return Foo:\n this is the foo return"));
assertEquals("Foo", NodeUtils.getReturnTypeFromDocstring(functionDef));
}
public void testHandledReturnType2() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":rtype :class:`Bar`"));
assertEquals("Bar", NodeUtils.getReturnTypeFromDocstring(functionDef));
}
public void testHandledReturnType3() throws Exception {
PyAstFactory factory = new PyAstFactory(new AdapterPrefs("\n", null));
FunctionDef functionDef = factory.createFunctionDef("foo");
factory.setBody(functionDef, factory.createString(":rtype :function:`IgnoreTitle GUITest`"));
assertEquals("GUITest", NodeUtils.getReturnTypeFromDocstring(functionDef));
}
public void testGetUnpackedType() throws Exception {
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("list[str]", new UnpackInfo(true, -1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("list [str]", new UnpackInfo(true, -1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("list(str)", new UnpackInfo(true, -1)));
assertEquals("int,str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int,str]", new UnpackInfo(true, -1)));
assertEquals("int,str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict [int,str]", new UnpackInfo(true, -1)));
assertEquals("int->str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int->str]", new UnpackInfo(true, -1)));
assertEquals("int:str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int:str]", new UnpackInfo(true, -1)));
assertEquals("int", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int,str]", new UnpackInfo(false, 0)));
assertEquals("int", NodeUtils.getUnpackedTypeFromTypeDocstring("dict [int,str]", new UnpackInfo(false, 0)));
assertEquals("int", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int->str]", new UnpackInfo(false, 0)));
assertEquals("int", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int:str]", new UnpackInfo(false, 0)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int,str]", new UnpackInfo(false, 1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict [int,str]", new UnpackInfo(false, 1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int->str]", new UnpackInfo(false, 1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict[int:str]", new UnpackInfo(false, 1)));
assertEquals("str", NodeUtils.getUnpackedTypeFromTypeDocstring("dict(int:str)", new UnpackInfo(false, 1)));
assertEquals("foo(str,a)",
NodeUtils
.getUnpackedTypeFromTypeDocstring("list(dict[int,str], foo(str,a), bar)", new UnpackInfo(false,
1)));
assertEquals("dict[int,str]",
NodeUtils
.getUnpackedTypeFromTypeDocstring("list(dict[int,str], foo(str,a), bar)", new UnpackInfo(false,
0)));
assertEquals("foo(str,a)",
NodeUtils.getUnpackedTypeFromTypeDocstring("list(dict[int,str], foo(str,a))", new UnpackInfo(false, 1)));
assertEquals("str",
NodeUtils.getUnpackedTypeFromTypeDocstring("list(dict[int,str], str)", new UnpackInfo(false, 1)));
}
public void testGetReturnType() throws Exception {
String docstring = ""
+ "S.splitlines(keepends=False) -> list of strings\n"
+ "\n"
+ "Return a list of the lines in S, breaking at line boundaries.\n"
+ "Line breaks are not included in the resulting list unless keepends\n"
+ "is given and true.\n"
+ "";
String returnTypeFromDocstring = NodeUtils.getReturnTypeFromDocstring(docstring);
assertEquals("list (str)", returnTypeFromDocstring);
assertEquals("str",
NodeUtils.getUnpackedTypeFromTypeDocstring("list (str)", new UnpackInfo(false, 0)));
}
public void testGetReturnType2() throws Exception {
String docstring = ""
+ "S.splitlines(keepends=False) -> list of Foo\n"
+ "";
String returnTypeFromDocstring = NodeUtils.getReturnTypeFromDocstring(docstring);
assertEquals("list(Foo)", returnTypeFromDocstring);
}
}