summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRhys Weatherley <rhys.weatherley@nokia.com>2010-09-30 17:13:50 +1000
committerRhys Weatherley <rhys.weatherley@nokia.com>2010-10-01 08:11:31 +1000
commitd670c4b81db4311977b2a4fe583bb116dde339aa (patch)
treecedd2a7951924b95d24dafc54607906dab3c98e4
parentf6f63a6744eb5f7a65a9885befa85c9166cbde00 (diff)
Add data-driven testing support
-rw-r--r--QtTest/TestCaseBase.qml79
-rw-r--r--examples/BasicTests.qml12
2 files changed, 73 insertions, 18 deletions
diff --git a/QtTest/TestCaseBase.qml b/QtTest/TestCaseBase.qml
index b44dc06..14cadc9 100644
--- a/QtTest/TestCaseBase.qml
+++ b/QtTest/TestCaseBase.qml
@@ -55,10 +55,42 @@ Item {
expectFailMsg = msg
}
- function run() {
+ property variant testCaseResult
+
+ function runInternal(prop, dataDriven, arg, tag) {
var prefix;
if (name)
prefix = name + "::"
+ if (dataDriven && tag)
+ currentTestCase = prefix + prop + "() [" + tag + "]"
+ else
+ currentTestCase = prefix + prop + "()"
+ expectingFail = false
+ var success = true
+ try {
+ testCaseResult = testCase[prop](arg)
+ if (expectingFail) {
+ ++numFailed
+ success = false
+ print("XPASS : " + currentTestCase)
+ } else if (!dataDriven) {
+ print("PASS : " + currentTestCase)
+ }
+ } catch (e) {
+ testCaseResult = []
+ if (e.message == "QtTest::fail") {
+ ++numFailed
+ success = false
+ } else if (e.message == "QtTest::skip") {
+ ++numSkipped
+ } else if (e.message == "QtTest::expect_fail") {
+ ++numFailed
+ }
+ }
+ return success
+ }
+
+ function run() {
var success = true
numPassed = 0
numFailed = 0
@@ -66,26 +98,37 @@ Item {
for (var prop in testCase) {
if (prop.indexOf("test_") != 0)
continue
- currentTestCase = prefix + prop + "()"
- expectingFail = false
- try {
- testCase[prop]()
- if (expectingFail) {
- ++numFailed
- print("XPASS : " + currentTestCase)
+ var tail = prop.lastIndexOf("_data");
+ if (tail != -1 && tail == (prop.length - 5))
+ continue
+ var datafunc = prop + "_data"
+ if (datafunc in testCase) {
+ if (runInternal(datafunc, true)) {
+ var table = testCaseResult
+ var successThis = true
+ for (var index in table) {
+ var row = table[index]
+ if (!runInternal(prop, true, row, row.tag))
+ successThis = false
+ }
+ if (successThis) {
+ var prefix;
+ if (name)
+ prefix = name + "::"
+ currentTestCase = prefix + prop + "()"
+ print("PASS : " + currentTestCase)
+ ++numPassed
+ } else {
+ success = false
+ }
} else {
- ++numPassed
- print("PASS : " + currentTestCase)
- }
- } catch (e) {
- if (e.message == "QtTest::fail") {
- ++numFailed
success = false
- } else if (e.message == "QtTest::skip") {
- ++numSkipped
- } else if (e.message == "QtTest::expect_fail") {
- ++numFailed
}
+ } else {
+ if (runInternal(prop, false))
+ ++numPassed
+ else
+ success = false
}
}
currentTestCase = ""
diff --git a/examples/BasicTests.qml b/examples/BasicTests.qml
index 99fdd11..3caf9a1 100644
--- a/examples/BasicTests.qml
+++ b/examples/BasicTests.qml
@@ -20,4 +20,16 @@ TestCase {
expectFail("this is the fail we wanted")
verify(false)
}
+
+ function test_table_data() {
+ return [
+ {tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 },
+ {tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 },
+ {tag: "2 + 2 = 5", a: 2, b: 2, answer: 5 }, // fail
+ ]
+ }
+
+ function test_table(data) {
+ compare(data.a + data.b, data.answer)
+ }
}