; subclasses of unittest.TestCase or TestCase((class_definition name: (identifier) @run @_unittest_class_name superclasses: (argument_list [ (identifier) @_superclass (attribute (identifier) @_superclass) ]) (#eq? @_superclass "TestCase")) @_python-unittest-class (#set! tag python-unittest-class)) ; test methods whose names start with `test` in a TestCase(class_definition name: (identifier) @_unittest_class_name superclasses: (argument_list [ (identifier) @_superclass (attribute (identifier) @_superclass) ]) (#eq? @_superclass "TestCase") body: (block (function_definition name: (identifier) @run @_unittest_method_name (#match? @_unittest_method_name "^test.*")) @_python-unittest-method (#set! tag python-unittest-method))) ; pytest functions((module (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test_")) @_python-pytest-method) (#set! tag python-pytest-method)) ; decorated pytest functions((module (decorated_definition (decorator)+ @_decorator definition: (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test_"))) @_python-pytest-method) (#set! tag python-pytest-method)) ; pytest classes(module (class_definition name: (identifier) @run @_pytest_class_name (#match? @_pytest_class_name "^Test")) (#set! tag python-pytest-class)) ; decorated pytest classes(module (decorated_definition (decorator)+ @_decorator definition: (class_definition name: (identifier) @run @_pytest_class_name (#match? @_pytest_class_name "^Test"))) (#set! tag python-pytest-class)) ; pytest class methods(module (class_definition name: (identifier) @_pytest_class_name (#match? @_pytest_class_name "^Test") body: (block [ (decorated_definition (decorator)+ @_decorator definition: (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test_"))) (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test")) ] @_python-pytest-method) (#set! tag python-pytest-method))) ; decorated pytest class methods(module (decorated_definition (decorator)+ @_decorator definition: (class_definition name: (identifier) @_pytest_class_name (#match? @_pytest_class_name "^Test") body: (block [ (decorated_definition (decorator)+ @_decorator definition: (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test_"))) (function_definition name: (identifier) @run @_pytest_method_name (#match? @_pytest_method_name "^test")) ] @_python-pytest-method) (#set! tag python-pytest-method)))) ; module main method(module (if_statement condition: (comparison_operator (identifier) @run @_lhs operators: "==" (string) @_rhs) (#eq? @_lhs "__name__") (#match? @_rhs "^[\"']__main__[\"']$") (#set! tag python-module-main-method)))
; subclasses of unittest.TestCase or TestCase
((class_definition
name: (identifier) @run @_unittest_class_name
superclasses: (argument_list
[
(identifier) @_superclass
(attribute
(identifier) @_superclass)
])
(#eq? @_superclass "TestCase")) @_python-unittest-class
(#set! tag python-unittest-class))
; test methods whose names start with `test` in a TestCase
(class_definition
name: (identifier) @_unittest_class_name
superclasses: (argument_list
[
(identifier) @_superclass
(attribute
(identifier) @_superclass)
])
(#eq? @_superclass "TestCase")
body: (block
(function_definition
name: (identifier) @run @_unittest_method_name
(#match? @_unittest_method_name "^test.*")) @_python-unittest-method
(#set! tag python-unittest-method)))
; pytest functions
((module
(function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test_")) @_python-pytest-method)
(#set! tag python-pytest-method))
; decorated pytest functions
((module
(decorated_definition
(decorator)+ @_decorator
definition: (function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test_"))) @_python-pytest-method)
(#set! tag python-pytest-method))
; pytest classes
(module
(class_definition
name: (identifier) @run @_pytest_class_name
(#match? @_pytest_class_name "^Test"))
(#set! tag python-pytest-class))
; decorated pytest classes
(module
(decorated_definition
(decorator)+ @_decorator
definition: (class_definition
name: (identifier) @run @_pytest_class_name
(#match? @_pytest_class_name "^Test")))
(#set! tag python-pytest-class))
; pytest class methods
(module
(class_definition
name: (identifier) @_pytest_class_name
(#match? @_pytest_class_name "^Test")
body: (block
[
(decorated_definition
(decorator)+ @_decorator
definition: (function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test_")))
(function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test"))
] @_python-pytest-method)
(#set! tag python-pytest-method)))
; decorated pytest class methods
(module
(decorated_definition
(decorator)+ @_decorator
definition: (class_definition
name: (identifier) @_pytest_class_name
(#match? @_pytest_class_name "^Test")
body: (block
[
(decorated_definition
(decorator)+ @_decorator
definition: (function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test_")))
(function_definition
name: (identifier) @run @_pytest_method_name
(#match? @_pytest_method_name "^test"))
] @_python-pytest-method)
(#set! tag python-pytest-method))))
; module main method
(module
(if_statement
condition: (comparison_operator
(identifier) @run @_lhs
operators: "=="
(string) @_rhs)
(#eq? @_lhs "__name__")
(#match? @_rhs "^[\"']__main__[\"']$")
(#set! tag python-module-main-method)))