mirror of https://github.com/Icinga/icinga2.git
Test Json{En,De}code()
This commit is contained in:
parent
2a05b46431
commit
c4333b49f5
|
@ -69,6 +69,8 @@ add_boost_test(base
|
|||
base_dictionary/json
|
||||
base_fifo/construct
|
||||
base_fifo/io
|
||||
base_json/encode
|
||||
base_json/decode
|
||||
base_json/invalid1
|
||||
base_object_packer/pack_null
|
||||
base_object_packer/pack_false
|
||||
|
|
|
@ -1,14 +1,98 @@
|
|||
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
|
||||
|
||||
#include "base/dictionary.hpp"
|
||||
#include "base/namespace.hpp"
|
||||
#include "base/objectlock.hpp"
|
||||
#include "base/json.hpp"
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
#include <BoostTestTargetConfig.h>
|
||||
|
||||
using namespace icinga;
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(base_json)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(encode)
|
||||
{
|
||||
Dictionary::Ptr input (new Dictionary({
|
||||
{ "array", new Array({ new Namespace() }) },
|
||||
{ "false", false },
|
||||
{ "float", -1.25 },
|
||||
{ "int", -42 },
|
||||
{ "null", Value() },
|
||||
{ "string", "LF\nTAB\tAUml\xC3\xA4Ill\xC3" },
|
||||
{ "true", true },
|
||||
{ "uint", 23u }
|
||||
}));
|
||||
|
||||
String output (R"EOF({
|
||||
"array": [
|
||||
{}
|
||||
],
|
||||
"false": false,
|
||||
"float": -1.25,
|
||||
"int": -42.0,
|
||||
"null": null,
|
||||
"string": "LF\nTAB\tAUml\u00e4Ill\ufffd",
|
||||
"true": true,
|
||||
"uint": 23.0
|
||||
})EOF");
|
||||
|
||||
BOOST_CHECK(JsonEncode(input, true) == output);
|
||||
|
||||
boost::algorithm::replace_all(output, " ", "");
|
||||
boost::algorithm::replace_all(output, "\n", "");
|
||||
|
||||
BOOST_CHECK(JsonEncode(input, false) == output);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(decode)
|
||||
{
|
||||
String input (R"EOF({
|
||||
"array": [
|
||||
{}
|
||||
],
|
||||
"false": false,
|
||||
"float": -1.25,
|
||||
"int": -42.0,
|
||||
"null": null,
|
||||
"string": "LF\nTAB\tAUmlIll",
|
||||
"true": true,
|
||||
"uint": 23.0
|
||||
})EOF");
|
||||
|
||||
boost::algorithm::replace_all(input, "AUml", "AUml\xC3\xA4");
|
||||
boost::algorithm::replace_all(input, "Ill", "Ill\xC3");
|
||||
|
||||
auto output ((Dictionary::Ptr)JsonDecode(input));
|
||||
BOOST_CHECK(output->GetKeys() == std::vector<String>({"array", "false", "float", "int", "null", "string", "true", "uint"}));
|
||||
|
||||
auto array ((Array::Ptr)output->Get("array"));
|
||||
BOOST_CHECK(array->GetLength() == 1u);
|
||||
|
||||
auto array0 ((Dictionary::Ptr)array->Get(0));
|
||||
BOOST_CHECK(array0->GetKeys() == std::vector<String>());
|
||||
|
||||
auto fAlse (output->Get("false"));
|
||||
BOOST_CHECK(fAlse.IsBoolean() && !fAlse.ToBool());
|
||||
|
||||
auto fLoat (output->Get("float"));
|
||||
BOOST_CHECK(fLoat.IsNumber() && fLoat.Get<double>() == -1.25);
|
||||
|
||||
auto iNt (output->Get("int"));
|
||||
BOOST_CHECK(iNt.IsNumber() && iNt.Get<double>() == -42.0);
|
||||
|
||||
BOOST_CHECK(output->Get("null").IsEmpty());
|
||||
|
||||
auto string (output->Get("string"));
|
||||
BOOST_CHECK(string.IsString() && string.Get<String>() == "LF\nTAB\tAUml\xC3\xA4Ill\xEF\xBF\xBD");
|
||||
|
||||
auto tRue (output->Get("true"));
|
||||
BOOST_CHECK(tRue.IsBoolean() && tRue.ToBool());
|
||||
|
||||
auto uint (output->Get("uint"));
|
||||
BOOST_CHECK(uint.IsNumber() && uint.Get<double>() == 23.0);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(invalid1)
|
||||
{
|
||||
BOOST_CHECK_THROW(JsonDecode("\"1.7"), std::exception);
|
||||
|
|
Loading…
Reference in New Issue