From 63a68b3c1c8c2fb6ca8e114ba2ddc27d2bb46f02 Mon Sep 17 00:00:00 2001 From: bgbsww Date: Fri, 19 Jul 2024 08:53:55 -0400 Subject: [PATCH 1/2] Throw exceptions rather than return default 0 --- src/Base/Reader.cpp | 8 +++---- tests/src/Base/Reader.cpp | 50 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index 17894c2bb2..20b615bede 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -111,20 +111,18 @@ unsigned int Base::XMLReader::getAttributeCount() const long Base::XMLReader::getAttributeAsInteger(const char* AttrName, const char* defaultValue) const { - const int base = 10; - return strtol(getAttribute(AttrName, defaultValue), nullptr, base); + return stol(getAttribute(AttrName, defaultValue)); } unsigned long Base::XMLReader::getAttributeAsUnsigned(const char* AttrName, const char* defaultValue) const { - const int base = 10; - return strtoul(getAttribute(AttrName, defaultValue), nullptr, base); + return stoul(getAttribute(AttrName, defaultValue), nullptr); } double Base::XMLReader::getAttributeAsFloat(const char* AttrName, const char* defaultValue) const { - return strtod(getAttribute(AttrName, defaultValue), nullptr); + return stod(getAttribute(AttrName, defaultValue), nullptr); } const char* Base::XMLReader::getAttribute(const char* AttrName, // NOLINT diff --git a/tests/src/Base/Reader.cpp b/tests/src/Base/Reader.cpp index ab6f8a4baa..76d08f981a 100644 --- a/tests/src/Base/Reader.cpp +++ b/tests/src/Base/Reader.cpp @@ -292,3 +292,53 @@ TEST_F(ReaderTest, charStreamBase64Encoded) // Conversion done using https://www.base64encode.org for testing purposes EXPECT_EQ(std::string("FreeCAD rocks! 🪨🪨🪨"), std::string(buffer.data())); } + +TEST_F(ReaderTest, validDefaults) +{ + // Arrange + auto xmlBody = R"( + + +)"; + + givenDataAsXMLStream(xmlBody); + + // Act + const char* value2 = Reader()->getAttribute("missing", "expected value"); + int value4 = Reader()->getAttributeAsInteger("missing", "-123"); + unsigned value6 = Reader()->getAttributeAsUnsigned("missing", "123"); + float value8 = Reader()->getAttributeAsFloat("missing", "1.234"); + + // Assert + EXPECT_THROW({ int value1 = Reader()->getAttributeAsInteger("missing"); }, + Base::XMLBaseException); + EXPECT_EQ(value2, "expected value"); + EXPECT_THROW({ int value3 = Reader()->getAttributeAsInteger("missing"); }, + Base::XMLBaseException); + EXPECT_EQ(value4, -123); + EXPECT_THROW({ int value5 = Reader()->getAttributeAsUnsigned("missing"); }, + Base::XMLBaseException); + EXPECT_EQ(value6, 123); + EXPECT_THROW({ int value7 = Reader()->getAttributeAsFloat("missing"); }, + Base::XMLBaseException); + EXPECT_NEAR(value8, 1.234, 0.001); +} + +TEST_F(ReaderTest, invalidDefaults) +{ + // Arrange + auto xmlBody = R"( + + +)"; + + givenDataAsXMLStream(xmlBody); + + // Act / Assert + EXPECT_THROW({ int value4 = Reader()->getAttributeAsInteger("missing", "Not an Integer"); }, + std::invalid_argument); + EXPECT_THROW({ int value6 = Reader()->getAttributeAsInteger("missing", "Not an Unsigned"); }, + std::invalid_argument); + EXPECT_THROW({ int value8 = Reader()->getAttributeAsInteger("missing", "Not a Float"); }, + std::invalid_argument); +} From 178c4ec47716a6028afe886a8ef27cdc652fc4a9 Mon Sep 17 00:00:00 2001 From: bgbsww Date: Fri, 19 Jul 2024 09:09:59 -0400 Subject: [PATCH 2/2] Throw exceptions rather than return default 0 --- tests/src/Base/Reader.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/tests/src/Base/Reader.cpp b/tests/src/Base/Reader.cpp index 76d08f981a..464d44a29d 100644 --- a/tests/src/Base/Reader.cpp +++ b/tests/src/Base/Reader.cpp @@ -310,17 +310,13 @@ TEST_F(ReaderTest, validDefaults) float value8 = Reader()->getAttributeAsFloat("missing", "1.234"); // Assert - EXPECT_THROW({ int value1 = Reader()->getAttributeAsInteger("missing"); }, - Base::XMLBaseException); + EXPECT_THROW({ Reader()->getAttributeAsInteger("missing"); }, Base::XMLBaseException); EXPECT_EQ(value2, "expected value"); - EXPECT_THROW({ int value3 = Reader()->getAttributeAsInteger("missing"); }, - Base::XMLBaseException); + EXPECT_THROW({ Reader()->getAttributeAsInteger("missing"); }, Base::XMLBaseException); EXPECT_EQ(value4, -123); - EXPECT_THROW({ int value5 = Reader()->getAttributeAsUnsigned("missing"); }, - Base::XMLBaseException); + EXPECT_THROW({ Reader()->getAttributeAsUnsigned("missing"); }, Base::XMLBaseException); EXPECT_EQ(value6, 123); - EXPECT_THROW({ int value7 = Reader()->getAttributeAsFloat("missing"); }, - Base::XMLBaseException); + EXPECT_THROW({ Reader()->getAttributeAsFloat("missing"); }, Base::XMLBaseException); EXPECT_NEAR(value8, 1.234, 0.001); } @@ -335,10 +331,10 @@ TEST_F(ReaderTest, invalidDefaults) givenDataAsXMLStream(xmlBody); // Act / Assert - EXPECT_THROW({ int value4 = Reader()->getAttributeAsInteger("missing", "Not an Integer"); }, + EXPECT_THROW({ Reader()->getAttributeAsInteger("missing", "Not an Integer"); }, std::invalid_argument); - EXPECT_THROW({ int value6 = Reader()->getAttributeAsInteger("missing", "Not an Unsigned"); }, + EXPECT_THROW({ Reader()->getAttributeAsInteger("missing", "Not an Unsigned"); }, std::invalid_argument); - EXPECT_THROW({ int value8 = Reader()->getAttributeAsInteger("missing", "Not a Float"); }, + EXPECT_THROW({ Reader()->getAttributeAsInteger("missing", "Not a Float"); }, std::invalid_argument); }