uri_ut.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include "uri.h"
  3. #include <library/cpp/testing/unittest/registar.h>
  4. namespace NUri {
  5. struct TTest {
  6. TStringBuf Val;
  7. TParseFlags Flags;
  8. TState::EParsed State;
  9. TStringBuf Scheme;
  10. TStringBuf User;
  11. TStringBuf Pass;
  12. TStringBuf Host;
  13. ui16 Port;
  14. TStringBuf Path;
  15. TStringBuf Query;
  16. TStringBuf Frag;
  17. };
  18. }
  19. #define URL_MSG(url1, url2, cmp) \
  20. (TString("[") + url1.PrintS() + ("] " cmp " [") + url2.PrintS() + "]")
  21. #define URL_EQ(url1, url2) \
  22. UNIT_ASSERT_EQUAL_C(url, url2, URL_MSG(url1, url2, "!="))
  23. #define URL_NEQ(url1, url2) \
  24. UNIT_ASSERT_UNEQUAL_C(url, url2, URL_MSG(url1, url2, "=="))
  25. #define CMP_FLD(url, test, fld) \
  26. UNIT_ASSERT_VALUES_EQUAL(url.GetField(TField::Field##fld), test.fld)
  27. #define CMP_URL(url, test) \
  28. do { \
  29. CMP_FLD(url, test, Scheme); \
  30. CMP_FLD(url, test, User); \
  31. CMP_FLD(url, test, Pass); \
  32. CMP_FLD(url, test, Host); \
  33. UNIT_ASSERT_VALUES_EQUAL(url.GetPort(), test.Port); \
  34. CMP_FLD(url, test, Path); \
  35. CMP_FLD(url, test, Query); \
  36. CMP_FLD(url, test, Frag); \
  37. } while (false)
  38. #define URL_TEST_ENC(url, test, enc) \
  39. do { \
  40. TState::EParsed st = url.ParseUri(test.Val, test.Flags, 0, enc); \
  41. UNIT_ASSERT_VALUES_EQUAL(st, test.State); \
  42. CMP_URL(url, test); \
  43. if (TState::ParsedOK != st) \
  44. break; \
  45. TUri _url; \
  46. TString urlstr, urlstr2; \
  47. urlstr = url.PrintS(); \
  48. TState::EParsed st2 = _url.ParseUri(urlstr, \
  49. (test.Flags & ~TFeature::FeatureNoRelPath) | TFeature::FeatureAllowRootless, 0, enc); \
  50. if (TState::ParsedEmpty != st2) \
  51. UNIT_ASSERT_VALUES_EQUAL(st2, test.State); \
  52. urlstr2 = _url.PrintS(); \
  53. UNIT_ASSERT_VALUES_EQUAL(urlstr, urlstr2); \
  54. CMP_URL(_url, test); \
  55. UNIT_ASSERT_VALUES_EQUAL(url.GetUrlFieldMask(), _url.GetUrlFieldMask()); \
  56. URL_EQ(url, _url); \
  57. const TStringBuf hostascii = url.GetField(TField::FieldHostAscii); \
  58. if (hostascii.Empty()) \
  59. break; \
  60. urlstr = url.PrintS(TField::FlagHostAscii); \
  61. st2 = _url.ParseUri(urlstr, \
  62. (test.Flags & ~TFeature::FeatureNoRelPath) | TFeature::FeatureAllowRootless, 0, enc); \
  63. UNIT_ASSERT_VALUES_EQUAL(st2, test.State); \
  64. urlstr2 = _url.PrintS(); \
  65. UNIT_ASSERT_VALUES_EQUAL(urlstr, urlstr2); \
  66. TTest test2 = test; \
  67. test2.Host = hostascii; \
  68. CMP_URL(_url, test2); \
  69. UNIT_ASSERT_VALUES_EQUAL(url.GetUrlFieldMask(), _url.GetUrlFieldMask()); \
  70. } while (false)
  71. #define URL_TEST(url, test) \
  72. URL_TEST_ENC(url, test, CODES_UTF8)