yql_issue_utils_ut.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include "yql_issue_utils.h"
  2. #include "yql_issue.h"
  3. #include "yql_issue_id.h"
  4. #include <library/cpp/testing/unittest/registar.h>
  5. #include <util/string/subst.h>
  6. using namespace NYql;
  7. Y_UNIT_TEST_SUITE(TIssueUtilsTest) {
  8. Y_UNIT_TEST(TruncLevels1) {
  9. auto level0 = MakeIntrusive<TIssue>("level0");
  10. auto level1 = MakeIntrusive<TIssue>("level1");
  11. auto level2 = MakeIntrusive<TIssue>("level2");
  12. auto level30 = MakeIntrusive<TIssue>("level30");
  13. auto level31 = MakeIntrusive<TIssue>("level31");
  14. auto level40 = MakeIntrusive<TIssue>("level40");
  15. auto level41 = MakeIntrusive<TIssue>("level41");
  16. auto level51 = MakeIntrusive<TIssue>("level51");
  17. /*
  18. * * 0
  19. * |
  20. * * 1
  21. * |
  22. * * 2 --
  23. * | |
  24. * * 30 * 31
  25. * | |
  26. * * 40 * 41
  27. * |
  28. * * 51
  29. */
  30. level0->AddSubIssue(level1);
  31. level1->AddSubIssue(level2);
  32. level2->AddSubIssue(level30);
  33. level2->AddSubIssue(level31);
  34. level30->AddSubIssue(level40);
  35. level31->AddSubIssue(level41);
  36. level41->AddSubIssue(level51);
  37. {
  38. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(4).SetKeepTailLevels(2))}).ToString();
  39. const auto expected =
  40. R"___(<main>: Error: level0
  41. <main>: Error: level1
  42. <main>: Error: (skipped levels)
  43. <main>: Error: level30
  44. <main>: Error: level40
  45. <main>: Error: level41
  46. <main>: Error: level51
  47. )___";
  48. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  49. }
  50. {
  51. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(3).SetKeepTailLevels(1))}).ToString();
  52. const auto expected =
  53. R"___(<main>: Error: level0
  54. <main>: Error: level1
  55. <main>: Error: (skipped levels)
  56. <main>: Error: level40
  57. <main>: Error: level51
  58. )___";
  59. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  60. }
  61. }
  62. Y_UNIT_TEST(TruncLevels2) {
  63. auto level0 = MakeIntrusive<TIssue>("level0");
  64. auto level1 = MakeIntrusive<TIssue>("level1");
  65. auto level2 = MakeIntrusive<TIssue>("level2");
  66. auto level3 = MakeIntrusive<TIssue>("level3");
  67. auto level40 = MakeIntrusive<TIssue>("level40");
  68. auto level41 = MakeIntrusive<TIssue>("level41");
  69. /*
  70. * * 0
  71. * |
  72. * * 1
  73. * |
  74. * * 2
  75. * |
  76. * * 3 --
  77. * | |
  78. * * 40 * 41
  79. */
  80. level0->AddSubIssue(level1);
  81. level1->AddSubIssue(level2);
  82. level2->AddSubIssue(level3);
  83. level3->AddSubIssue(level40);
  84. level3->AddSubIssue(level41);
  85. {
  86. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(4).SetKeepTailLevels(2))}).ToString();
  87. const auto expected =
  88. R"___(<main>: Error: level0
  89. <main>: Error: level1
  90. <main>: Error: (skipped levels)
  91. <main>: Error: level3
  92. <main>: Error: level40
  93. <main>: Error: level41
  94. )___";
  95. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  96. }
  97. }
  98. Y_UNIT_TEST(TruncLevels3) {
  99. auto level0 = MakeIntrusive<TIssue>("level0");
  100. auto level1 = MakeIntrusive<TIssue>("level1");
  101. auto level2 = MakeIntrusive<TIssue>("level2");
  102. auto level3 = MakeIntrusive<TIssue>("level3");
  103. auto level40 = MakeIntrusive<TIssue>("level40");
  104. auto level41 = MakeIntrusive<TIssue>("level41");
  105. auto level50 = MakeIntrusive<TIssue>("level50");
  106. /*
  107. * * 0
  108. * |
  109. * * 1
  110. * |
  111. * * 2
  112. * |
  113. * * 3 --
  114. * | |
  115. * * 40 |
  116. * | |
  117. * * 50 * 41
  118. */
  119. level0->AddSubIssue(level1);
  120. level1->AddSubIssue(level2);
  121. level2->AddSubIssue(level3);
  122. level3->AddSubIssue(level40);
  123. level3->AddSubIssue(level41);
  124. level40->AddSubIssue(level50);
  125. {
  126. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(4).SetKeepTailLevels(1))}).ToString();
  127. const auto expected =
  128. R"___(<main>: Error: level0
  129. <main>: Error: level1
  130. <main>: Error: level2
  131. <main>: Error: (skipped levels)
  132. <main>: Error: level41
  133. <main>: Error: level50
  134. )___";
  135. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  136. }
  137. {
  138. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(4).SetKeepTailLevels(2))}).ToString();
  139. const auto expected =
  140. R"___(<main>: Error: level0
  141. <main>: Error: level1
  142. <main>: Error: (skipped levels)
  143. <main>: Error: level3
  144. <main>: Error: level41
  145. <main>: Error: level40
  146. <main>: Error: level50
  147. )___";
  148. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  149. }
  150. {
  151. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(4).SetKeepTailLevels(3))}).ToString();
  152. const auto expected =
  153. R"___(<main>: Error: level0
  154. <main>: Error: (skipped levels)
  155. <main>: Error: level2
  156. <main>: Error: level3
  157. <main>: Error: level40
  158. <main>: Error: level50
  159. <main>: Error: level41
  160. )___";
  161. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  162. }
  163. }
  164. Y_UNIT_TEST(KeepSeverity) {
  165. const auto templ =
  166. R"___(<main>: {severity}: level0, code: 1
  167. <main>: {severity}: level1, code: 1
  168. )___";
  169. for (auto severity: {ESeverity::TSeverityIds_ESeverityId_S_INFO, ESeverity::TSeverityIds_ESeverityId_S_WARNING, ESeverity::TSeverityIds_ESeverityId_S_ERROR, ESeverity::TSeverityIds_ESeverityId_S_FATAL}) {
  170. auto level0 = MakeIntrusive<TIssue>(TIssue("level0").SetCode(1, severity));
  171. auto level1 = MakeIntrusive<TIssue>(TIssue("level1").SetCode(1, severity));
  172. level0->AddSubIssue(level1);
  173. const auto res = TIssues({TruncateIssueLevels(*level0, TTruncateIssueOpts().SetMaxLevels(15).SetKeepTailLevels(3))}).ToString();
  174. const auto expected = SubstGlobalCopy<TString, TString>(templ, "{severity}", SeverityToString(severity));
  175. UNIT_ASSERT_STRINGS_EQUAL(res, expected);
  176. }
  177. }
  178. }