| 362 | } |
| 363 | |
| 364 | void SC::HttpURLParserTest::testFormUrlEncoded() |
| 365 | { |
| 366 | HttpFormUrlEncodedIterator iterator("name=Sane+Cpp&empty=&flag&encoded=%7Bok%7D&bad=%ZZ"); |
| 367 | HttpURLQueryItem item; |
| 368 | char storage[64]; |
| 369 | StringSpan decoded; |
| 370 | |
| 371 | SC_TEST_EXPECT(iterator.next(item)); |
| 372 | SC_TEST_EXPECT(item.name == "name"); |
| 373 | SC_TEST_EXPECT(item.value == "Sane+Cpp"); |
| 374 | SC_TEST_EXPECT(item.hasValue); |
| 375 | SC_TEST_EXPECT(HttpFormUrlDecode(item.value, storage, decoded)); |
| 376 | SC_TEST_EXPECT(decoded == "Sane Cpp"); |
| 377 | |
| 378 | SC_TEST_EXPECT(iterator.next(item)); |
| 379 | SC_TEST_EXPECT(item.name == "empty"); |
| 380 | SC_TEST_EXPECT(item.value.isEmpty()); |
| 381 | SC_TEST_EXPECT(item.hasValue); |
| 382 | |
| 383 | SC_TEST_EXPECT(iterator.next(item)); |
| 384 | SC_TEST_EXPECT(item.name == "flag"); |
| 385 | SC_TEST_EXPECT(item.value.isEmpty()); |
| 386 | SC_TEST_EXPECT(not item.hasValue); |
| 387 | |
| 388 | SC_TEST_EXPECT(iterator.next(item)); |
| 389 | SC_TEST_EXPECT(item.name == "encoded"); |
| 390 | SC_TEST_EXPECT(HttpPercentDecode(item.value, storage, decoded)); |
| 391 | SC_TEST_EXPECT(decoded == "{ok}"); |
| 392 | |
| 393 | SC_TEST_EXPECT(iterator.next(item)); |
| 394 | SC_TEST_EXPECT(item.name == "bad"); |
| 395 | SC_TEST_EXPECT(resultMessageEquals(HttpPercentDecode(item.value, storage, decoded), "Malformed percent escape")); |
| 396 | SC_TEST_EXPECT(resultMessageEquals(HttpFormUrlDecode("%2", storage, decoded), "Malformed percent escape")); |
| 397 | SC_TEST_EXPECT( |
| 398 | resultMessageEquals(HttpFormUrlDecode("abc", {storage, 2}, decoded), "Decoded output buffer is too small")); |
| 399 | |
| 400 | SC_TEST_EXPECT(not iterator.next(item)); |
| 401 | |
| 402 | StringSpan value; |
| 403 | SC_TEST_EXPECT(HttpFormUrlEncodedIterator::getValue("name=first&name=second", "name", value)); |
| 404 | SC_TEST_EXPECT(value == "first"); |
| 405 | SC_TEST_EXPECT(HttpFormUrlEncodedIterator::getValue("empty=&flag&encoded=%7Bok%7D", "empty", value)); |
| 406 | SC_TEST_EXPECT(value.isEmpty()); |
| 407 | SC_TEST_EXPECT(HttpFormUrlEncodedIterator::getValue("empty=&flag&encoded=%7Bok%7D", "flag", value)); |
| 408 | SC_TEST_EXPECT(value.isEmpty()); |
| 409 | SC_TEST_EXPECT(HttpFormUrlEncodedIterator::getValue("empty=&flag&encoded=%7Bok%7D", "encoded", value)); |
| 410 | SC_TEST_EXPECT(value == "%7Bok%7D"); |
| 411 | SC_TEST_EXPECT(HttpFormUrlEncodedIterator::getValue("vâlue=tëst"_u8, "vâlue"_u8, value)); |
| 412 | SC_TEST_EXPECT(value == "tëst"_u8); |
| 413 | SC_TEST_EXPECT(not HttpFormUrlEncodedIterator::getValue("", "missing", value)); |
| 414 | SC_TEST_EXPECT(value.isEmpty()); |
| 415 | } |
| 416 | |
| 417 | void SC::HttpURLParserTest::testRequestTargetView() |
| 418 | { |
nothing calls this directly
no test coverage detected