Implemented ArrayParser and unit tests to verify its working.
This commit is contained in:
parent
b5d800c87e
commit
ec930218cd
4 changed files with 254 additions and 3 deletions
92
tests/PgsqlTests/tst_ArrayParser.cpp
Normal file
92
tests/PgsqlTests/tst_ArrayParser.cpp
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
#include <gtest/gtest.h>
|
||||
#include <gmock/gmock-matchers.h>
|
||||
#include "ArrayParser.h"
|
||||
#include "PrintTo_Qt.h"
|
||||
|
||||
using namespace testing;
|
||||
using namespace Pgsql;
|
||||
|
||||
TEST(ArrayParser, emptyInput)
|
||||
{
|
||||
const char * input = "";
|
||||
ArrayParser parser(input);
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
TEST(ArrayParser, emptyArray)
|
||||
{
|
||||
const char * input = "{}";
|
||||
ArrayParser parser(input);
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
TEST(ArrayParser, oneInt)
|
||||
{
|
||||
const char * input = "{1}";
|
||||
ArrayParser parser(input);
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, "1");
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
TEST(ArrayParser, twoElems)
|
||||
{
|
||||
const char * input = "{1,2.3}";
|
||||
ArrayParser parser(input);
|
||||
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, "1");
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, "2.3");
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
TEST(ArrayParser, nullElem)
|
||||
{
|
||||
const char * input = "{NULL}";
|
||||
ArrayParser parser(input);
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, std::nullopt);
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ARRAY['ab c', NULL, 'def', 'd"e', 'g''h ', 'g,j']
|
||||
// {"ab c",NULL,def,"d\"e","g'h ","g,j"}
|
||||
|
||||
TEST(ArrayParser, quotedValues)
|
||||
{
|
||||
const char * input = R"_({"ab c","de\"f"})_";
|
||||
ArrayParser parser(input);
|
||||
auto res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, "ab c");
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_TRUE(res.ok);
|
||||
ASSERT_EQ(res.value, "de\"f");
|
||||
|
||||
res = parser.GetNextElem();
|
||||
ASSERT_FALSE(res.ok);
|
||||
}
|
||||
|
||||
|
||||
// ARRAY['2017-12-11'::date, NULL]
|
||||
// {2017-12-11,NULL}
|
||||
|
||||
// NULL::int2
|
||||
// null
|
||||
Loading…
Add table
Add a link
Reference in a new issue