Commit a68b4caf by Niels

+ more test cases

parent 2e26faf9
...@@ -1099,7 +1099,8 @@ const JSON& JSON::operator[](const std::string& key) const ...@@ -1099,7 +1099,8 @@ const JSON& JSON::operator[](const std::string& key) const
// this [] operator only works for objects // this [] operator only works for objects
if (_type != value_type::object) if (_type != value_type::object)
{ {
throw std::domain_error("cannot get entry with key " + std::string(key) + " from " + _typename()); throw std::domain_error("cannot get entry with key " +
std::string(key) + " from " + _typename());
} }
// search for the key // search for the key
...@@ -1152,6 +1153,14 @@ JSON& JSON::at(const char* key) ...@@ -1152,6 +1153,14 @@ JSON& JSON::at(const char* key)
} }
/*! /*!
@copydoc JSON::at(const char *key) const
*/
const JSON& JSON::at(const std::string& key) const
{
return at(key.c_str());
}
/*!
This operator realizes read-only access to object elements given a string This operator realizes read-only access to object elements given a string
key. key.
...@@ -1162,7 +1171,7 @@ key. ...@@ -1162,7 +1171,7 @@ key.
@exception std::domain_error if object is not an object @exception std::domain_error if object is not an object
@exception std::out_of_range if key is not found (via std::map::at) @exception std::out_of_range if key is not found (via std::map::at)
*/ */
const JSON& JSON::at(const std::string& key) const const JSON& JSON::at(const char* key) const
{ {
// this [] operator only works for objects // this [] operator only works for objects
if (_type != value_type::object) if (_type != value_type::object)
...@@ -1175,6 +1184,7 @@ const JSON& JSON::at(const std::string& key) const ...@@ -1175,6 +1184,7 @@ const JSON& JSON::at(const std::string& key) const
return _value.object->at(key); return _value.object->at(key);
} }
/*! /*!
Returns the size of the JSON object. Returns the size of the JSON object.
......
...@@ -257,6 +257,8 @@ class JSON ...@@ -257,6 +257,8 @@ class JSON
JSON& at(const char*); JSON& at(const char*);
/// operator to get an element in an object /// operator to get an element in an object
const JSON& at(const std::string&) const; const JSON& at(const std::string&) const;
/// operator to get an element in an object
const JSON& at(const char*) const;
/// return the number of stored values /// return the number of stored values
size_t size() const noexcept; size_t size() const noexcept;
......
...@@ -507,6 +507,10 @@ TEST_CASE("object") ...@@ -507,6 +507,10 @@ TEST_CASE("object")
JSON nonarray = 1; JSON nonarray = 1;
CHECK_THROWS_AS(const int i = nonarray["v1"], std::domain_error); CHECK_THROWS_AS(const int i = nonarray["v1"], std::domain_error);
CHECK_THROWS_AS(nonarray["v1"] = 10, std::domain_error); CHECK_THROWS_AS(nonarray["v1"] = 10, std::domain_error);
{
const JSON c = {{"foo", "bar"}};
CHECK_THROWS_AS(c[std::string("baz")], std::out_of_range);
}
// clear() // clear()
JSON j7 = {{"k0", 0}, {"k1", 1}, {"k2", 2}, {"k3", 3}}; JSON j7 = {{"k0", 0}, {"k1", 1}, {"k2", 2}, {"k3", 3}};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment