MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / testQueryParams

Method testQueryParams

Tests/Libraries/Http/HttpURLParserTest.cpp:291–362  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

289void SC::HttpURLParserTest::testQueryParams()
290{
291 HttpURLParser urlParser;
292 StringSpan value;
293
294 // Multiple query parameters
295 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?key1=value1&key2=value2&key3=value3"));
296 SC_TEST_EXPECT(urlParser.search == "?key1=value1&key2=value2&key3=value3");
297 SC_TEST_EXPECT(urlParser.getQueryValue("key2", value));
298 SC_TEST_EXPECT(value == "value2");
299 SC_TEST_EXPECT(HttpURLParser::getQueryValue("key1=value1&key2=value2", "key1", value));
300 SC_TEST_EXPECT(value == "value1");
301
302 // Query parameter with empty value
303 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?empty=&key=value"));
304 SC_TEST_EXPECT(urlParser.search == "?empty=&key=value");
305 SC_TEST_EXPECT(urlParser.getQueryValue("empty", value));
306 SC_TEST_EXPECT(value.isEmpty());
307
308 // Query parameter with no value
309 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?flag&key=value"));
310 SC_TEST_EXPECT(urlParser.search == "?flag&key=value");
311 SC_TEST_EXPECT(urlParser.getQueryValue("flag", value));
312 SC_TEST_EXPECT(value.isEmpty());
313
314 // Only query parameters, no path
315 SC_TEST_EXPECT(urlParser.parse("http://example.com?query=value"));
316 SC_TEST_EXPECT(urlParser.pathname == "/");
317 SC_TEST_EXPECT(urlParser.search == "?query=value");
318
319 // Query parameters with special characters
320 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?q=hello%20world&special=%2B%2D"));
321 SC_TEST_EXPECT(urlParser.search == "?q=hello%20world&special=%2B%2D");
322 SC_TEST_EXPECT(urlParser.getQueryValue("q", value));
323 SC_TEST_EXPECT(value == "hello%20world");
324 SC_TEST_EXPECT(urlParser.getQueryValue("special", value));
325 SC_TEST_EXPECT(value == "%2B%2D");
326
327 // First repeated key wins
328 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?name=first&name=second"));
329 SC_TEST_EXPECT(urlParser.getQueryValue("name", value));
330 SC_TEST_EXPECT(value == "first");
331
332 // Missing and empty search
333 SC_TEST_EXPECT(not urlParser.getQueryValue("missing", value));
334 SC_TEST_EXPECT(value.isEmpty());
335 SC_TEST_EXPECT(not HttpURLParser::getQueryValue("", "missing", value));
336 SC_TEST_EXPECT(not HttpURLParser::getQueryValue("?", "missing", value));
337
338 // UTF8 values stay raw and zero-copy.
339 SC_TEST_EXPECT(urlParser.parse("http://example.com/path?q=tëst&vâlue=ok"_u8));
340 SC_TEST_EXPECT(urlParser.getQueryValue("q", value));
341 SC_TEST_EXPECT(value == "tëst"_u8);
342 SC_TEST_EXPECT(urlParser.getQueryValue("vâlue"_u8, value));
343 SC_TEST_EXPECT(value == "ok");
344
345 HttpURLQueryIterator iterator("?flag&empty=&key=value");
346 HttpURLQueryItem item;
347 SC_TEST_EXPECT(iterator.next(item));
348 SC_TEST_EXPECT(item.name == "flag");

Callers

nothing calls this directly

Calls 4

getQueryValueMethod · 0.80
parseMethod · 0.45
isEmptyMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected