added test cases
This commit is contained in:
parent
82f5332cf4
commit
1d3b4dd158
7 changed files with 160 additions and 7 deletions
|
@ -5,10 +5,12 @@ All notable changes to this project will be documented in this file. This projec
|
|||
|
||||
[Full Changelog](https://github.com/nlohmann/json/compare/v1.1.0...HEAD)
|
||||
|
||||
- Additional integration options [\#237](https://github.com/nlohmann/json/issues/237)
|
||||
- Can't use basic\_json::iterator as a base iterator for std::move\_iterator [\#233](https://github.com/nlohmann/json/issues/233)
|
||||
- Provide a FAQ [\#163](https://github.com/nlohmann/json/issues/163)
|
||||
- Create PULL\_REQUEST\_TEMPLATE.md [\#213](https://github.com/nlohmann/json/pull/213) ([whackashoe](https://github.com/whackashoe))
|
||||
- fixed noexcept; added constexpr [\#208](https://github.com/nlohmann/json/pull/208) ([nlohmann](https://github.com/nlohmann))
|
||||
- Add support for afl-fuzz testing [\#207](https://github.com/nlohmann/json/pull/207) ([msm-](https://github.com/msm-))
|
||||
- Add support for afl-fuzz testing [\#207](https://github.com/nlohmann/json/pull/207) ([mykter](https://github.com/mykter))
|
||||
- Issue \#178 - Extending support to full uint64\_t/int64\_t range and unsigned type \(updated\) [\#193](https://github.com/nlohmann/json/pull/193) ([twelsby](https://github.com/twelsby))
|
||||
|
||||
- double values are serialized with commas as decimal points [\#228](https://github.com/nlohmann/json/issues/228)
|
||||
|
@ -26,6 +28,7 @@ All notable changes to this project will be documented in this file. This projec
|
|||
- Conflicting typedef of ssize\_t on Windows 32 bit when using Boost.Python [\#204](https://github.com/nlohmann/json/issues/204)
|
||||
- Integer conversion to unsigned [\#178](https://github.com/nlohmann/json/issues/178)
|
||||
|
||||
- Implement additional integration options [\#238](https://github.com/nlohmann/json/pull/238) ([robertmrk](https://github.com/robertmrk))
|
||||
- make serialization locale-independent [\#232](https://github.com/nlohmann/json/pull/232) ([nlohmann](https://github.com/nlohmann))
|
||||
- fixes \#223 by updating README.md [\#227](https://github.com/nlohmann/json/pull/227) ([kevin--](https://github.com/kevin--))
|
||||
- Use namespace std for int64\_t and uint64\_t [\#226](https://github.com/nlohmann/json/pull/226) ([lv-zheng](https://github.com/lv-zheng))
|
||||
|
|
34
doc/examples/json_pointer__to_string.cpp
Normal file
34
doc/examples/json_pointer__to_string.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
#include <json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// different JSON Pointers
|
||||
json::json_pointer ptr1("");
|
||||
json::json_pointer ptr2("/foo");
|
||||
json::json_pointer ptr3("/foo/0");
|
||||
json::json_pointer ptr4("/");
|
||||
json::json_pointer ptr5("/a~1b");
|
||||
json::json_pointer ptr6("/c%d");
|
||||
json::json_pointer ptr7("/e^f");
|
||||
json::json_pointer ptr8("/g|h");
|
||||
json::json_pointer ptr9("/i\\j");
|
||||
json::json_pointer ptr10("/k\"l");
|
||||
json::json_pointer ptr11("/ ");
|
||||
json::json_pointer ptr12("/m~0n");
|
||||
|
||||
|
||||
std::cout << ptr1.to_string() << '\n'
|
||||
<< ptr2.to_string() << '\n'
|
||||
<< ptr3.to_string() << '\n'
|
||||
<< ptr4.to_string() << '\n'
|
||||
<< ptr5.to_string() << '\n'
|
||||
<< ptr6.to_string() << '\n'
|
||||
<< ptr7.to_string() << '\n'
|
||||
<< ptr8.to_string() << '\n'
|
||||
<< ptr9.to_string() << '\n'
|
||||
<< ptr10.to_string() << '\n'
|
||||
<< ptr11.to_string() << '\n'
|
||||
<< ptr12.to_string() << std::endl;
|
||||
}
|
1
doc/examples/json_pointer__to_string.link
Normal file
1
doc/examples/json_pointer__to_string.link
Normal file
|
@ -0,0 +1 @@
|
|||
<a target="_blank" href="http://melpon.org/wandbox/permlink/O4FbKx0TbZioFhfU"><b>online</b></a>
|
12
doc/examples/json_pointer__to_string.output
Normal file
12
doc/examples/json_pointer__to_string.output
Normal file
|
@ -0,0 +1,12 @@
|
|||
|
||||
/foo
|
||||
/foo/0
|
||||
/
|
||||
/a~1b
|
||||
/c%d
|
||||
/e^f
|
||||
/g|h
|
||||
/i\j
|
||||
/k"l
|
||||
/
|
||||
/m~0n
|
37
src/json.hpp
37
src/json.hpp
|
@ -8818,6 +8818,10 @@ basic_json_parser_63:
|
|||
/*!
|
||||
@brief JSON Pointer
|
||||
|
||||
A JSON pointer defines a string syntax for identifying a specific value
|
||||
within a JSON document. It can be used with functions `at` and
|
||||
`operator[]`. Furthermore, JSON pointers are the base for JSON patches.
|
||||
|
||||
@sa [RFC 6901](https://tools.ietf.org/html/rfc6901)
|
||||
|
||||
@since version 2.0.0
|
||||
|
@ -8854,10 +8858,37 @@ basic_json_parser_63:
|
|||
: reference_tokens(split(s))
|
||||
{}
|
||||
|
||||
/// test for inequality
|
||||
bool operator!=(const json_pointer& rhs) const
|
||||
/*!
|
||||
@brief return a string representation of the JSON pointer
|
||||
|
||||
@invariant For each JSON pointer `ptr`, it holds:
|
||||
@code {.cpp}
|
||||
ptr == json_pointer(ptr.to_string());
|
||||
@endcode
|
||||
|
||||
@return a string representation of the JSON pointer
|
||||
|
||||
@liveexample{The example shows the result of `to_string`.,
|
||||
json_pointer__to_string}
|
||||
|
||||
@since version 2.0.0
|
||||
*/
|
||||
std::string to_string() const noexcept
|
||||
{
|
||||
return reference_tokens != rhs.reference_tokens;
|
||||
std::string result;
|
||||
|
||||
for (const auto& reference_token : reference_tokens)
|
||||
{
|
||||
result += "/" + escape(reference_token);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// @copydoc to_string()
|
||||
operator std::string() const
|
||||
{
|
||||
return to_string();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -8128,6 +8128,10 @@ class basic_json
|
|||
/*!
|
||||
@brief JSON Pointer
|
||||
|
||||
A JSON pointer defines a string syntax for identifying a specific value
|
||||
within a JSON document. It can be used with functions `at` and
|
||||
`operator[]`. Furthermore, JSON pointers are the base for JSON patches.
|
||||
|
||||
@sa [RFC 6901](https://tools.ietf.org/html/rfc6901)
|
||||
|
||||
@since version 2.0.0
|
||||
|
@ -8164,10 +8168,37 @@ class basic_json
|
|||
: reference_tokens(split(s))
|
||||
{}
|
||||
|
||||
/// test for inequality
|
||||
bool operator!=(const json_pointer& rhs) const
|
||||
/*!
|
||||
@brief return a string representation of the JSON pointer
|
||||
|
||||
@invariant For each JSON pointer `ptr`, it holds:
|
||||
@code {.cpp}
|
||||
ptr == json_pointer(ptr.to_string());
|
||||
@endcode
|
||||
|
||||
@return a string representation of the JSON pointer
|
||||
|
||||
@liveexample{The example shows the result of `to_string`.,
|
||||
json_pointer__to_string}
|
||||
|
||||
@since version 2.0.0
|
||||
*/
|
||||
std::string to_string() const noexcept
|
||||
{
|
||||
return reference_tokens != rhs.reference_tokens;
|
||||
std::string result;
|
||||
|
||||
for (const auto& reference_token : reference_tokens)
|
||||
{
|
||||
result += "/" + escape(reference_token);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// @copydoc to_string()
|
||||
operator std::string() const
|
||||
{
|
||||
return to_string();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -12035,6 +12035,36 @@ TEST_CASE("Unicode", "[hide]")
|
|||
|
||||
// the array has 1112064 + 1 elemnts (a terminating "null" value)
|
||||
CHECK(j.size() == 1112065);
|
||||
|
||||
SECTION("check JSON Pointers")
|
||||
{
|
||||
for (auto s : j)
|
||||
{
|
||||
// skip non-string JSON values
|
||||
if (not s.is_string())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
std::string ptr = s;
|
||||
|
||||
// tilde must be followed by 0 or 1
|
||||
if (ptr == "~")
|
||||
{
|
||||
ptr += "0";
|
||||
}
|
||||
|
||||
// JSON Pointers must begin with "/"
|
||||
ptr = "/" + ptr;
|
||||
|
||||
CHECK_NOTHROW(json::json_pointer("/" + ptr));
|
||||
|
||||
// check escape/unescape roundtrip
|
||||
auto escaped = json::json_pointer::escape(ptr);
|
||||
json::json_pointer::unescape(escaped);
|
||||
CHECK(escaped == ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("ignore byte-order-mark")
|
||||
|
@ -12389,6 +12419,17 @@ TEST_CASE("JSON pointers")
|
|||
json j_object(json::value_t::object);
|
||||
CHECK(j_object.flatten().unflatten() == json());
|
||||
}
|
||||
|
||||
SECTION("string representation")
|
||||
{
|
||||
for (auto ptr :
|
||||
{"", "/foo", "/foo/0", "/", "/a~1b", "/c%d", "/e^f", "/g|h", "/i\\j", "/k\"l", "/ ", "/m~0n"
|
||||
})
|
||||
{
|
||||
CHECK(json::json_pointer(ptr).to_string() == ptr);
|
||||
CHECK(json::json_pointer(ptr) == ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("JSON patch")
|
||||
|
|
Loading…
Reference in a new issue