diff options
author | Rhys Weatherley <rhys.weatherley@nokia.com> | 2010-09-30 17:13:50 +1000 |
---|---|---|
committer | Rhys Weatherley <rhys.weatherley@nokia.com> | 2010-10-01 08:11:31 +1000 |
commit | d670c4b81db4311977b2a4fe583bb116dde339aa (patch) | |
tree | cedd2a7951924b95d24dafc54607906dab3c98e4 | |
parent | f6f63a6744eb5f7a65a9885befa85c9166cbde00 (diff) |
Add data-driven testing support
-rw-r--r-- | QtTest/TestCaseBase.qml | 79 | ||||
-rw-r--r-- | examples/BasicTests.qml | 12 |
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) + } } |