Skip to content

Commit d6edfd5

Browse files
committed
Determine when a model row didn't produce any tests; fix the model specifications revealed defective by this feature.
1 parent 6360e0b commit d6edfd5

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

java/ql/src/utils/GenerateFlowTestCase.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ def qualifiedOuterNameFromSsvRow(row):
9595
f.write("import java\nimport utils.GenerateFlowTestCase\n\nclass GenRow extends CsvRow {\n\n\tGenRow() {\n\t\tthis = [\n")
9696
f.write(",\n".join('\t\t\t"%s"' % spec.strip() for spec in specs))
9797
f.write("\n\t\t]\n\t}\n}\n")
98+
f.write("""
99+
query string getAFailedRow() {
100+
result = any(GenRow row | not exists(RowTestSnippet r | exists(r.getATestSnippetForRow(row))) | row)
101+
}
102+
""")
98103

99104
print("Generating tests")
100105
generatedBqrs = os.path.join(queryDir, "out.bqrs")
@@ -121,10 +126,15 @@ def getTuples(queryName, jsonResult, fname):
121126
generateOutput = json.load(f)
122127
testCaseRows = getTuples("getTestCase", generateOutput, generatedJson)
123128
supportModelRows = getTuples("getASupportMethodModel", generateOutput, generatedJson)
129+
failedRows = getTuples("getAFailedRow", generateOutput, generatedJson)
124130
if len(testCaseRows) != 1 or len(testCaseRows[0]) != 1:
125131
print("Expected exactly one getTestCase result with one column (got: %s)" % json.dumps(testCaseRows), file = sys.stderr)
126132
if any(len(row) != 1 for row in supportModelRows):
127133
print("Expected exactly one column in getASupportMethodModel relation (got: %s)" % json.dumps(supportModelRows), file = sys.stderr)
134+
if any(len(row) != 1 for row in failedRows):
135+
print("Expected exactly one column in getAFailedRow relation (got: %s)" % json.dumps(failedRows), file = sys.stderr)
136+
if len(failedRows) != 0:
137+
print("The following rows failed to generate any test case. Check package, class and method name spelling, and argument and result specifications:\n%s" % "\n".join(r[0] for r in failedRows), file = sys.stderr)
128138

129139
with open(resultJava, "w") as f:
130140
f.write(generateOutput["getTestCase"]["tuples"][0][0])

0 commit comments

Comments
 (0)