Bitcoin Core
31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
src
qt
test
uritests.cpp
Go to the documentation of this file.
1
// Copyright (c) 2009-present The Bitcoin Core 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
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="
));
17
QVERIFY
(!
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
18
19
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="
));
20
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
21
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
22
QVERIFY
(
rv
.label ==
QString
());
23
QVERIFY
(
rv
.amount == 0);
24
25
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address"
));
26
QVERIFY
(
GUIUtil::parseBitcoinURI
(
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
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"
));
32
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
33
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
34
QVERIFY
(
rv
.label ==
QString
());
35
QVERIFY
(
rv
.amount == 100000);
36
37
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"
));
38
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
39
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
40
QVERIFY
(
rv
.label ==
QString
());
41
QVERIFY
(
rv
.amount == 100100000);
42
43
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example"
));
44
QVERIFY
(
GUIUtil::parseBitcoinURI
(
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
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"
));
50
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
51
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
52
QVERIFY
(
rv
.label ==
QString
());
53
54
QVERIFY
(
GUIUtil::parseBitcoinURI
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"
, &
rv
));
55
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
56
QVERIFY
(
rv
.label ==
QString
());
57
58
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address"
));
59
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
60
61
// Commas in amounts are not allowed.
62
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example"
));
63
QVERIFY
(!
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
64
65
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"
));
66
QVERIFY
(!
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
67
68
// There are two amount specifications. The last value wins.
69
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=200&label=Wikipedia Example"
));
70
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
71
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
72
QVERIFY
(
rv
.amount == 20000000000LL);
73
QVERIFY
(
rv
.label ==
QString
(
"Wikipedia Example"
));
74
75
// The first amount value is correct. However, the second amount value is not valid. Hence, the URI is not valid.
76
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=1,000&label=Wikipedia Example"
));
77
QVERIFY
(!
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
78
79
// Test label containing a question mark ('?').
80
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=?"
));
81
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
82
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
83
QVERIFY
(
rv
.amount == 10000000000LL);
84
QVERIFY
(
rv
.label ==
QString
(
"?"
));
85
86
// Escape sequences are not supported.
87
uri
.setUrl(
QString
(
"bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=%3F"
));
88
QVERIFY
(
GUIUtil::parseBitcoinURI
(
uri
, &
rv
));
89
QVERIFY
(
rv
.address ==
QString
(
"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"
));
90
QVERIFY
(
rv
.amount == 10000000000LL);
91
QVERIFY
(
rv
.label ==
QString
(
"%3F"
));
92
}
SendCoinsRecipient
Definition
sendcoinsrecipient.h:16
URITests::uriTests
void uriTests()
Definition
uritests.cpp:12
guiutil.h
GUIUtil::parseBitcoinURI
bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
Definition
guiutil.cpp:149
uritests.h
Ticks
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition
time.h:73
walletmodel.h
Generated on Thu Apr 16 2026 09:42:38 for Bitcoin Core by
1.10.0