diff --git a/src/App/MappedName.h b/src/App/MappedName.h index 0d16018a5b..90172b9c99 100644 --- a/src/App/MappedName.h +++ b/src/App/MappedName.h @@ -103,9 +103,6 @@ public: MappedName(const MappedName& other) = default; - // FIXME if you pass a raw MappedName into these constructors they will - // reset raw to false and things will break. is this intended? - /// Copy constructor with start position offset and optional size. The data is *not* reused. /// /// \param other The MappedName to copy @@ -364,7 +361,6 @@ public: /// \param size The number of bytes to copy. If omitted, dataToAppend must be null-terminated. void append(const char* dataToAppend, int size = -1) { - // FIXME raw not assigned? if (dataToAppend && (size != 0)) { if (size < 0) { size = static_cast(qstrlen(dataToAppend)); @@ -690,6 +686,8 @@ public: } /// Returns true if this is shared data, or false if a unique copy has been made. + /// It is safe to access data only if it has been copied prior. To force a copy + /// please \see compact() bool isRaw() const { return this->raw; @@ -783,9 +781,9 @@ public: return -1; } if (startPosition < 0 - || startPosition > this->postfix.size()) {// FIXME should be this->data.size - if (startPosition > postfix.size()) { - startPosition -= postfix.size(); + || startPosition >= this->data.size()) { + if (startPosition >= data.size()) { + startPosition -= data.size(); } int res = this->postfix.lastIndexOf(searchTarget, startPosition); if (res >= 0) { diff --git a/tests/src/App/MappedName.cpp b/tests/src/App/MappedName.cpp index c5e176f540..9ebeb7d41b 100644 --- a/tests/src/App/MappedName.cpp +++ b/tests/src/App/MappedName.cpp @@ -237,19 +237,12 @@ TEST(MappedName, fromRawDataCopy) EXPECT_EQ(mappedName.postfixBytes(), QByteArray("TESTPOSTFIX")); } -TEST(MappedName, fromRawDataCopyStartposAndSize) //FIXME +TEST(MappedName, fromRawDataCopyStartposAndSize) { // Arrange Data::MappedName temp = Data::MappedName::fromRawData(QByteArray("TESTTEST", 8)); temp.append("ABCDEFGHIJKLM"); //postfix - -/* This block is OK - EXPECT_EQ(temp.isRaw(), true); - EXPECT_EQ(temp.empty(), false); - EXPECT_EQ(temp.size(), 21); - EXPECT_EQ(temp.dataBytes(), QByteArray("TESTTEST", 8)); - EXPECT_EQ(temp.postfixBytes(), QByteArray("ABCDEFGHIJKLM")); -*/ + temp.compact(); //Always call compact before accessing data! // Act Data::MappedName mappedName = Data::MappedName::fromRawData(temp, 2, 13); @@ -258,9 +251,6 @@ TEST(MappedName, fromRawDataCopyStartposAndSize) //FIXME EXPECT_EQ(mappedName.isRaw(), true); EXPECT_EQ(mappedName.empty(), false); EXPECT_EQ(mappedName.size(), 13); - //next line fails with TEST\0T != STTEST - //funny thing if i uncomment the block above, which does nothing, now the next line - //fails with TEST\0H != STTEST EXPECT_EQ(mappedName.dataBytes(), QByteArray("STTEST", 6)); EXPECT_EQ(mappedName.postfixBytes(), QByteArray("ABCDEFG")); } @@ -649,40 +639,26 @@ TEST(MappedName, rfind) EXPECT_EQ(mappedName.rfind("STPO"), -1); //sentence must be fully contained in data or postfix EXPECT_EQ(mappedName.rfind("POST"), 4); - - //FIXME looks broken EXPECT_EQ(mappedName.rfind("ST"), 13); EXPECT_EQ(mappedName.rfind("ST", 0), -1); EXPECT_EQ(mappedName.rfind("ST", 1), -1); EXPECT_EQ(mappedName.rfind("ST", 2), 2); EXPECT_EQ(mappedName.rfind("ST", 3), 2); EXPECT_EQ(mappedName.rfind("ST", 4), 2); - EXPECT_EQ(mappedName.rfind("ST", 5), -1); - EXPECT_EQ(mappedName.rfind("ST", 6), -1); - EXPECT_EQ(mappedName.rfind("ST", 7), -1); - EXPECT_EQ(mappedName.rfind("ST", 8), -1); - EXPECT_EQ(mappedName.rfind("ST", 9), -1); - EXPECT_EQ(mappedName.rfind("ST", 10), -1); - EXPECT_EQ(mappedName.rfind("ST", 11), -1); - EXPECT_EQ(mappedName.rfind("ST", 12), 2); - EXPECT_EQ(mappedName.rfind("ST", 13), 6); - EXPECT_EQ(mappedName.rfind("ST", 14), 6); - EXPECT_EQ(mappedName.rfind("ST", 15), 6); - EXPECT_EQ(mappedName.rfind("ST", 16), 6); - EXPECT_EQ(mappedName.rfind("ST", 17), 6); - EXPECT_EQ(mappedName.rfind("ST", 18), 6); - EXPECT_EQ(mappedName.rfind("ST", 19), 6); - EXPECT_EQ(mappedName.rfind("ST", 20), 13); - EXPECT_EQ(mappedName.rfind("ST", 21), 13); - EXPECT_EQ(mappedName.rfind("ST", 22), 13); - EXPECT_EQ(mappedName.rfind("ST", 23), 2); - EXPECT_EQ(mappedName.rfind("ST", 24), 2); - EXPECT_EQ(mappedName.rfind("ST", 25), 2); - EXPECT_EQ(mappedName.rfind("ST", 26), 2); - EXPECT_EQ(mappedName.rfind("ST", 27), 2); - EXPECT_EQ(mappedName.rfind("ST", 28), 2); - //EXPECT_EQ(mappedName.rfind("POST", 7), 4); - //EXPECT_EQ(mappedName.rfind("POST", 8), -1); + EXPECT_EQ(mappedName.rfind("ST", 5), 2); + EXPECT_EQ(mappedName.rfind("ST", 6), 6); + EXPECT_EQ(mappedName.rfind("ST", 7), 6); + EXPECT_EQ(mappedName.rfind("ST", 8), 6); + EXPECT_EQ(mappedName.rfind("ST", 9), 6); + EXPECT_EQ(mappedName.rfind("ST", 10), 6); + EXPECT_EQ(mappedName.rfind("ST", 11), 6); + EXPECT_EQ(mappedName.rfind("ST", 12), 6); + EXPECT_EQ(mappedName.rfind("ST", 13), 13); + EXPECT_EQ(mappedName.rfind("ST", 14), 13); + EXPECT_EQ(mappedName.rfind("ST", 15), 13); + + EXPECT_EQ(mappedName.rfind("POST", 4), 4); + EXPECT_EQ(mappedName.rfind("POST", 3), -1); EXPECT_EQ(mappedName.rfind(std::string("")), mappedName.size()); }