diff options
author | Rhys Weatherley <rhys.weatherley@nokia.com> | 2010-09-30 09:23:27 +1000 |
---|---|---|
committer | Rhys Weatherley <rhys.weatherley@nokia.com> | 2010-09-30 09:23:27 +1000 |
commit | 33a6204f85c9ea41e123d0abed6cafcc78acc0ca (patch) | |
tree | 2d136209b15dab003bbb879dc49b967e02d2d08b |
Initial commit - basic test framework.
-rw-r--r-- | QtTest/TestCase.qml | 14 | ||||
-rw-r--r-- | QtTest/TestCaseBase.qml | 87 | ||||
-rw-r--r-- | QtTest/qmldir | 2 | ||||
-rw-r--r-- | examples/BasicTests.qml | 23 |
4 files changed, 126 insertions, 0 deletions
diff --git a/QtTest/TestCase.qml b/QtTest/TestCase.qml new file mode 100644 index 0000000..6b81ca4 --- /dev/null +++ b/QtTest/TestCase.qml @@ -0,0 +1,14 @@ +import Qt 4.7 +import QtTest 1.0 + +TestCaseBase { + Component.onCompleted: { + print("********* Start testing of " + name + " *********") + var success = run() + print("Totals: " + numPassed + " passed, " + + numFailed + " failed, " + + numSkipped + " skipped"); + print("********* Finished testing of " + name + " *********") + Qt.quit() // XXX - how do we set the exit value? + } +} diff --git a/QtTest/TestCaseBase.qml b/QtTest/TestCaseBase.qml new file mode 100644 index 0000000..122c6ae --- /dev/null +++ b/QtTest/TestCaseBase.qml @@ -0,0 +1,87 @@ +import Qt 4.7 + +Item { + id: testCase + visible: false + property string name + property variant tests: [] + + property string currentTestCase + property int numPassed + property int numFailed + property int numSkipped + property bool expectingFail + property string expectFailMsg + + function fail(msg) { + if (expectingFail) { + if (expectFailMsg) + print("EXPECT : " + currentTestCase + " " + expectFailMsg + " " + msg) + else + print("EXPECT : " + currentTestCase + " " + msg) + throw new Error("QtTest::expect_fail") + } else { + print("FAIL : " + currentTestCase + " " + msg) + throw new Error("QtTest::fail") + } + } + + function fail2(msg, msg2) { + if (msg) + fail(msg + ": " + msg2) + else + fail(msg2) + } + + function verify(cond, msg) { + if (!cond) + fail(msg) + } + + function compare(actual, expected, msg) { + if (actual != expected) + fail2(msg, "actual: " + actual + ", expected: " + expected) + } + + function skip(msg) { + print("SKIP : " + currentTestCase + " " + msg) + throw new Error("QtTest::skip") + } + + function expectFail(msg) { + expectingFail = true + expectFailMsg = msg + } + + function run() { + var prefix; + if (name) + prefix = name + "::" + var success = true + numPassed = 0 + numFailed = 0 + numSkipped = 0 + for (var prop in testCase) { + if (prop.indexOf("test_") != 0) + continue + currentTestCase = prefix + prop + "()" + expectingFail = false + try { + testCase[prop]() + ++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 + } + } + } + currentTestCase = "" + return success; + } +} diff --git a/QtTest/qmldir b/QtTest/qmldir new file mode 100644 index 0000000..3d3e077 --- /dev/null +++ b/QtTest/qmldir @@ -0,0 +1,2 @@ +TestCase 1.0 TestCase.qml +TestCaseBase 1.0 TestCaseBase.qml diff --git a/examples/BasicTests.qml b/examples/BasicTests.qml new file mode 100644 index 0000000..99fdd11 --- /dev/null +++ b/examples/BasicTests.qml @@ -0,0 +1,23 @@ +import Qt 4.7 +import QtTest 1.0 + +TestCase { + name: "BasicTests" + + function test_pass() { + compare(2 + 2, 4, "2 + 2") + } + + function test_fail() { + compare(2 + 2, 5, "2 + 2") + } + + function test_skip() { + skip("skipping") + } + + function test_expecting() { + expectFail("this is the fail we wanted") + verify(false) + } +} |