#include #include #include "SqlLexer.h" using namespace testing; TEST(SqlLexer, lexer) { QString input = " SELECT "; SqlLexer lexer(input, LexerState::Null); int startpos, length; BasicTokenType tokentype; QString out; lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(1)); ASSERT_THAT(length, Eq(6)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Symbol)); ASSERT_THAT( out, Eq(QString("SELECT")) ); } TEST(SqlLexer, lexer_quote_in_string) { QString input = " 'abc''def' "; SqlLexer lexer(input, LexerState::Null); int startpos, length; BasicTokenType tokentype; QString out; lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(1)); ASSERT_THAT(length, Eq(10)); ASSERT_THAT(tokentype, Eq(BasicTokenType::QuotedString)); } TEST(SqlLexer, lexer_comma_handling) { QString input = "abc,def"; SqlLexer lexer(input, LexerState::Null); int startpos, length; BasicTokenType tokentype; QString out; lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(0)); ASSERT_THAT(length, Eq(3)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Symbol)); lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(3)); ASSERT_THAT(length, Eq(1)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Comma)); ASSERT_THAT(out, Eq(QString(","))); lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(4)); ASSERT_THAT(length, Eq(3)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Symbol)); } TEST(SqlLexer, lexer_cast) { QString input = "'1'::integer"; SqlLexer lexer(input, LexerState::Null); int startpos, length; BasicTokenType tokentype; QString out; lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(0)); ASSERT_THAT(length, Eq(3)); ASSERT_THAT(tokentype, Eq(BasicTokenType::QuotedString)); lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(3)); ASSERT_THAT(length, Eq(2)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Cast)); lexer.nextBasicToken(startpos, length, tokentype, out); ASSERT_THAT(startpos, Eq(5)); ASSERT_THAT(length, Eq(7)); ASSERT_THAT(tokentype, Eq(BasicTokenType::Symbol)); }