sql_format_ut.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <library/cpp/testing/unittest/registar.h>
  2. #include "sql_format.h"
  3. #include <yql/essentials/sql/v1/lexer/antlr3/lexer.h>
  4. #include <yql/essentials/sql/v1/lexer/antlr3_ansi/lexer.h>
  5. #include <yql/essentials/sql/v1/proto_parser/antlr3/proto_parser.h>
  6. #include <yql/essentials/sql/v1/proto_parser/antlr3_ansi/proto_parser.h>
  7. #include <google/protobuf/arena.h>
  8. #include <util/string/subst.h>
  9. #include <util/string/join.h>
  10. namespace {
  11. using TCases = TVector<std::pair<TString, TString>>;
  12. struct TSetup {
  13. TSetup(bool ansiLexer = false) {
  14. NSQLTranslationV1::TLexers lexers;
  15. lexers.Antlr3 = NSQLTranslationV1::MakeAntlr3LexerFactory();
  16. lexers.Antlr3Ansi = NSQLTranslationV1::MakeAntlr3AnsiLexerFactory();
  17. NSQLTranslationV1::TParsers parsers;
  18. parsers.Antlr3 = NSQLTranslationV1::MakeAntlr3ParserFactory();
  19. parsers.Antlr3Ansi = NSQLTranslationV1::MakeAntlr3AnsiParserFactory();
  20. NSQLTranslation::TTranslationSettings settings;
  21. settings.Antlr4Parser = false;
  22. settings.Arena = &Arena;
  23. settings.AnsiLexer = ansiLexer;
  24. Formatter = NSQLFormat::MakeSqlFormatter(lexers, parsers, settings);
  25. }
  26. void Run(const TCases& cases, NSQLFormat::EFormatMode mode = NSQLFormat::EFormatMode::Pretty) {
  27. NSQLTranslationV1::TLexers lexers;
  28. lexers.Antlr3 = NSQLTranslationV1::MakeAntlr3LexerFactory();
  29. lexers.Antlr3Ansi = NSQLTranslationV1::MakeAntlr3AnsiLexerFactory();
  30. for (const auto& c : cases) {
  31. NYql::TIssues issues;
  32. TString formatted;
  33. auto res = Formatter->Format(c.first, formatted, issues, mode);
  34. UNIT_ASSERT_C(res, issues.ToString());
  35. auto expected = c.second;
  36. SubstGlobal(expected, "\t", TString(NSQLFormat::OneIndent, ' '));
  37. UNIT_ASSERT_NO_DIFF(formatted, expected);
  38. TString formatted2;
  39. auto res2 = Formatter->Format(formatted, formatted2, issues);
  40. UNIT_ASSERT_C(res2, issues.ToString());
  41. UNIT_ASSERT_NO_DIFF(formatted, formatted2);
  42. if (mode == NSQLFormat::EFormatMode::Pretty) {
  43. NSQLTranslation::TTranslationSettings settings;
  44. settings.Antlr4Parser = false;
  45. auto mutatedQuery = NSQLFormat::MutateQuery(lexers, c.first, settings);
  46. auto res3 = Formatter->Format(mutatedQuery, formatted, issues);
  47. UNIT_ASSERT_C(res3, issues.ToString());
  48. }
  49. }
  50. }
  51. google::protobuf::Arena Arena;
  52. NSQLFormat::ISqlFormatter::TPtr Formatter;
  53. };
  54. }
  55. Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
  56. #include "sql_format_ut.h"
  57. }