Skip to content

Commit 2871eb3

Browse files
committed
Python: Fix (some) shortcomings of tests filter
1 parent 6ed7b3d commit 2871eb3

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

python/ql/src/semmle/python/filters/Tests.qll

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,17 @@ abstract class TestScope extends Scope { }
55
// don't extend Class directly to avoid ambiguous method warnings
66
class UnitTestClass extends TestScope {
77
UnitTestClass() {
8-
exists(ClassObject c | this = c.getPyClass() |
9-
c.getASuperType() = theUnitTestPackage().attr(_)
8+
exists(ClassValue cls | this = cls.getScope() |
9+
cls.getABaseType+() = Module::named("unittest").attr(_)
1010
or
11-
c.getASuperType().getName().toLowerCase() = "testcase"
11+
cls.getABaseType+().getName().toLowerCase() = "testcase"
1212
)
1313
}
1414
}
1515

16-
PackageObject theUnitTestPackage() { result.getName() = "unittest" }
17-
1816
abstract class Test extends TestScope { }
1917

18+
/** Class of test function that uses the `unittest` framework */
2019
class UnitTestFunction extends Test {
2120
UnitTestFunction() {
2221
this.getScope+() instanceof UnitTestClass and
@@ -37,3 +36,11 @@ class NoseTestFunction extends Test {
3736
this.(Function).getName().matches("test%")
3837
}
3938
}
39+
40+
/** Class of functions that are clearly tests, but don't belong to a specific framework */
41+
class UnknownTestFunction extends Test {
42+
UnknownTestFunction() {
43+
this.(Function).getName().matches("test%") and
44+
this.getEnclosingModule().getFile().getShortName().matches("test_%.py")
45+
}
46+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
| test.py:4:1:4:23 | Class MyTest |
22
| test.py:6:5:6:21 | Function test_1 |
33
| test.py:9:5:9:21 | Function test_2 |
4+
| test_foo.py:3:1:3:15 | Function test_foo |
5+
| unittest_test.py:3:1:3:33 | Class FooTest |
6+
| unittest_test.py:4:5:4:25 | Function test_valid |

0 commit comments

Comments
 (0)