aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/testlib
diff options
context:
space:
mode:
authorKirill Burtsev <kirill.burtsev@qt.io>2018-10-08 11:10:50 +0200
committerKirill Burtsev <kirill.burtsev@qt.io>2018-11-15 10:45:14 +0000
commit16e3859af180b28157f39ad5d1f77ff3571753a2 (patch)
tree82b30898bf5e84d922d9415280b91b14d4bcc08d /src/imports/testlib
parente12dc7910aaeb6e71275115c30a0eb227ac3b403 (diff)
Qt Quick Test: support tags filter on tests run
Implemented logic for filtering tests with 'case::function:tag' run syntax. Fixes: QTBUG-71645 Change-Id: I9243636b098b4e9ccb4c74d08679bbbb9f3e8a65 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/imports/testlib')
-rw-r--r--src/imports/testlib/TestCase.qml72
-rw-r--r--src/imports/testlib/plugins.qmltypes1
2 files changed, 54 insertions, 19 deletions
diff --git a/src/imports/testlib/TestCase.qml b/src/imports/testlib/TestCase.qml
index fd91add04e..266e3111bb 100644
--- a/src/imports/testlib/TestCase.qml
+++ b/src/imports/testlib/TestCase.qml
@@ -1787,17 +1787,28 @@ Item {
running = true
// Check the run list to see if this class is mentioned.
- var functionsToRun = qtest_results.functionsToRun
- if (functionsToRun.length > 0) {
+ let checkNames = false
+ let testsToRun = {} // explicitly provided function names to run and their tags for data-driven tests
+
+ if (qtest_results.functionsToRun.length > 0) {
+ checkNames = true
var found = false
- var list = []
+
if (name.length > 0) {
- var prefix = name + "::"
- for (var index in functionsToRun) {
- if (functionsToRun[index].indexOf(prefix) == 0) {
- list.push(functionsToRun[index])
- found = true
- }
+ for (var index in qtest_results.functionsToRun) {
+ let caseFuncName = qtest_results.functionsToRun[index]
+ if (caseFuncName.indexOf(name + "::") != 0)
+ continue
+
+ found = true
+ let funcName = caseFuncName.substring(name.length + 2)
+
+ if (!(funcName in testsToRun))
+ testsToRun[funcName] = []
+
+ let tagName = qtest_results.tagsToRun[index]
+ if (tagName.length > 0) // empty tags mean run all rows
+ testsToRun[funcName].push(tagName)
}
}
if (!found) {
@@ -1809,7 +1820,6 @@ Item {
qtest_results.testCaseName = ""
return
}
- functionsToRun = list
}
// Run the initTestCase function.
@@ -1834,17 +1844,15 @@ Item {
}
testList.sort()
}
- var checkNames = (functionsToRun.length > 0)
+
for (var index in testList) {
var prop = testList[index]
+
+ if (checkNames && !(prop in testsToRun))
+ continue
+
var datafunc = prop + "_data"
var isBenchmark = (prop.indexOf("benchmark_") == 0)
- if (checkNames) {
- var index = functionsToRun.indexOf(name + "::" + prop)
- if (index < 0)
- continue
- functionsToRun.splice(index, 1)
- }
qtest_results.functionName = prop
if (!(datafunc in testCase))
@@ -1854,12 +1862,22 @@ Item {
if (qtest_runInternal(datafunc)) {
var table = qtest_testCaseResult
var haveData = false
+
+ let checkTags = (checkNames && testsToRun[prop].length > 0)
+
qtest_results.initTestTable()
for (var index in table) {
haveData = true
var row = table[index]
if (!row.tag)
row.tag = "row " + index // Must have something
+ if (checkTags) {
+ let tags = testsToRun[prop]
+ let tagIdx = tags.indexOf(row.tag)
+ if (tagIdx < 0)
+ continue
+ tags.splice(tagIdx, 1)
+ }
qtest_results.dataTag = row.tag
if (isBenchmark)
qtest_runBenchmarkFunction(prop, row)
@@ -1884,6 +1902,9 @@ Item {
}
qtest_results.finishTestFunction()
qtest_results.skipped = false
+
+ if (checkNames && testsToRun[prop].length <= 0)
+ delete testsToRun[prop]
}
// Run the cleanupTestCase function.
@@ -1892,8 +1913,21 @@ Item {
qtest_runInternal("cleanupTestCase")
// Complain about missing functions that we were supposed to run.
- if (functionsToRun.length > 0)
- qtest_results.fail("Could not find functions: " + functionsToRun, "", 0)
+ if (checkNames) {
+ let missingTests = []
+ for (var func in testsToRun) {
+ let caseFuncName = name + '::' + func
+ let tags = testsToRun[func]
+ if (tags.length <= 0)
+ missingTests.push(caseFuncName)
+ else
+ for (var i in tags)
+ missingTests.push(caseFuncName + ':' + tags[i])
+ }
+ missingTests.sort()
+ if (missingTests.length > 0)
+ qtest_results.fail("Could not find test functions: " + missingTests, "", 0)
+ }
// Clean up and exit.
running = false
diff --git a/src/imports/testlib/plugins.qmltypes b/src/imports/testlib/plugins.qmltypes
index 56b4ecf662..e51371d176 100644
--- a/src/imports/testlib/plugins.qmltypes
+++ b/src/imports/testlib/plugins.qmltypes
@@ -195,6 +195,7 @@ Module {
Property { name: "failCount"; type: "int"; isReadonly: true }
Property { name: "skipCount"; type: "int"; isReadonly: true }
Property { name: "functionsToRun"; type: "QStringList"; isReadonly: true }
+ Property { name: "tagsToRun"; type: "QStringList"; isReadonly: true }
Signal { name: "programNameChanged" }
Method { name: "reset" }
Method { name: "startLogging" }