From e2035df9570cc48c4686f064265e979d5851165b Mon Sep 17 00:00:00 2001
From: Niels <niels.lohmann@gmail.com>
Date: Sat, 30 May 2015 16:47:20 +0200
Subject: [PATCH] added unit test for issue #76

---
 test/unit.cpp | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/test/unit.cpp b/test/unit.cpp
index d304934c..6e5e468e 100644
--- a/test/unit.cpp
+++ b/test/unit.cpp
@@ -8747,4 +8747,36 @@ TEST_CASE("regression tests")
             {"game_type", t}
         }));
     }
+
+    SECTION("issue #76 - dump() / parse() not idempotent")
+    {
+        // create JSON object
+        json fields;
+        fields["one"] = std::string("one");
+        fields["two"] = std::string("two three");
+        fields["three"] = std::string("three \"four\"");
+
+        // create another JSON object by deserializing the serialization
+        std::string payload = fields.dump();
+        json parsed_fields = json::parse(payload);
+
+        // check individual fields to match both objects
+        CHECK(parsed_fields["one"] == fields["one"]);
+        CHECK(parsed_fields["two"] == fields["two"]);
+        CHECK(parsed_fields["three"] == fields["three"]);
+
+        // check individual fields to match original input
+        CHECK(parsed_fields["one"] == std::string("one"));
+        CHECK(parsed_fields["two"] == std::string("two three"));
+        CHECK(parsed_fields["three"] == std::string("three \"four\""));
+
+        // check equality of the objects
+        CHECK(parsed_fields == fields);
+
+        // check equality of the serialized objects
+        CHECK(fields.dump() == parsed_fields.dump());
+
+        // check everything in one line
+        CHECK(fields == json::parse(fields.dump()));
+    }
 }