in Extractors/Python/extractor/tests.py [0:0]
def foo():
'Interesting function'
pass''')
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Comment='Interesting function']")
assert functionDefinitionNode != None
def testFunctionDefSimpleArgs(self):
root = createTree('''def foo(self, banana): pass''')
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
argumentNode = argumentsNode.find("Argument[@Name='self']")
assert argumentNode != None
argumentNode = argumentsNode.find("Argument[@Name='banana']")
assert argumentNode != None
def testFunctionDefNoArgsWithReturn(self):
root = createTree('''def foo() ->None: pass''')
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']/Arguments")
assert functionDefinitionNode != None
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']/Arguments/*")
assert functionDefinitionNode is None
# The return annotation is 'None'
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']/Returns/NameConstant[@Name='None']")
assert functionDefinitionNode != None
def testFunctionDefDefaultArgs(self):
root = createTree('''def foo(self, banana=1, orange=""): pass''')
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
argumentNode = argumentsNode.find("Argument[@Name='self']")
assert argumentNode != None
argumentNode = argumentsNode.find("Argument[@Name='banana']/NumberLiteral[@Value='1']")
assert argumentNode != None
argumentNode = argumentsNode.find("Argument[@Name='orange']/StringLiteral[@Value='']")
assert argumentNode != None
def testFunctionDefStarredArgs(self):
root = createTree('''def foo(self, *arg1, **arg2): pass''')
# In this syntax, the *arg means that all the positional parameters should
# be passed as a list, while the **args causes the keyword parameters to be
# collected in a dictionary (in the args2 parameter).
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
argumentNode = argumentsNode.find("Argument[@Name='self']")
assert argumentNode != None
argumentNode = argumentsNode.find("Vararg/Argument[@Name='arg1']")
assert argumentNode != None
argumentNode = argumentsNode.find("KeywordArg/Argument[@Name='arg2']")
assert argumentNode != None
def testFunctionDefAnnotatedArgs(self):
root = createTree('''def foo(self: int, banana: str) -> str: pass''')
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
argumentNode = argumentsNode.find("Argument[@Name='self']")
assert argumentNode != None
parameterAnnotationNode = argumentNode.find("Annotation")
assert parameterAnnotationNode != None
argumentNode = argumentsNode.find("Argument[@Name='banana']")
assert argumentNode != None
parameterAnnotationNode = argumentNode.find("Annotation")
assert parameterAnnotationNode != None
functionDefinitionNode = root.find("Statements/FunctionDefinition[@Name='foo']/Returns/Name[@Id='str']")
assert functionDefinitionNode != None
def testAsyncFunctionDefWithPredefReturnNone(self):
root = createTree('''async def foo() -> None: pass''')
functionDefinitionNode = root.find("Statements/AsyncFunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
functionDefinitionNode = root.find("Statements/AsyncFunctionDefinition[@Name='foo']/Returns/NameConstant[@Name='None']")
assert functionDefinitionNode != None
def testAsyncFunctionDefWithPredefReturnStr(self):
root = createTree('''async def foo() -> str: pass''')
functionDefinitionNode = root.find("Statements/AsyncFunctionDefinition[@Name='foo']")
assert functionDefinitionNode != None
# There are no parameters:
argumentsNode = functionDefinitionNode.find("Arguments")
assert argumentsNode != None
functionDefinitionNode = root.find("Statements/AsyncFunctionDefinition[@Name='foo']/Returns/Name[@Id='str']")
assert functionDefinitionNode != None