93 lines
1.7 KiB
C++
93 lines
1.7 KiB
C++
|
|
#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
|