writertest.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "unittest.h"
  2. #include "rapidjson/reader.h"
  3. #include "rapidjson/writer.h"
  4. #include "rapidjson/stringbuffer.h"
  5. using namespace rapidjson;
  6. TEST(Writer, Compact) {
  7. StringStream s("{ \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3] } ");
  8. StringBuffer buffer;
  9. Writer<StringBuffer> writer(buffer);
  10. Reader reader;
  11. reader.Parse<0>(s, writer);
  12. EXPECT_STREQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3]}", buffer.GetString());
  13. EXPECT_EQ(77u, buffer.GetSize());
  14. }
  15. // json -> parse -> writer -> json
  16. #define TEST_ROUNDTRIP(json) \
  17. { \
  18. StringStream s(json); \
  19. StringBuffer buffer; \
  20. Writer<StringBuffer> writer(buffer); \
  21. Reader reader; \
  22. reader.Parse<0>(s, writer); \
  23. EXPECT_STREQ(json, buffer.GetString()); \
  24. }
  25. TEST(Writer, Int) {
  26. TEST_ROUNDTRIP("[-1]");
  27. TEST_ROUNDTRIP("[-123]");
  28. TEST_ROUNDTRIP("[-2147483648]");
  29. }
  30. TEST(Writer, UInt) {
  31. TEST_ROUNDTRIP("[0]");
  32. TEST_ROUNDTRIP("[1]");
  33. TEST_ROUNDTRIP("[123]");
  34. TEST_ROUNDTRIP("[2147483647]");
  35. TEST_ROUNDTRIP("[4294967295]");
  36. }
  37. TEST(Writer, Int64) {
  38. TEST_ROUNDTRIP("[-1234567890123456789]");
  39. TEST_ROUNDTRIP("[-9223372036854775808]");
  40. }
  41. TEST(Writer, Uint64) {
  42. TEST_ROUNDTRIP("[1234567890123456789]");
  43. TEST_ROUNDTRIP("[9223372036854775807]");
  44. }
  45. TEST(Writer, String) {
  46. TEST_ROUNDTRIP("[\"Hello\"]");
  47. TEST_ROUNDTRIP("[\"Hello\\u0000World\"]");
  48. TEST_ROUNDTRIP("[\"\\\"\\\\/\\b\\f\\n\\r\\t\"]");
  49. }
  50. TEST(Writer, Transcode) {
  51. // UTF8 -> UTF16 -> UTF8
  52. StringStream s("{ \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3], \"dollar\":\"\x24\", \"cents\":\"\xC2\xA2\", \"euro\":\"\xE2\x82\xAC\", \"gclef\":\"\xF0\x9D\x84\x9E\" } ");
  53. StringBuffer buffer;
  54. Writer<StringBuffer, UTF16<>, UTF8<> > writer(buffer);
  55. GenericReader<UTF8<>, UTF16<> > reader;
  56. reader.Parse<0>(s, writer);
  57. EXPECT_STREQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3],\"dollar\":\"\x24\",\"cents\":\"\xC2\xA2\",\"euro\":\"\xE2\x82\xAC\",\"gclef\":\"\xF0\x9D\x84\x9E\"}", buffer.GetString());
  58. }