pgLab/tests/pglabtests/tst_SqlLexer.cpp

103 lines
2.5 KiB
C++
Raw Normal View History

#include <gtest/gtest.h>
#include <gmock/gmock-matchers.h>
#include "SqlLexer.h"
#include "PrintTo_Qt.h"
using namespace testing;
2019-01-28 20:52:39 +01:00
TEST(SqlLexer, emptyInput)
{
QString input;
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(tokentype, Eq(BasicTokenType::End));
}
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));
2018-09-09 16:20:30 +02:00
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));
}