Base: Add tests for escapeXml
This commit is contained in:
committed by
Chris Hennes
parent
49c80ebe5c
commit
0a585dc3bb
@@ -29,6 +29,7 @@ add_executable(Base_tests_run
|
||||
Vector3D.cpp
|
||||
ViewProj.cpp
|
||||
Writer.cpp
|
||||
XMLTools.cpp
|
||||
)
|
||||
|
||||
setup_qt_test(InventorBuilder)
|
||||
|
||||
79
tests/src/Base/XMLTools.cpp
Normal file
79
tests/src/Base/XMLTools.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <Base/XMLTools.h>
|
||||
|
||||
class TestXMLTools: public testing::Test
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlEmptyString)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml(""), "");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlNoChangesForSafeText)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml("abcXYZ_123"), "abcXYZ_123");
|
||||
EXPECT_EQ(XMLTools::escapeXml("hello world"), "hello world");
|
||||
EXPECT_EQ(XMLTools::escapeXml("line1\nline2\tend"), "line1\nline2\tend");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlEscapesAmpersand)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml("&"), "&");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a&b"), "a&b");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlEscapesLessThanAndGreaterThan)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml("<"), "<");
|
||||
EXPECT_EQ(XMLTools::escapeXml(">"), ">");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a<b"), "a<b");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a>b"), "a>b");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a<b>c"), "a<b>c");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlEscapesQuotes)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml("\""), """);
|
||||
EXPECT_EQ(XMLTools::escapeXml("'"), "'");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a\"b"), "a"b");
|
||||
EXPECT_EQ(XMLTools::escapeXml("a'b"), "a'b");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlEscapesAllFiveInOneString)
|
||||
{
|
||||
// input: & < > " '
|
||||
EXPECT_EQ(XMLTools::escapeXml("&<>\"'"), "&<>"'");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlDoesNotDoubleEscapeNewlyInsertedEntities)
|
||||
{
|
||||
// This test specifically catches the classic bug where you replace
|
||||
// '<' with "<" and then later replace '&' with "&" and end up with "&lt;".
|
||||
EXPECT_EQ(XMLTools::escapeXml("<"), "<");
|
||||
EXPECT_EQ(XMLTools::escapeXml(">"), ">");
|
||||
EXPECT_EQ(XMLTools::escapeXml("\""), """);
|
||||
EXPECT_EQ(XMLTools::escapeXml("'"), "'");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlComplexMixedContent)
|
||||
{
|
||||
const std::string in = "Tom & Jerry <\"fun\"> 'n' games";
|
||||
const std::string out = "Tom & Jerry <"fun"> 'n' games";
|
||||
EXPECT_EQ(XMLTools::escapeXml(in), out);
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlMultipleAdjacentCharacters)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml("&&&&"), "&&&&");
|
||||
EXPECT_EQ(XMLTools::escapeXml("<<<<"), "<<<<");
|
||||
EXPECT_EQ(XMLTools::escapeXml("\"\"''"), """''");
|
||||
}
|
||||
|
||||
TEST_F(TestXMLTools, EscapeXmlPreservesWhitespaceAndControlCommonInText)
|
||||
{
|
||||
EXPECT_EQ(XMLTools::escapeXml(" a \r\n b \t c "), " a \r\n b \t c ");
|
||||
}
|
||||
Reference in New Issue
Block a user