123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794 |
- #include "microjson.h"
- #include <iostream>
- #include <string.h>
- #include <gtest/gtest.h>
- class MicrojsonDeserializationTest : public ::testing::Test
- {
- public:
- MicrojsonDeserializationTest() = default;
- };
- TEST_F(MicrojsonDeserializationTest, StringValue)
- {
- const char *buffer1 = "{\"testField\":\"test\"}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "test");
- obj.clear();
- const char *buffer2 = "{\"testField\":\"\"}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "");
- obj.clear();
- const char *buffer3 = "{\"testField\":\"t\"}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "t");
- obj.clear();
- const char *buffer4 = "{\"testField\":\"\\\"test\\\"\"}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"test\\\"");
- obj.clear();
- const char *buffer5 = "{\"testField\":\"\\\"test\"}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"test");
- obj.clear();
- const char *buffer6 = "{\"testField\":\"\\\"\"}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"");
- obj.clear();
- const char *buffer7 = "{\"testField\":\"test\",\"testField1\":\"\",\"testField2\":\"t\",\"testField3\":\"\\\"test\\\"\",\"testField4\":\"\\\"test\",\"testField5\":\"\\\"\"}";
- size = strlen(buffer7);
- obj = microjson::parseJsonObject(buffer7, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "test");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "");
- it = obj.find("testField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField2");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "t");
- it = obj.find("testField3");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField3");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"test\\\"");
- it = obj.find("testField4");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField4");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"test");
- it = obj.find("testField5");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField5");
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"");
- }
- TEST_F(MicrojsonDeserializationTest, NumberValue)
- {
- const char *buffer1 = "{\"testField\":5}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "5");
- obj.clear();
- const char *buffer2 = "{\"testField\":56}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "56");
- obj.clear();
- const char *buffer3 = "{\"testField\":0}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "0");
- obj.clear();
- const char *buffer4 = "{\"testField\":-5}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-5");
- obj.clear();
- const char *buffer5 = "{\"testField\":-131}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-131");
- obj.clear();
- const char *buffer6 = "{\"testField\":5,\"testField1\":56,\"testField2\":0,\"testField3\":-8,\"testField4\":-124}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "5");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "56");
- it = obj.find("testField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField2");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "0");
- it = obj.find("testField3");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField3");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-8");
- it = obj.find("testField4");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField4");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-124");
- }
- TEST_F(MicrojsonDeserializationTest, TextSpacesCutting)
- {
- const char *buffer1 = "\n\r\t {\n\r\t \"testField\"\n\r\t : 5\n\t \r}\n\t \r";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "5");
- const char *buffer2 = "\n\r\t {\n\r\t \"testField\"\n\r\t : 5\n\t \r, \n\r\t \"testField2\"\n\r\t : -0.932e+10\n\t \r}\n\t \r";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "5");
- it = obj.find("testField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-0.932e+10");
- const char *buffer3 = "\n\r\t {\n\r\t \"testField\"\n\r\t : \"5\"\n\t \r, \n\r\t \"test\n\rField2\"\n\r\t : \"\\\"qwerty\t\t\t\t\"\n\t \r}\n\t \r";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "5");
- it = obj.find("test\n\rField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonStringType);
- EXPECT_STREQ(it->second.value.c_str(), "\\\"qwerty\t\t\t\t");
- }
- TEST_F(MicrojsonDeserializationTest, BooleanValue)
- {
- const char *buffer1 = "{\"testField\":true}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonBoolType);
- EXPECT_STREQ(it->second.value.c_str(), "true");
- obj.clear();
- const char *buffer2 = "{\"testField\":false}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonBoolType);
- EXPECT_STREQ(it->second.value.c_str(), "false");
- obj.clear();
- const char *buffer7 = "{\"testField\":true,\"testField1\":false}";
- size = strlen(buffer7);
- obj = microjson::parseJsonObject(buffer7, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonBoolType);
- EXPECT_STREQ(it->second.value.c_str(), "true");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonBoolType);
- EXPECT_STREQ(it->second.value.c_str(), "false");
- }
- TEST_F(MicrojsonDeserializationTest, FloatingPointValue)
- {
- const char *buffer1 = "{\"testField\":0.0}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "0.0");
- obj.clear();
- const char *buffer2 = "{\"testField\":1.0}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.0");
- obj.clear();
- const char *buffer3 = "{\"testField\":20.0}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "20.0");
- obj.clear();
- const char *buffer4 = "{\"testField\":20.01}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "20.01");
- obj.clear();
- const char *buffer5 = "{\"testField\":-1.0}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.0");
- obj.clear();
- const char *buffer6 = "{\"testField\":-87.0}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-87.0");
- obj.clear();
- const char *buffer7 = "{\"testField\":-11.21}";
- size = strlen(buffer7);
- obj = microjson::parseJsonObject(buffer7, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-11.21");
- obj.clear();
- const char *buffer8 = "{\"testField\":1.1234+e10}";
- size = strlen(buffer8);
- obj = microjson::parseJsonObject(buffer8, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.1234+e10");
- obj.clear();
- const char *buffer9 = "{\"testField\":1.1234-e10}";
- size = strlen(buffer9);
- obj = microjson::parseJsonObject(buffer9, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.1234-e10");
- obj.clear();
- const char *buffer10 = "{\"testField\":-1.1234-e10}";
- size = strlen(buffer10);
- obj = microjson::parseJsonObject(buffer10, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.1234-e10");
- obj.clear();
- const char *buffer11 = "{\"testField\":-1.1234+e10}";
- size = strlen(buffer11);
- obj = microjson::parseJsonObject(buffer11, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.1234+e10");
- obj.clear();
- const char *buffer12 = "{\"testField\":0.0,\"testField1\":1.0,\"testField2\":20.0,\"testField3\":20.01,\"testField4\":-1.0,\"testField5\":-87.0,\"testField6\":-11.21,\"testField7\":1.1234+e10,\"testField8\":1.1234-e10,\"testField9\":-1.1234-e10,\"testField10\":-1.1234+e10}";
- size = strlen(buffer12);
- obj = microjson::parseJsonObject(buffer12, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "0.0");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.0");
- it = obj.find("testField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField2");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "20.0");
- it = obj.find("testField3");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField3");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "20.01");
- it = obj.find("testField4");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField4");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.0");
- it = obj.find("testField5");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField5");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-87.0");
- it = obj.find("testField6");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField6");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-11.21");
- it = obj.find("testField7");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField7");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.1234+e10");
- it = obj.find("testField8");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField8");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "1.1234-e10");
- it = obj.find("testField9");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField9");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.1234-e10");
- it = obj.find("testField10");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField10");
- EXPECT_EQ(it->second.type, microjson::JsonNumberType);
- EXPECT_STREQ(it->second.value.c_str(), "-1.1234+e10");
- }
- TEST_F(MicrojsonDeserializationTest, ArrayValue)
- {
- const char *buffer1 = "{\"testField\":[\"test1\"]}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\"]");
- obj.clear();
- const char *buffer2 = "{\"testField\":[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]");
- obj.clear();
- const char *buffer3 = "{\"testField\":[],\"testField1\":[\"test1\",\"test2\"]}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[]");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
- obj.clear();
- const char *buffer4 = "{\"testField\":[1,1.0,-10,\"test1\",{\"test2\":15}]}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[1,1.0,-10,\"test1\",{\"test2\":15}]");
- obj.clear();
- const char *buffer5 = "{\"testField\":[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]]}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]]");
- obj.clear();
- const char *buffer6 = "{\"testField\":[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]");
- const char *buffer7 = "{\"testField\":[\"test1\"],\"testField1\":[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"],\"testField2\":[],\"testField3\":[\"test1\",\"test2\"],\"testField4\":[1,1.0,-10,\"test1\",{\"test2\":15}],\"testField5\":[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]],\"testField6\":[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]}";
- size = strlen(buffer7);
- obj = microjson::parseJsonObject(buffer7, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\"]");
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField1");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]");
- it = obj.find("testField2");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField2");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[]");
- it = obj.find("testField3");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField3");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
- it = obj.find("testField4");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField4");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[1,1.0,-10,\"test1\",{\"test2\":15}]");
- it = obj.find("testField5");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField5");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]]");
- it = obj.find("testField6");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField6");
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]");
- }
- TEST_F(MicrojsonDeserializationTest, ObjectValue)
- {
- const char *buffer1 = "{\"testField\":{\"testField1\":1}}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField1\":1}");
- const char *buffer2 = "{\"testField\":{\"testField1\":1,\"testField2\":2}}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField1\":1,\"testField2\":2}");
- const char *buffer3 = "{\"testField\":{\"testField1\":1.0,\"testField2\":\"2\"}}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField1\":1.0,\"testField2\":\"2\"}");
- const char *buffer4 = "{\"testField\":{}}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{}");
- const char *buffer5 = "{\"testField\":{\"testField1\":{},\"testField2\":{\"testField3\":\"2\"}}}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField1\":{},\"testField2\":{\"testField3\":\"2\"}}");
- const char *buffer6 = "{\"testField\":{\"testField1\":{},\"testField2\":{\"testField3\":[\"2\",0,1,2,{\"testField4\":9}]}}}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("testField");
- ASSERT_TRUE(it != obj.end());
- EXPECT_STREQ(it->first.c_str(), "testField");
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField1\":{},\"testField2\":{\"testField3\":[\"2\",0,1,2,{\"testField4\":9}]}}");
- }
- TEST_F(MicrojsonDeserializationTest, ArrayValues)
- {
- const char *buffer1 = "[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]";
- size_t size = strlen(buffer1);
- microjson::JsonArray arr = microjson::parseJsonArray(buffer1, size);
- ASSERT_EQ(arr.size(), 5);
- EXPECT_STREQ(arr[0].value.c_str(), "test1");
- EXPECT_STREQ(arr[1].value.c_str(), "test2");
- EXPECT_STREQ(arr[2].value.c_str(), "test3");
- EXPECT_STREQ(arr[3].value.c_str(), "test5");
- EXPECT_STREQ(arr[4].value.c_str(), "test6");
- const char *buffer2 = "[\"test1\"]";
- size = strlen(buffer2);
- arr = microjson::parseJsonArray(buffer2, size);
- ASSERT_EQ(arr.size(), 1);
- EXPECT_STREQ(arr[0].value.c_str(), "test1");
- const char *buffer3 = "[]";
- size = strlen(buffer3);
- arr = microjson::parseJsonArray(buffer3, size);
- ASSERT_EQ(arr.size(), 0);
- const char *buffer4 = "[[\"test1\"]]";
- size = strlen(buffer4);
- arr = microjson::parseJsonArray(buffer4, size);
- ASSERT_EQ(arr.size(), 1);
- EXPECT_STREQ(arr[0].value.c_str(), "[\"test1\"]");
- const char *buffer5 = "[[],[],[]]";
- size = strlen(buffer5);
- arr = microjson::parseJsonArray(buffer5, size);
- ASSERT_EQ(arr.size(), 3);
- EXPECT_STREQ(arr[0].value.c_str(), "[]");
- EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
- EXPECT_STREQ(arr[1].value.c_str(), "[]");
- EXPECT_EQ(arr[1].type, microjson::JsonArrayType);
- EXPECT_STREQ(arr[2].value.c_str(), "[]");
- EXPECT_EQ(arr[2].type, microjson::JsonArrayType);
- const char *buffer6 = "[[],\"\",0,0.0,false]";
- size = strlen(buffer6);
- arr = microjson::parseJsonArray(buffer6, size);
- ASSERT_EQ(arr.size(), 5);
- EXPECT_STREQ(arr[0].value.c_str(), "[]");
- EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
- EXPECT_STREQ(arr[1].value.c_str(), "");
- EXPECT_EQ(arr[1].type, microjson::JsonStringType);
- EXPECT_STREQ(arr[2].value.c_str(), "0");
- EXPECT_EQ(arr[2].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[3].value.c_str(), "0.0");
- EXPECT_EQ(arr[3].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[4].value.c_str(), "false");
- EXPECT_EQ(arr[4].type, microjson::JsonBoolType);
- const char *buffer7 = "[[[1111,2222,3333],[4444,5555,6666]],\"testString\",787,-123,0.0,0.99,1.0,1.2345+e10,false,[false,true],{\"testField1\":[\"testArrayValue1\", 2, 3, 4],\"testField2\":0.1212+e14}]";
- size = strlen(buffer7);
- arr = microjson::parseJsonArray(buffer7, size);
- ASSERT_EQ(arr.size(), 11);
- EXPECT_STREQ(arr[0].value.c_str(), "[[1111,2222,3333],[4444,5555,6666]]");
- EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
- EXPECT_STREQ(arr[1].value.c_str(), "testString");
- EXPECT_EQ(arr[1].type, microjson::JsonStringType);
- EXPECT_STREQ(arr[2].value.c_str(), "787");
- EXPECT_EQ(arr[2].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[3].value.c_str(), "-123");
- EXPECT_EQ(arr[3].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[4].value.c_str(), "0.0");
- EXPECT_EQ(arr[4].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[5].value.c_str(), "0.99");
- EXPECT_EQ(arr[5].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[6].value.c_str(), "1.0");
- EXPECT_EQ(arr[6].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[7].value.c_str(), "1.2345+e10");
- EXPECT_EQ(arr[7].type, microjson::JsonNumberType);
- EXPECT_STREQ(arr[8].value.c_str(), "false");
- EXPECT_EQ(arr[8].type, microjson::JsonBoolType);
- EXPECT_STREQ(arr[9].value.c_str(), "[false,true]");
- EXPECT_EQ(arr[9].type, microjson::JsonArrayType);
- EXPECT_STREQ(arr[10].value.c_str(), "{\"testField1\":[\"testArrayValue1\", 2, 3, 4],\"testField2\":0.1212+e14}");
- EXPECT_EQ(arr[10].type, microjson::JsonObjectType);
- }
- TEST_F(MicrojsonDeserializationTest, PropertyName) {
- const char *buffer1 = "{\"testField1\":\"test2\"}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- obj.clear();
- const char *buffer2 = "{\"t\":\"test2\"}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("t");
- ASSERT_TRUE(it != obj.end());
- obj.clear();
- const char *buffer3 = "{\"\":\"test2\"}";
- size = strlen(buffer3);
- obj = microjson::parseJsonObject(buffer3, size);
- ASSERT_EQ(obj.size(), 0);
- obj.clear();
- const char *buffer4 = "{\"\\\"\":\"test2\"}";
- size = strlen(buffer4);
- obj = microjson::parseJsonObject(buffer4, size);
- it = obj.find("\\\"");
- ASSERT_TRUE(it != obj.end());
- obj.clear();
- const char *buffer5 = "{\"testField1{\":{\"testField2\":\"test2\"}}";
- size = strlen(buffer5);
- obj = microjson::parseJsonObject(buffer5, size);
- it = obj.find("testField1{");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField2\":\"test2\"}");
- obj.clear();
- const char *buffer6 = "{\"test}Field1}\":{\"testField2\":\"test2\"}}";
- size = strlen(buffer6);
- obj = microjson::parseJsonObject(buffer6, size);
- it = obj.find("test}Field1}");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"testField2\":\"test2\"}");
- obj.clear();
- const char *buffer7 = "{\"test[Fiel[d1}\":[\"test1\",\"test2\"]}";
- size = strlen(buffer7);
- obj = microjson::parseJsonObject(buffer7, size);
- it = obj.find("test[Fiel[d1}");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
- obj.clear();
- const char *buffer8 = "{\"test]Fiel]d1}\":[\"test1\",\"test2\"]}";
- size = strlen(buffer8);
- obj = microjson::parseJsonObject(buffer8, size);
- it = obj.find("test]Fiel]d1}");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
- }
- TEST_F(MicrojsonDeserializationTest, MixedStringValue) {
- const char *buffer1 = "{\"testField1\":[\"[[test2\",\"[test2\"]}";
- size_t size = strlen(buffer1);
- microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
- auto it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonArrayType);
- EXPECT_STREQ(it->second.value.c_str(), "[\"[[test2\",\"[test2\"]");
- const char *buffer2 = "{\"testField1\":{\"test]Fiel]d1}\":[\"[[test2\",\"}test{{2\"]}}";
- size = strlen(buffer2);
- obj = microjson::parseJsonObject(buffer2, size);
- it = obj.find("testField1");
- ASSERT_TRUE(it != obj.end());
- EXPECT_EQ(it->second.type, microjson::JsonObjectType);
- EXPECT_STREQ(it->second.value.c_str(), "{\"test]Fiel]d1}\":[\"[[test2\",\"}test{{2\"]}");
- }
|