Added initial tests to MappedName

This commit is contained in:
Pesc0
2023-03-10 20:11:04 +01:00
parent 5600c564be
commit 62246b951a
2 changed files with 218 additions and 5 deletions

View File

@@ -80,6 +80,9 @@ public:
: data(other.data), postfix(other.postfix), raw(other.raw)
{}
//FIXME if you pass a raw MappedName into these constructors they will
//reset raw to false and things will break. is this intended?
MappedName(const MappedName & other, int startpos, int size = -1)
: raw(false)
{
@@ -276,6 +279,7 @@ public:
void append(const char * d, int size = -1)
{
//FIXME raw not assigned?
if (d && size) {
if (size < 0)
size = qstrlen(d);
@@ -288,26 +292,41 @@ public:
void append(const MappedName & other, int startpos = 0, int size = -1)
{
// enforce 0 <= startpos <= other.size
if (startpos < 0)
startpos = 0;
else if (startpos > other.size())
return;
if (size < 0 || size + startpos > other.size())
// enforce 0 <= size <= other.size - startpos
if (size < 0 || size > other.size() - startpos)
size = other.size() - startpos;
int count = size;
if (startpos < other.data.size()) {
if (count > other.data.size() - startpos)
if (startpos < other.data.size()) // if starting inside data
{
int count = size;
//make sure count doesn't exceed data size and end up in postfix
if (count > other.data.size() - startpos)
count = other.data.size() - startpos;
//if this is empty append in data else append in postfix
if (startpos == 0 && count == other.data.size() && this->empty()) {
this->data = other.data;
this->raw = other.raw;
} else
append(other.data.constData() + startpos, count);
//setup startpos and count to contiune appending the remainder to postfix
startpos = 0;
size -= count;
} else
}
else //else starting inside postfix
{
startpos -= other.data.size();
}
//if there is still data to be added to postfix
if (size) {
if (startpos == 0 && size == other.postfix.size()) {
if (this->empty())

View File

@@ -3,14 +3,208 @@
#include "gtest/gtest.h"
#include "App/MappedName.h"
#include "App/ComplexGeoData.h"
#include <string>
// clang-format off
TEST(MappedName, defaultConstruction)
{
auto mappedName = Data::MappedName();
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), true);
EXPECT_EQ(mappedName.size(), 0);
}
TEST(MappedName, namedConstruction)
{
auto mappedName = Data::MappedName("TEST");
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 4);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, namedConstructionWithMaxSize)
{
auto mappedName = Data::MappedName("TEST", 2);
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 2);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TE"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, namedConstructionDiscardPrefix)
{
std::string name = Data::ComplexGeoData::elementMapPrefix() + "TEST";
auto mappedName = Data::MappedName(name.c_str());
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 4);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, stringNamedConstruction)
{
auto mappedName = Data::MappedName(std::string("TEST"));
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 4);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, stringNamedConstructionDiscardPrefix)
{
std::string name = Data::ComplexGeoData::elementMapPrefix() + "TEST";
auto mappedName = Data::MappedName(name);
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 4);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, copyConstructor)
{
auto temp = Data::MappedName("TEST");
auto mappedName = Data::MappedName(temp);
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 4);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, copyConstructorWithPostfix)
{
auto temp = Data::MappedName("TEST");
auto mappedName = Data::MappedName(temp, "POSTFIXTEST");
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 15);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
}
TEST(MappedName, constructorWithPostfixAndCopy)
{
auto temp = Data::MappedName(Data::MappedName("TEST"), "POSTFIXTEST");
auto mappedName = Data::MappedName(temp, "ANOTHERPOSTFIX");
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 29);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TESTPOSTFIXTEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("ANOTHERPOSTFIX"));
}
TEST(MappedName, copyConstructorStartpos)
{
auto temp = Data::MappedName(Data::MappedName("TEST"), "POSTFIXTEST");
auto mappedName = Data::MappedName(temp, 2, -1);
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 13);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("ST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
}
TEST(MappedName, copyConstructorStartposAndSize)
{
auto temp = Data::MappedName(Data::MappedName("TEST"), "POSTFIXTEST");
auto mappedName = Data::MappedName(temp, 2, 6);
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 6);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("ST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POST"));
}
#if QT_VERSION >= 0x050200
TEST(MappedName, moveConstructor)
{
auto temp = Data::MappedName(Data::MappedName("TEST"), "POSTFIXTEST");
auto mappedName = Data::MappedName(std::move(temp));
EXPECT_EQ(mappedName.isRaw(), false);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 15);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST"));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("POSTFIXTEST"));
EXPECT_EQ(temp.isRaw(), false);
EXPECT_EQ(temp.empty(), true);
EXPECT_EQ(temp.size(), 0);
EXPECT_EQ(temp.dataBytes(), QByteArray());
EXPECT_EQ(temp.postfixBytes(), QByteArray());
}
#endif
TEST(MappedName, fromRawData)
{
auto mappedName = Data::MappedName::fromRawData("TEST\0\0TEST", 10);
EXPECT_EQ(mappedName.isRaw(), true);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 10);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST\0\0TEST", 10));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, fromRawDataQByteArray)
{
auto mappedName = Data::MappedName::fromRawData(QByteArray("TEST\0\0TEST", 10));
EXPECT_EQ(mappedName.isRaw(), true);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 10);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST\0\0TEST", 10));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray());
}
TEST(MappedName, fromRawDataCopy)
{
auto temp = Data::MappedName::fromRawData(QByteArray("TEST\0\0TEST", 10));
temp.append("TESTPOSTFIX");
auto mappedName = Data::MappedName::fromRawData(temp, 0);
EXPECT_EQ(mappedName.isRaw(), true);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 21);
EXPECT_EQ(mappedName.dataBytes(), QByteArray("TEST\0\0TEST", 10));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("TESTPOSTFIX"));
}
TEST(MappedName, fromRawDataCopyStartposAndSize)
{
auto temp = Data::MappedName::fromRawData(QByteArray("TEST\0\0TEST", 10));
temp.append("ABCDEFGHIJKLM"); //postfix
/* This block is OK
EXPECT_EQ(temp.isRaw(), true);
EXPECT_EQ(temp.empty(), false);
EXPECT_EQ(temp.size(), 23);
EXPECT_EQ(temp.dataBytes(), QByteArray("TEST\0\0TEST", 10));
EXPECT_EQ(temp.postfixBytes(), QByteArray("ABCDEFGHIJKLM"));
*/
auto mappedName = Data::MappedName::fromRawData(temp, 2, 13);
EXPECT_EQ(mappedName.isRaw(), true);
EXPECT_EQ(mappedName.empty(), false);
EXPECT_EQ(mappedName.size(), 13);
//next line fails with CDE\0TEST != ST\0\0TEST
//funny thing if i uncomment the block above, which does nothing, now the next line
//fails with CDE\0GHIJ != ST\0\0TEST
EXPECT_EQ(mappedName.dataBytes(), QByteArray("ST\0\0TEST", 8));
EXPECT_EQ(mappedName.postfixBytes(), QByteArray("ABCDE"));
}
//TODO raw postfix?
// clang-format on