Skip to content

Commit bcc0340

Browse files
committed
Generate dummy Query for shared query test files
Shared query test files were not excluding elements outside the source archive because they did not implement the `..SharedQuery` mechanism. This commit adjusts the `Query` class to provide a dummy query for this purpose, and updates the generator to create an instance of that abstract class for each shared query.
1 parent 9de7232 commit bcc0340

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

cpp/common/src/codingstandards/cpp/exclusions/RuleMetadata.qll

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ private import codingstandards.cpp.guideline_recategorizations.GuidelineRecatego
55

66
newtype TQuery =
77
TQueryCPP(CPPRuleMetadata::TCPPQuery t) or
8-
TQueryC(CRuleMetadata::TCQuery t)
8+
TQueryC(CRuleMetadata::TCQuery t) or
9+
/* A dummy query for testing purposes */
10+
TQueryTestDummy()
911

1012
private predicate isMisraRuleCategory(string category) {
1113
category = ["disapplied", "advisory", "required", "mandatory"]
@@ -47,18 +49,27 @@ class EffectiveCategory extends TEffectiveCategory {
4749

4850
class Query extends TQuery {
4951
string getQueryId() {
50-
CPPRuleMetadata::isQueryMetadata(this, result, _, _) or
52+
CPPRuleMetadata::isQueryMetadata(this, result, _, _)
53+
or
5154
CRuleMetadata::isQueryMetadata(this, result, _, _)
55+
or
56+
this = TQueryTestDummy() and result = "cpp/test/dummy"
5257
}
5358

5459
string getRuleId() {
55-
CPPRuleMetadata::isQueryMetadata(this, _, result, _) or
60+
CPPRuleMetadata::isQueryMetadata(this, _, result, _)
61+
or
5662
CRuleMetadata::isQueryMetadata(this, _, result, _)
63+
or
64+
this = TQueryTestDummy() and result = "cpp-test-dummy"
5765
}
5866

5967
string getCategory() {
60-
CPPRuleMetadata::isQueryMetadata(this, _, _, result) or
68+
CPPRuleMetadata::isQueryMetadata(this, _, _, result)
69+
or
6170
CRuleMetadata::isQueryMetadata(this, _, _, result)
71+
or
72+
this = TQueryTestDummy() and result = "required"
6273
}
6374

6475
EffectiveCategory getEffectiveCategory() {
@@ -72,3 +83,8 @@ class Query extends TQuery {
7283

7384
string toString() { result = getQueryId() }
7485
}
86+
87+
/** A `Query` used for shared query test cases. */
88+
class TestQuery extends Query {
89+
TestQuery() { this = TQueryTestDummy() }
90+
}

scripts/generate_rules/generate_package_files.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ def write_shared_implementation(package_name, rule_id, query, language_name, ql_
181181
.replace("/", ".")
182182
+ "\n"
183183
)
184+
f.write("\n");
185+
f.write("class TestFileQuery extends " + str(query["shared_implementation_short_name"]) + "SharedQuery, TestQuery { }\n")
184186

185187
# Create an empty test file, if one doesn't already exist
186188
shared_impl_test_dir.joinpath(

0 commit comments

Comments
 (0)