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>
53 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://"));
54 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
58 BEAST_EXPECT(!pUrl.
port);
68 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///"));
69 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
73 BEAST_EXPECT(!pUrl.
port);
74 BEAST_EXPECT(pUrl.
path ==
"/");
79 BEAST_EXPECT(
parseUrl(pUrl,
"lower://domain"));
80 BEAST_EXPECT(pUrl.
scheme ==
"lower");
83 BEAST_EXPECT(pUrl.
domain ==
"domain");
84 BEAST_EXPECT(!pUrl.
port);
90 BEAST_EXPECT(
parseUrl(pUrl,
"UPPER://domain:234/"));
91 BEAST_EXPECT(pUrl.
scheme ==
"upper");
94 BEAST_EXPECT(pUrl.
domain ==
"domain");
95 BEAST_EXPECT(*pUrl.
port == 234);
96 BEAST_EXPECT(pUrl.
path ==
"/");
101 BEAST_EXPECT(
parseUrl(pUrl,
"Mixed://domain/path"));
102 BEAST_EXPECT(pUrl.
scheme ==
"mixed");
105 BEAST_EXPECT(pUrl.
domain ==
"domain");
106 BEAST_EXPECT(!pUrl.
port);
107 BEAST_EXPECT(pUrl.
path ==
"/path");
112 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://[::1]:123/path"));
113 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
116 BEAST_EXPECT(pUrl.
domain ==
"::1");
117 BEAST_EXPECT(*pUrl.
port == 123);
118 BEAST_EXPECT(pUrl.
path ==
"/path");
123 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain:123/abc:321"));
124 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
125 BEAST_EXPECT(pUrl.
username ==
"user");
126 BEAST_EXPECT(pUrl.
password ==
"pass");
127 BEAST_EXPECT(pUrl.
domain ==
"domain");
128 BEAST_EXPECT(*pUrl.
port == 123);
129 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
134 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain:123/abc:321"));
135 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
136 BEAST_EXPECT(pUrl.
username ==
"user");
138 BEAST_EXPECT(pUrl.
domain ==
"domain");
139 BEAST_EXPECT(*pUrl.
port == 123);
140 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
145 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain:123/abc:321"));
146 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
148 BEAST_EXPECT(pUrl.
password ==
"pass");
149 BEAST_EXPECT(pUrl.
domain ==
"domain");
150 BEAST_EXPECT(*pUrl.
port == 123);
151 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
156 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain:123/abc:321"));
157 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
160 BEAST_EXPECT(pUrl.
domain ==
"domain");
161 BEAST_EXPECT(*pUrl.
port == 123);
162 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
167 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/abc:321"));
168 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
169 BEAST_EXPECT(pUrl.
username ==
"user");
170 BEAST_EXPECT(pUrl.
password ==
"pass");
171 BEAST_EXPECT(pUrl.
domain ==
"domain");
172 BEAST_EXPECT(!pUrl.
port);
173 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
178 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain/abc:321"));
179 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
180 BEAST_EXPECT(pUrl.
username ==
"user");
182 BEAST_EXPECT(pUrl.
domain ==
"domain");
183 BEAST_EXPECT(!pUrl.
port);
184 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
189 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain/abc:321"));
190 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
192 BEAST_EXPECT(pUrl.
password ==
"pass");
193 BEAST_EXPECT(pUrl.
domain ==
"domain");
194 BEAST_EXPECT(!pUrl.
port);
195 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
200 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/abc:321"));
201 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
204 BEAST_EXPECT(pUrl.
domain ==
"domain");
205 BEAST_EXPECT(!pUrl.
port);
206 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
211 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///path/to/file"));
212 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
216 BEAST_EXPECT(!pUrl.
port);
217 BEAST_EXPECT(pUrl.
path ==
"/path/to/file");
222 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/path/with/an@sign"));
223 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
224 BEAST_EXPECT(pUrl.
username ==
"user");
225 BEAST_EXPECT(pUrl.
password ==
"pass");
226 BEAST_EXPECT(pUrl.
domain ==
"domain");
227 BEAST_EXPECT(!pUrl.
port);
228 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
233 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/path/with/an@sign"));
234 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
237 BEAST_EXPECT(pUrl.
domain ==
"domain");
238 BEAST_EXPECT(!pUrl.
port);
239 BEAST_EXPECT(pUrl.
path ==
"/path/with/an@sign");
244 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:999/"));
245 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
248 BEAST_EXPECT(pUrl.
domain ==
":999");
249 BEAST_EXPECT(!pUrl.
port);
250 BEAST_EXPECT(pUrl.
path ==
"/");
255 BEAST_EXPECT(
parseUrl(pUrl,
"http://::1:1234/validators"));
256 BEAST_EXPECT(pUrl.
scheme ==
"http");
259 BEAST_EXPECT(pUrl.
domain ==
"::0.1.18.52");
260 BEAST_EXPECT(!pUrl.
port);
261 BEAST_EXPECT(pUrl.
path ==
"/validators");
268 BEAST_EXPECT(!
parseUrl(pUrl,
"nonsense"));
269 BEAST_EXPECT(!
parseUrl(pUrl,
"://"));
270 BEAST_EXPECT(!
parseUrl(pUrl,
":///"));
271 BEAST_EXPECT(!
parseUrl(pUrl,
"scheme://user:pass@domain:65536/abc:321"));
272 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:23498765/"));
273 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:0/"));
274 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:+7/"));
275 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:-7234/"));
276 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:@#$56!/"));
282 BEAST_EXPECT(!
parseUrl(pUrl, strUrl));
291 BEAST_EXPECT(result ==
"hello");
303BEAST_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