summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRhys Weatherley <rhys.weatherley@nokia.com>2010-09-30 09:23:27 +1000
committerRhys Weatherley <rhys.weatherley@nokia.com>2010-09-30 09:23:27 +1000
commit33a6204f85c9ea41e123d0abed6cafcc78acc0ca (patch)
tree2d136209b15dab003bbb879dc49b967e02d2d08b
Initial commit - basic test framework.
-rw-r--r--QtTest/TestCase.qml14
-rw-r--r--QtTest/TestCaseBase.qml87
-rw-r--r--QtTest/qmldir2
-rw-r--r--examples/BasicTests.qml23
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)
+ }
+}