| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | #include "json.h"#include <cppunit/extensions/HelperMacros.h>#include "RecoverableException.h"#include "util.h"#include "array_fun.h"#include "base64.h"namespace aria2 {class JsonTest : public CppUnit::TestFixture {  CPPUNIT_TEST_SUITE(JsonTest);  CPPUNIT_TEST(testEncode);  CPPUNIT_TEST(testDecodeGetParams);  CPPUNIT_TEST_SUITE_END();private:public:  void testEncode();  void testDecodeGetParams();};CPPUNIT_TEST_SUITE_REGISTRATION(JsonTest);void JsonTest::testEncode(){  {    auto dict = Dict::g();    dict->put("name", String::g("aria2"));    dict->put("loc", Integer::g(80000));    auto files = List::g();    files->append(String::g("aria2c"));    dict->put("files", std::move(files));    auto attrs = Dict::g();    attrs->put("license", String::g("GPL"));    dict->put("attrs", std::move(attrs));    CPPUNIT_ASSERT_EQUAL(std::string("{\"attrs\":{\"license\":\"GPL\"},"                                     "\"files\":[\"aria2c\"],"                                     "\"loc\":80000,"                                     "\"name\":\"aria2\"}"),                         json::encode(dict.get()));  }  {    auto list = List::g();    list->append("\"\\/\b\f\n\r\t");    CPPUNIT_ASSERT_EQUAL(std::string("[\"\\\"\\\\\\/\\b\\f\\n\\r\\t\"]"),                         json::encode(list.get()));  }  {    auto list = List::g();    std::string s;    s += 0x1Fu;    list->append(s);    CPPUNIT_ASSERT_EQUAL(std::string("[\"\\u001F\"]"),                         json::encode(list.get()));  }  {    auto list = List::g();    list->append(Bool::gTrue());    list->append(Bool::gFalse());    list->append(Null::g());    CPPUNIT_ASSERT_EQUAL(std::string("[true,false,null]"),                         json::encode(list.get()));  }}void JsonTest::testDecodeGetParams(){  {    std::string s = "[1,2,3]";    std::string param = util::percentEncode(base64::encode(s.begin(), s.end()));    std::string query = "?params=";    query += param;    query += '&';    query += "method=sum&";    query += "id=300&";    query += "jsoncallback=cb";    json::JsonGetParam gparam = json::decodeGetParams(query);    CPPUNIT_ASSERT_EQUAL(std::string("{\"method\":\"sum\","                                     "\"id\":\"300\","                                     "\"params\":[1,2,3]}"),                         gparam.request);    CPPUNIT_ASSERT_EQUAL(std::string("cb"), gparam.callback);  }  {    std::string s = "[{}]";    std::string query = "?params=";    query += util::percentEncode(base64::encode(s.begin(), s.end()));    query += '&';    query += "jsoncallback=cb";    json::JsonGetParam gparam = json::decodeGetParams(query);    CPPUNIT_ASSERT_EQUAL(std::string("[{}]"), gparam.request);    CPPUNIT_ASSERT_EQUAL(std::string("cb"), gparam.callback);  }  {    std::string query = "?method=sum&id=300";    json::JsonGetParam gparam = json::decodeGetParams(query);    CPPUNIT_ASSERT_EQUAL(std::string("{\"method\":\"sum\","                                     "\"id\":\"300\"}"),                         gparam.request);    CPPUNIT_ASSERT_EQUAL(std::string(), gparam.callback);  }}} // namespace aria2
 |