Throw exceptions rather than return default 0
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"(
|
||||
<node1 attr='1'/>
|
||||
<node2 attr='2'/>
|
||||
)";
|
||||
|
||||
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"(
|
||||
<node1 attr='1'/>
|
||||
<node2 attr='2'/>
|
||||
)";
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user