1#include <xrpl/basics/Slice.h>
2#include <xrpl/basics/StringUtilities.h>
3#include <xrpl/basics/ToString.h>
4#include <xrpl/beast/unit_test.h>
55 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://"));
56 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
60 BEAST_EXPECT(!pUrl.
port);
70 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///"));
71 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
75 BEAST_EXPECT(!pUrl.
port);
76 BEAST_EXPECT(pUrl.
path ==
"/");
81 BEAST_EXPECT(
parseUrl(pUrl,
"lower://domain"));
82 BEAST_EXPECT(pUrl.
scheme ==
"lower");
85 BEAST_EXPECT(pUrl.
domain ==
"domain");
86 BEAST_EXPECT(!pUrl.
port);
92 BEAST_EXPECT(
parseUrl(pUrl,
"UPPER://domain:234/"));
93 BEAST_EXPECT(pUrl.
scheme ==
"upper");
96 BEAST_EXPECT(pUrl.
domain ==
"domain");
97 BEAST_EXPECT(*pUrl.
port == 234);
98 BEAST_EXPECT(pUrl.
path ==
"/");
103 BEAST_EXPECT(
parseUrl(pUrl,
"Mixed://domain/path"));
104 BEAST_EXPECT(pUrl.
scheme ==
"mixed");
107 BEAST_EXPECT(pUrl.
domain ==
"domain");
108 BEAST_EXPECT(!pUrl.
port);
109 BEAST_EXPECT(pUrl.
path ==
"/path");
114 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://[::1]:123/path"));
115 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
118 BEAST_EXPECT(pUrl.
domain ==
"::1");
119 BEAST_EXPECT(*pUrl.
port == 123);
120 BEAST_EXPECT(pUrl.
path ==
"/path");
125 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain:123/abc:321"));
126 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
127 BEAST_EXPECT(pUrl.
username ==
"user");
128 BEAST_EXPECT(pUrl.
password ==
"pass");
129 BEAST_EXPECT(pUrl.
domain ==
"domain");
130 BEAST_EXPECT(*pUrl.
port == 123);
131 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
136 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain:123/abc:321"));
137 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
138 BEAST_EXPECT(pUrl.
username ==
"user");
140 BEAST_EXPECT(pUrl.
domain ==
"domain");
141 BEAST_EXPECT(*pUrl.
port == 123);
142 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
147 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain:123/abc:321"));
148 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
150 BEAST_EXPECT(pUrl.
password ==
"pass");
151 BEAST_EXPECT(pUrl.
domain ==
"domain");
152 BEAST_EXPECT(*pUrl.
port == 123);
153 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
158 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain:123/abc:321"));
159 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
162 BEAST_EXPECT(pUrl.
domain ==
"domain");
163 BEAST_EXPECT(*pUrl.
port == 123);
164 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
169 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/abc:321"));
170 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
171 BEAST_EXPECT(pUrl.
username ==
"user");
172 BEAST_EXPECT(pUrl.
password ==
"pass");
173 BEAST_EXPECT(pUrl.
domain ==
"domain");
174 BEAST_EXPECT(!pUrl.
port);
175 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
180 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain/abc:321"));
181 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
182 BEAST_EXPECT(pUrl.
username ==
"user");
184 BEAST_EXPECT(pUrl.
domain ==
"domain");
185 BEAST_EXPECT(!pUrl.
port);
186 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
191 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain/abc:321"));
192 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
194 BEAST_EXPECT(pUrl.
password ==
"pass");
195 BEAST_EXPECT(pUrl.
domain ==
"domain");
196 BEAST_EXPECT(!pUrl.
port);
197 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
202 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/abc:321"));
203 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
206 BEAST_EXPECT(pUrl.
domain ==
"domain");
207 BEAST_EXPECT(!pUrl.
port);
208 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
213 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///path/to/file"));
214 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
218 BEAST_EXPECT(!pUrl.
port);
219 BEAST_EXPECT(pUrl.
path ==
"/path/to/file");
224 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/path/with/an@sign"));
225 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
226 BEAST_EXPECT(pUrl.
username ==
"user");
227 BEAST_EXPECT(pUrl.
password ==
"pass");
228 BEAST_EXPECT(pUrl.
domain ==
"domain");
229 BEAST_EXPECT(!pUrl.
port);
230 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
235 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/path/with/an@sign"));
236 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
239 BEAST_EXPECT(pUrl.
domain ==
"domain");
240 BEAST_EXPECT(!pUrl.
port);
241 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
246 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:999/"));
247 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
250 BEAST_EXPECT(pUrl.
domain ==
":999");
251 BEAST_EXPECT(!pUrl.
port);
252 BEAST_EXPECT(pUrl.
path ==
"/");
257 BEAST_EXPECT(
parseUrl(pUrl,
"http://::1:1234/validators"));
258 BEAST_EXPECT(pUrl.
scheme ==
"http");
261 BEAST_EXPECT(pUrl.
domain ==
"::0.1.18.52");
262 BEAST_EXPECT(!pUrl.
port);
263 BEAST_EXPECT(pUrl.
path ==
"/validators");
270 BEAST_EXPECT(!
parseUrl(pUrl,
"nonsense"));
271 BEAST_EXPECT(!
parseUrl(pUrl,
"://"));
272 BEAST_EXPECT(!
parseUrl(pUrl,
":///"));
273 BEAST_EXPECT(!
parseUrl(pUrl,
"scheme://user:pass@domain:65536/abc:321"));
274 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:23498765/"));
275 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:0/"));
276 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:+7/"));
277 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:-7234/"));
278 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:@#$56!/"));
284 BEAST_EXPECT(!
parseUrl(pUrl, strUrl));
293 BEAST_EXPECT(result ==
"hello");
305BEAST_DEFINE_TESTSUITE(StringUtilities, basics,
xrpl);
testcase_t testcase
Memberspace for declaring test cases.
void testUnHexSuccess(std::string const &strIn, std::string const &strExpected)
void testUnHexFailure(std::string const &strIn)
void run() override
Runs the suite.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::string to_string(base_uint< Bits, Tag > const &a)
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
bool parseUrl(parsedURL &pUrl, std::string const &strUrl)
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
std::optional< std::uint16_t > port