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");
124 parseUrl(pUrl,
"scheme://user:pass@domain:123/abc:321"));
125 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
126 BEAST_EXPECT(pUrl.
username ==
"user");
127 BEAST_EXPECT(pUrl.
password ==
"pass");
128 BEAST_EXPECT(pUrl.
domain ==
"domain");
129 BEAST_EXPECT(*pUrl.
port == 123);
130 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
135 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain:123/abc:321"));
136 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
137 BEAST_EXPECT(pUrl.
username ==
"user");
139 BEAST_EXPECT(pUrl.
domain ==
"domain");
140 BEAST_EXPECT(*pUrl.
port == 123);
141 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
146 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain:123/abc:321"));
147 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
149 BEAST_EXPECT(pUrl.
password ==
"pass");
150 BEAST_EXPECT(pUrl.
domain ==
"domain");
151 BEAST_EXPECT(*pUrl.
port == 123);
152 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
157 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain:123/abc:321"));
158 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
161 BEAST_EXPECT(pUrl.
domain ==
"domain");
162 BEAST_EXPECT(*pUrl.
port == 123);
163 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
168 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user:pass@domain/abc:321"));
169 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
170 BEAST_EXPECT(pUrl.
username ==
"user");
171 BEAST_EXPECT(pUrl.
password ==
"pass");
172 BEAST_EXPECT(pUrl.
domain ==
"domain");
173 BEAST_EXPECT(!pUrl.
port);
174 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
179 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://user@domain/abc:321"));
180 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
181 BEAST_EXPECT(pUrl.
username ==
"user");
183 BEAST_EXPECT(pUrl.
domain ==
"domain");
184 BEAST_EXPECT(!pUrl.
port);
185 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
190 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://:pass@domain/abc:321"));
191 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
193 BEAST_EXPECT(pUrl.
password ==
"pass");
194 BEAST_EXPECT(pUrl.
domain ==
"domain");
195 BEAST_EXPECT(!pUrl.
port);
196 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
201 BEAST_EXPECT(
parseUrl(pUrl,
"scheme://domain/abc:321"));
202 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
205 BEAST_EXPECT(pUrl.
domain ==
"domain");
206 BEAST_EXPECT(!pUrl.
port);
207 BEAST_EXPECT(pUrl.
path ==
"/abc:321");
212 BEAST_EXPECT(
parseUrl(pUrl,
"scheme:///path/to/file"));
213 BEAST_EXPECT(pUrl.
scheme ==
"scheme");
217 BEAST_EXPECT(!pUrl.
port);
218 BEAST_EXPECT(pUrl.
path ==
"/path/to/file");
224 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,
":///"));
274 !
parseUrl(pUrl,
"scheme://user:pass@domain:65536/abc:321"));
275 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:23498765/"));
276 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:0/"));
277 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:+7/"));
278 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:-7234/"));
279 BEAST_EXPECT(!
parseUrl(pUrl,
"UPPER://domain:@#$56!/"));
285 BEAST_EXPECT(!
parseUrl(pUrl, strUrl));
294 BEAST_EXPECT(result ==
"hello");
306BEAST_DEFINE_TESTSUITE(StringUtilities, basics,
ripple);
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::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::string to_string(base_uint< Bits, Tag > const &a)
std::optional< std::uint16_t > port