uritests.cpp raw
1 // Copyright (c) 2009-2018 The Limenka developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #include <qt/test/uritests.h>
6
7 #include <qt/guiutil.h>
8 #include <qt/walletmodel.h>
9
10 #include <QUrl>
11
12 void URITests::uriTests()
13 {
14 SendCoinsRecipient rv;
15 QUrl uri;
16 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));
17 QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
18
19 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));
20 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
21 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
22 QVERIFY(rv.label == QString());
23 QVERIFY(rv.amount == 0);
24
25 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address"));
26 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
27 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
28 QVERIFY(rv.label == QString("Wikipedia Example Address"));
29 QVERIFY(rv.amount == 0);
30
31 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));
32 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
33 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
34 QVERIFY(rv.label == QString());
35 QVERIFY(rv.amount == 100000);
36
37 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));
38 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
39 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
40 QVERIFY(rv.label == QString());
41 QVERIFY(rv.amount == 100100000);
42
43 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example"));
44 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
45 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
46 QVERIFY(rv.amount == 10000000000LL);
47 QVERIFY(rv.label == QString("Wikipedia Example"));
48
49 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=x100x4"));
50 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
51 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
52 QVERIFY(rv.amount == 16777216LL);
53
54 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100x2"));
55 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
56 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
57 QVERIFY(rv.amount == 10000LL);
58
59 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"));
60 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
61 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
62 QVERIFY(rv.label == QString());
63
64 QVERIFY(GUIUtil::parseLimenkaURI("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv));
65 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
66 QVERIFY(rv.label == QString());
67
68 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address"));
69 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
70
71 // Commas in amounts are not allowed.
72 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example"));
73 QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
74
75 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=x1,0000&label=Wikipedia Example"));
76 QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
77
78 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"));
79 QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
80
81 // There are two amount specifications. The last value wins.
82 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=200&label=Wikipedia Example"));
83 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
84 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
85 QVERIFY(rv.amount == 20000000000LL);
86 QVERIFY(rv.label == QString("Wikipedia Example"));
87
88 // The first amount value is correct. However, the second amount value is not valid. Hence, the URI is not valid.
89 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=1,000&label=Wikipedia Example"));
90 QVERIFY(!GUIUtil::parseLimenkaURI(uri, &rv));
91
92 // Test label containing a question mark ('?').
93 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=?"));
94 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
95 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
96 QVERIFY(rv.amount == 10000000000LL);
97 QVERIFY(rv.label == QString("?"));
98
99 // Escape sequences are not supported.
100 uri.setUrl(QString("limenka:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=%3F"));
101 QVERIFY(GUIUtil::parseLimenkaURI(uri, &rv));
102 QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
103 QVERIFY(rv.amount == 10000000000LL);
104 QVERIFY(rv.label == QString("%3F"));
105 }
106