+ more test cases
This commit is contained in:
parent
88786c86bb
commit
2e26faf91c
1 changed files with 44 additions and 1 deletions
|
@ -11,11 +11,15 @@ TEST_CASE("array")
|
||||||
JSON j(JSON::value_type::array);
|
JSON j(JSON::value_type::array);
|
||||||
CHECK(j.type() == JSON::value_type::array);
|
CHECK(j.type() == JSON::value_type::array);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const (j);
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "[]");
|
CHECK(j.toString() == "[]");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(*(j.data().array) == JSON::array_t());
|
CHECK(*(j.data().array) == JSON::array_t());
|
||||||
|
//CHECK(*(j_const.data().array) == JSON::array_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 0);
|
CHECK(j.size() == 0);
|
||||||
|
@ -142,6 +146,7 @@ TEST_CASE("array")
|
||||||
|
|
||||||
// exceptions
|
// exceptions
|
||||||
JSON nonarray = 1;
|
JSON nonarray = 1;
|
||||||
|
CHECK_THROWS_AS(nonarray.at(0), std::domain_error);
|
||||||
CHECK_THROWS_AS(const int i = nonarray[0], std::domain_error);
|
CHECK_THROWS_AS(const int i = nonarray[0], std::domain_error);
|
||||||
CHECK_NOTHROW(j[21]);
|
CHECK_NOTHROW(j[21]);
|
||||||
CHECK_THROWS_AS(const int i = j.at(21), std::out_of_range);
|
CHECK_THROWS_AS(const int i = j.at(21), std::out_of_range);
|
||||||
|
@ -152,6 +157,7 @@ TEST_CASE("array")
|
||||||
|
|
||||||
const JSON nonarray_const = nonarray;
|
const JSON nonarray_const = nonarray;
|
||||||
const JSON j_const = j;
|
const JSON j_const = j;
|
||||||
|
CHECK_THROWS_AS(nonarray_const.at(0), std::domain_error);
|
||||||
CHECK_THROWS_AS(const int i = nonarray_const[0], std::domain_error);
|
CHECK_THROWS_AS(const int i = nonarray_const[0], std::domain_error);
|
||||||
CHECK_NOTHROW(j_const[21]);
|
CHECK_NOTHROW(j_const[21]);
|
||||||
CHECK_THROWS_AS(const int i = j.at(21), std::out_of_range);
|
CHECK_THROWS_AS(const int i = j.at(21), std::out_of_range);
|
||||||
|
@ -286,11 +292,15 @@ TEST_CASE("object")
|
||||||
JSON j(JSON::value_type::object);
|
JSON j(JSON::value_type::object);
|
||||||
CHECK(j.type() == JSON::value_type::object);
|
CHECK(j.type() == JSON::value_type::object);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const = j;
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "{}");
|
CHECK(j.toString() == "{}");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(*(j.data().object) == JSON::object_t());
|
CHECK(*(j.data().object) == JSON::object_t());
|
||||||
|
CHECK(*(j_const.data().object) == JSON::object_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 0);
|
CHECK(j.size() == 0);
|
||||||
|
@ -423,6 +433,13 @@ TEST_CASE("object")
|
||||||
CHECK_THROWS_AS(k.at(std::string("foo")), std::out_of_range);
|
CHECK_THROWS_AS(k.at(std::string("foo")), std::out_of_range);
|
||||||
CHECK_NOTHROW(j.at(std::string("k0")));
|
CHECK_NOTHROW(j.at(std::string("k0")));
|
||||||
CHECK_NOTHROW(k.at(std::string("k0")));
|
CHECK_NOTHROW(k.at(std::string("k0")));
|
||||||
|
{
|
||||||
|
JSON noobject = 1;
|
||||||
|
const JSON noobject_const = noobject;
|
||||||
|
CHECK_THROWS_AS(noobject["foo"], std::domain_error);
|
||||||
|
CHECK_THROWS_AS(noobject[std::string("foo")], std::domain_error);
|
||||||
|
CHECK_THROWS_AS(noobject_const[std::string("foo")], std::domain_error);
|
||||||
|
}
|
||||||
|
|
||||||
// add pair
|
// add pair
|
||||||
j.push_back(JSON::object_t::value_type {"int_key", 42});
|
j.push_back(JSON::object_t::value_type {"int_key", 42});
|
||||||
|
@ -709,11 +726,15 @@ TEST_CASE("string")
|
||||||
JSON j(JSON::value_type::string);
|
JSON j(JSON::value_type::string);
|
||||||
CHECK(j.type() == JSON::value_type::string);
|
CHECK(j.type() == JSON::value_type::string);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const = j;
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "\"\"");
|
CHECK(j.toString() == "\"\"");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(*(j.data().string) == JSON::string_t());
|
CHECK(*(j.data().string) == JSON::string_t());
|
||||||
|
CHECK(*(j_const.data().string) == JSON::string_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 1);
|
CHECK(j.size() == 1);
|
||||||
|
@ -787,11 +808,15 @@ TEST_CASE("boolean")
|
||||||
JSON j(JSON::value_type::boolean);
|
JSON j(JSON::value_type::boolean);
|
||||||
CHECK(j.type() == JSON::value_type::boolean);
|
CHECK(j.type() == JSON::value_type::boolean);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const = j;
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "false");
|
CHECK(j.toString() == "false");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(j.data().boolean == JSON::boolean_t());
|
CHECK(j.data().boolean == JSON::boolean_t());
|
||||||
|
CHECK(j_const.data().boolean == JSON::boolean_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 1);
|
CHECK(j.size() == 1);
|
||||||
|
@ -862,11 +887,15 @@ TEST_CASE("number (int)")
|
||||||
JSON j(JSON::value_type::number);
|
JSON j(JSON::value_type::number);
|
||||||
CHECK(j.type() == JSON::value_type::number);
|
CHECK(j.type() == JSON::value_type::number);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const = j;
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "0");
|
CHECK(j.toString() == "0");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(j.data().number == JSON::number_t());
|
CHECK(j.data().number == JSON::number_t());
|
||||||
|
CHECK(j_const.data().number == JSON::number_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 1);
|
CHECK(j.size() == 1);
|
||||||
|
@ -944,11 +973,15 @@ TEST_CASE("number (float)")
|
||||||
JSON j(JSON::value_type::number_float);
|
JSON j(JSON::value_type::number_float);
|
||||||
CHECK(j.type() == JSON::value_type::number_float);
|
CHECK(j.type() == JSON::value_type::number_float);
|
||||||
|
|
||||||
|
// const object
|
||||||
|
const JSON j_const = j;
|
||||||
|
|
||||||
// string representation of default value
|
// string representation of default value
|
||||||
CHECK(j.toString() == "0.000000");
|
CHECK(j.toString() == "0.000000");
|
||||||
|
|
||||||
// check payload
|
// check payload
|
||||||
CHECK(j.data().number_float == JSON::number_float_t());
|
CHECK(j.data().number_float == JSON::number_float_t());
|
||||||
|
CHECK(j_const.data().number_float == JSON::number_float_t());
|
||||||
|
|
||||||
// container members
|
// container members
|
||||||
CHECK(j.size() == 1);
|
CHECK(j.size() == 1);
|
||||||
|
@ -1142,7 +1175,17 @@ TEST_CASE("Parser")
|
||||||
SECTION("parse from C++ string")
|
SECTION("parse from C++ string")
|
||||||
{
|
{
|
||||||
std::string s = "{ \"foo\": [1,2,true] }";
|
std::string s = "{ \"foo\": [1,2,true] }";
|
||||||
CHECK_NOTHROW(JSON::parse(s));
|
JSON j = JSON::parse(s);
|
||||||
|
CHECK(j["foo"].size() == 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("parse from stream")
|
||||||
|
{
|
||||||
|
std::stringstream s;
|
||||||
|
s << "{ \"foo\": [1,2,true] }";
|
||||||
|
JSON j;
|
||||||
|
j << s;
|
||||||
|
CHECK(j["foo"].size() == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("user-defined string literal operator")
|
SECTION("user-defined string literal operator")
|
||||||
|
|
Loading…
Reference in a new issue