Add Bitcoin-Qt test suite with some bitcoin: URL Tests to start.
authorMatt Corallo <matt@bluematt.me>
Fri, 10 Feb 2012 22:25:36 +0000 (17:25 -0500)
committerMatt Corallo <matt@bluematt.me>
Fri, 10 Feb 2012 22:47:00 +0000 (17:47 -0500)
bitcoin-qt.pro
src/qt/bitcoin.cpp
src/qt/test/test_main.cpp [new file with mode: 0644]
src/qt/test/urltests.cpp [new file with mode: 0644]
src/qt/test/urltests.h [new file with mode: 0644]

index ff09e38..0eeae86 100644 (file)
@@ -226,6 +226,16 @@ SOURCES += src/qt/qrcodedialog.cpp
 FORMS += src/qt/forms/qrcodedialog.ui
 }
 
+contains(BITCOIN_QT_TEST, 1) {
+SOURCES += src/qt/test/test_main.cpp \
+    src/qt/test/urltests.cpp
+HEADERS += src/qt/test/urltests.h
+DEPENDPATH += src/qt/test
+QT += testlib
+TARGET = bitcoin-qt_test
+DEFINES += BITCOIN_QT_TEST
+}
+
 CODECFORTR = UTF-8
 
 # for lrelease/lupdate
index b25216f..8c4b0e6 100644 (file)
@@ -131,6 +131,7 @@ std::string _(const char* psz)
     return QCoreApplication::translate("bitcoin-core", psz).toStdString();
 }
 
+#ifndef BITCOIN_QT_TEST
 int main(int argc, char *argv[])
 {
     // Do this early as we don't want to bother initializing if we are just calling IPC
@@ -257,3 +258,4 @@ int main(int argc, char *argv[])
     }
     return 0;
 }
+#endif // BITCOIN_QT_TEST
diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp
new file mode 100644 (file)
index 0000000..0a08eaf
--- /dev/null
@@ -0,0 +1,11 @@
+#include <QTest>\r
+#include <QObject>\r
+\r
+#include "urltests.h"\r
+\r
+// This is all you need to run all the tests\r
+int main(int argc, char *argv[])\r
+{\r
+    URLTests test1;\r
+    QTest::qExec(&test1);\r
+}\r
diff --git a/src/qt/test/urltests.cpp b/src/qt/test/urltests.cpp
new file mode 100644 (file)
index 0000000..5ecc846
--- /dev/null
@@ -0,0 +1,68 @@
+#include "urltests.h"
+#include "../guiutil.h"
+#include "../walletmodel.h"
+
+#include <QUrl>
+
+/*
+struct SendCoinsRecipient
+{
+    QString address;
+    QString label;
+    qint64 amount;
+};
+*/
+
+void URLTests::urlTests()
+{
+    SendCoinsRecipient rv;
+    QUrl url;
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));
+    QVERIFY(!GUIUtil::parseBitcoinURL(&url, &rv));
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.label == QString());
+    QVERIFY(rv.amount == 0);
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address"));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.label == QString("Wikipedia Example Address"));
+    QVERIFY(rv.amount == 0);
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.label == QString());
+    QVERIFY(rv.amount == 100000);
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.label == QString());
+    QVERIFY(rv.amount == 100100000);
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example"));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.amount == 10000000000);
+    QVERIFY(rv.label == QString("Wikipedia Example"));
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"));
+    QVERIFY(GUIUtil::parseBitcoinURL(&url, &rv));
+    QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
+    QVERIFY(rv.label == QString());
+    QVERIFY(rv.label == QString());
+
+    // We currently dont implement the message paramenter (ok, yea, we break spec...)
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address"));
+    QVERIFY(!GUIUtil::parseBitcoinURL(&url, &rv));
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example"));
+    QVERIFY(!GUIUtil::parseBitcoinURL(&url, &rv));
+
+    url.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"));
+    QVERIFY(!GUIUtil::parseBitcoinURL(&url, &rv));
+}
diff --git a/src/qt/test/urltests.h b/src/qt/test/urltests.h
new file mode 100644 (file)
index 0000000..393c511
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef URLTESTS_H
+#define URLTESTS_H
+
+#include <QTest>
+#include <QObject>
+
+class URLTests : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void urlTests();
+};
+
+#endif // URLTESTS_H