relaxed_escaper_ut.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "relaxed_escaper.h"
  2. #include <library/cpp/testing/unittest/registar.h>
  3. #define RESC_FIXED_STR(s) TStringBuf(s, sizeof(s) - 1)
  4. static const TStringBuf CommonTestData[] = {
  5. // Should be valid UTF-8.
  6. RESC_FIXED_STR("http://ya.ru/"), RESC_FIXED_STR("http://ya.ru/"),
  7. RESC_FIXED_STR("http://ya.ru/\\x17\\n"), RESC_FIXED_STR("http://ya.ru/\x17\n"),
  8. RESC_FIXED_STR("http://ya.ru/\\0"), RESC_FIXED_STR("http://ya.ru/\0"),
  9. RESC_FIXED_STR("http://ya.ru/\\0\\0"), RESC_FIXED_STR("http://ya.ru/\0\0"),
  10. RESC_FIXED_STR("http://ya.ru/\\0\\0000"), RESC_FIXED_STR("http://ya.ru/\0\0"
  11. "0"),
  12. RESC_FIXED_STR("http://ya.ru/\\0\\0001"), RESC_FIXED_STR("http://ya.ru/\0\x00"
  13. "1"),
  14. RESC_FIXED_STR("\\2\\4\\00678"), RESC_FIXED_STR("\2\4\6"
  15. "78"),
  16. RESC_FIXED_STR("\\2\\4\\689"), RESC_FIXED_STR("\2\4\689"),
  17. RESC_FIXED_STR("\\\"Hello\\\", Alice said."), RESC_FIXED_STR("\"Hello\", Alice said."),
  18. RESC_FIXED_STR("Slash\\\\dash!"), RESC_FIXED_STR("Slash\\dash!"),
  19. RESC_FIXED_STR("There\\nare\\r\\nnewlines."), RESC_FIXED_STR("There\nare\r\nnewlines."),
  20. RESC_FIXED_STR("There\\tare\\ttabs."), RESC_FIXED_STR("There\tare\ttabs.")};
  21. #undef RESC_FIXED_STR
  22. Y_UNIT_TEST_SUITE(TRelaxedEscaperTest) {
  23. Y_UNIT_TEST(TestEscaper) {
  24. using namespace NEscJ;
  25. for (size_t i = 0; i < Y_ARRAY_SIZE(CommonTestData); i += 2) {
  26. TString expected(CommonTestData[i].data(), CommonTestData[i].size());
  27. TString source(CommonTestData[i + 1].data(), CommonTestData[i + 1].size());
  28. TString actual(EscapeJ<false>(source));
  29. TString actual2(UnescapeC(expected));
  30. UNIT_ASSERT_VALUES_EQUAL(expected, actual);
  31. UNIT_ASSERT_VALUES_EQUAL(source, actual2);
  32. }
  33. UNIT_ASSERT_VALUES_EQUAL("http://ya.ru/\\x17\\n\xAB", EscapeJ<false>("http://ya.ru/\x17\n\xab"));
  34. TString s = EscapeJ<false, true>("http://ya.ru/\x17\n\xab\xff");
  35. UNIT_ASSERT_VALUES_EQUAL("http://ya.ru/\\u0017\\n\xAB\\xFF", s);
  36. UNIT_ASSERT_VALUES_EQUAL("http://ya.ru/\\x17\n\xAB", EscapeJ<false>("http://ya.ru/\x17\n\xab", "\n"));
  37. UNIT_ASSERT_VALUES_EQUAL("http:\\x2F\\x2Fya.ru\\x2F\\x17\n\xAB'", EscapeJ<false>("http://ya.ru/\x17\n\xab'", "\n'", "/"));
  38. UNIT_ASSERT_VALUES_EQUAL("http://ya.ru/\x17\n\xab", UnescapeC("http:\\x2F\\x2Fya.ru\\x2F\\x17\n\xAB"));
  39. UNIT_ASSERT_VALUES_EQUAL("http://ya.ru/\x17\n\xab", UnescapeC("http://ya.ru/\\x17\\n\xAB"));
  40. UNIT_ASSERT_VALUES_EQUAL("h", EscapeJ<false>("h"));
  41. UNIT_ASSERT_VALUES_EQUAL("\"h\"", EscapeJ<true>("h"));
  42. UNIT_ASSERT_VALUES_EQUAL("h", UnescapeC("h"));
  43. UNIT_ASSERT_VALUES_EQUAL("\\xFF", EscapeJ<false>("\xFF"));
  44. UNIT_ASSERT_VALUES_EQUAL("\"\\xFF\"", EscapeJ<true>("\xFF"));
  45. UNIT_ASSERT_VALUES_EQUAL("\xFF", UnescapeC("\\xFF"));
  46. UNIT_ASSERT_VALUES_EQUAL("\\377f", EscapeJ<false>("\xff"
  47. "f"));
  48. UNIT_ASSERT_VALUES_EQUAL("\xff"
  49. "f",
  50. UnescapeC("\\377f"));
  51. UNIT_ASSERT_VALUES_EQUAL("\\xFFg", EscapeJ<false>("\xff"
  52. "g"));
  53. UNIT_ASSERT_VALUES_EQUAL("\xff"
  54. "g",
  55. UnescapeC("\\xFFg"));
  56. }
  57. }