sql_format_ut.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <library/cpp/testing/unittest/registar.h>
  2. #include "sql_format.h"
  3. #include <google/protobuf/arena.h>
  4. #include <util/string/subst.h>
  5. #include <util/string/join.h>
  6. namespace {
  7. using TCases = TVector<std::pair<TString, TString>>;
  8. struct TSetup {
  9. TSetup(bool ansiLexer = false) {
  10. NSQLTranslation::TTranslationSettings settings;
  11. settings.Arena = &Arena;
  12. settings.AnsiLexer = ansiLexer;
  13. Formatter = NSQLFormat::MakeSqlFormatter(settings);
  14. }
  15. void Run(const TCases& cases, NSQLFormat::EFormatMode mode = NSQLFormat::EFormatMode::Pretty) {
  16. for (const auto& c : cases) {
  17. NYql::TIssues issues;
  18. TString formatted;
  19. auto res = Formatter->Format(c.first, formatted, issues, mode);
  20. UNIT_ASSERT_C(res, issues.ToString());
  21. auto expected = c.second;
  22. SubstGlobal(expected, "\t", TString(NSQLFormat::OneIndent, ' '));
  23. UNIT_ASSERT_NO_DIFF(formatted, expected);
  24. TString formatted2;
  25. auto res2 = Formatter->Format(formatted, formatted2, issues);
  26. UNIT_ASSERT_C(res2, issues.ToString());
  27. UNIT_ASSERT_NO_DIFF(formatted, formatted2);
  28. if (mode == NSQLFormat::EFormatMode::Pretty) {
  29. auto mutatedQuery = NSQLFormat::MutateQuery(c.first);
  30. auto res3 = Formatter->Format(mutatedQuery, formatted, issues);
  31. UNIT_ASSERT_C(res3, issues.ToString());
  32. }
  33. }
  34. }
  35. google::protobuf::Arena Arena;
  36. NSQLFormat::ISqlFormatter::TPtr Formatter;
  37. };
  38. }
  39. Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
  40. #include "sql_format_ut.h"
  41. }