mirror of
https://github.com/github/codeql.git
synced 2026-04-30 03:05:15 +02:00
Merge pull request #9368 from RasmusWL/test-model-api-graphs
Python: Port test model to API graphs
This commit is contained in:
@@ -1,14 +1,15 @@
|
||||
import python
|
||||
private import semmle.python.ApiGraphs
|
||||
|
||||
abstract class TestScope extends Scope { }
|
||||
|
||||
// don't extend Class directly to avoid ambiguous method warnings
|
||||
class UnitTestClass extends TestScope {
|
||||
class UnitTestClass extends TestScope, Class {
|
||||
UnitTestClass() {
|
||||
exists(ClassValue cls | this = cls.getScope() |
|
||||
cls.getABaseType+() = Module::named("unittest").attr(_)
|
||||
or
|
||||
cls.getABaseType+().getName().toLowerCase() = "testcase"
|
||||
exists(API::Node testCaseClass, string testCaseString |
|
||||
testCaseString.matches("%TestCase") and
|
||||
testCaseClass = any(API::Node mod).getMember(testCaseString)
|
||||
|
|
||||
this.getParent() = testCaseClass.getASubclass*().getAnImmediateUse().asExpr()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
| test.py:4:1:4:23 | Class MyTest |
|
||||
| test.py:6:5:6:21 | Function test_1 |
|
||||
| test.py:9:5:9:21 | Function test_2 |
|
||||
| test_foo.py:3:1:3:15 | Function test_foo |
|
||||
| unittest_test.py:3:1:3:33 | Class FooTest |
|
||||
| unittest_test.py:4:5:4:25 | Function test_valid |
|
||||
| unittest_test.py:7:1:7:49 | Class FunctionFooTest |
|
||||
| unittest_test.py:8:5:8:25 | Function test_valid |
|
||||
| unittest_test.py:11:1:11:50 | Class AsyncTest |
|
||||
| unittest_test.py:12:11:12:31 | Function test_valid |
|
||||
| unittest_test.py:17:1:17:45 | Class MyDjangoUnitTest |
|
||||
| unittest_test.py:18:5:18:25 | Function test_valid |
|
||||
| unittest_test.py:23:1:23:56 | Class MyFlaskUnitTest |
|
||||
| unittest_test.py:24:5:24:25 | Function test_valid |
|
||||
| unittest_test.py:29:1:29:59 | Class MyTornadoUnitTest |
|
||||
| unittest_test.py:30:5:30:25 | Function test_valid |
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
class TestCase:
|
||||
pass
|
||||
|
||||
class MyTest(TestCase):
|
||||
|
||||
def test_1(self):
|
||||
pass
|
||||
|
||||
def test_2(self):
|
||||
pass
|
||||
@@ -3,3 +3,29 @@ import unittest
|
||||
class FooTest(unittest.TestCase):
|
||||
def test_valid(self):
|
||||
pass
|
||||
|
||||
class FunctionFooTest(unittest.FunctionTestCase):
|
||||
def test_valid(self):
|
||||
pass
|
||||
|
||||
class AsyncTest(unittest.IsolatedAsyncioTestCase):
|
||||
async def test_valid(self):
|
||||
pass
|
||||
|
||||
# django -- see https://docs.djangoproject.com/en/4.0/topics/testing/overview/
|
||||
import django.test
|
||||
class MyDjangoUnitTest(django.test.TestCase):
|
||||
def test_valid(self):
|
||||
pass
|
||||
|
||||
# flask -- see https://pythonhosted.org/Flask-Testing/
|
||||
import flask_testing
|
||||
class MyFlaskUnitTest(flask_testing.LiveServerTestCase):
|
||||
def test_valid(self):
|
||||
pass
|
||||
|
||||
# tornado -- see https://www.tornadoweb.org/en/stable/testing.html#tornado.testing.AsyncHTTPTestCase
|
||||
import tornado.testing
|
||||
class MyTornadoUnitTest(tornado.testing.AsyncHTTPTestCase):
|
||||
def test_valid(self):
|
||||
pass
|
||||
|
||||
@@ -61,8 +61,8 @@ def ok_assert_false(x):
|
||||
if x:
|
||||
assert 0==1, "Ok"
|
||||
|
||||
class TestCase:
|
||||
pass
|
||||
from unittest import TestCase
|
||||
|
||||
|
||||
class MyTest(TestCase):
|
||||
def test_ok_assert_in_test(self, x):
|
||||
|
||||
Reference in New Issue
Block a user