Include field name when diagnosing field not found:

Closes #3263
This commit is contained in:
John Freeman
2020-02-19 15:30:27 -06:00
committed by Carl Hua
parent f76a5a3183
commit 053b6d9fd3
3 changed files with 30 additions and 15 deletions

View File

@@ -41,7 +41,11 @@ namespace ripple {
class STArray;
//------------------------------------------------------------------------------
inline void
throwFieldNotFound(SField const& field)
{
Throw<std::runtime_error>("Field not found: " + field.getName());
}
class STObject
: public STBase
@@ -492,7 +496,7 @@ public:
STBase* rf = getPField (field, true);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
if (rf->getSType () == STI_NOTPRESENT)
rf = makeFieldPresent (field);
@@ -552,7 +556,7 @@ private:
const STBase* rf = peekAtPField (field);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
SerializedTypeID id = rf->getSType ();
@@ -578,7 +582,7 @@ private:
const STBase* rf = peekAtPField (field);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
SerializedTypeID id = rf->getSType ();
@@ -602,7 +606,7 @@ private:
STBase* rf = getPField (field, true);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
if (rf->getSType () == STI_NOTPRESENT)
rf = makeFieldPresent (field);
@@ -622,7 +626,7 @@ private:
STBase* rf = getPField (field, true);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
if (rf->getSType () == STI_NOTPRESENT)
rf = makeFieldPresent (field);
@@ -642,7 +646,7 @@ private:
STBase* rf = getPField (field, true);
if (! rf)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
if (rf->getSType () == STI_NOTPRESENT)
rf = makeFieldPresent (field);

View File

@@ -343,7 +343,7 @@ const STBase& STObject::peekAtField (SField const& field) const
int index = getFieldIndex (field);
if (index == -1)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
return peekAtIndex (index);
}
@@ -353,7 +353,7 @@ STBase& STObject::getField (SField const& field)
int index = getFieldIndex (field);
if (index == -1)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
return getIndex (index);
}
@@ -453,7 +453,7 @@ STBase* STObject::makeFieldPresent (SField const& field)
if (index == -1)
{
if (!isFree ())
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
return getPIndex (emplace_back(detail::nonPresentObject, field));
}
@@ -473,7 +473,7 @@ void STObject::makeFieldAbsent (SField const& field)
int index = getFieldIndex (field);
if (index == -1)
Throw<std::runtime_error> ("Field not found");
throwFieldNotFound(field);
const STBase& f = peekAtIndex (index);

View File

@@ -29,9 +29,22 @@
#include <ripple/protocol/messages.h>
#include <memory>
#include <regex>
namespace ripple {
/**
* Return true if the string loosely matches the regex.
*
* Meant for testing human-readable strings that may change over time.
*/
inline bool
matches(char const* string, char const* regex)
{
return std::regex_search(
string, std::basic_regex<char>(regex, std::regex_constants::icase));
}
class STTx_test : public beast::unit_test::suite
{
public:
@@ -1283,8 +1296,7 @@ public:
}
catch (std::runtime_error const& ex)
{
BEAST_EXPECT (
std::strcmp (ex.what(), "Field not found") == 0);
BEAST_EXPECT(matches(ex.what(), "field not found"));
}
}
@@ -1348,8 +1360,7 @@ public:
}
catch (std::runtime_error const& ex)
{
BEAST_EXPECT (
std::strcmp (ex.what(), "Field not found") == 0);
BEAST_EXPECT(matches(ex.what(), "field not found"));
}
}