summaryrefslogtreecommitdiff
path: root/test/libapt
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2021-04-21 12:17:55 +0200
committerJulian Andres Klode <julian.klode@canonical.com>2021-04-23 12:25:40 +0200
commit09e3c0c855e339216784a1d43715c3ae2d79ec23 (patch)
treeeae37641a9cc6d7416dc5fb7bdd06a5851e0c48a /test/libapt
parent57b727af4e1eea4ea118ca5e5028fa7ce86fb538 (diff)
json: Actually pop states
The JSON encoder only looked at the top state, but did not pop it, so if we nested objects, we got stuck in whatever the last state we pushed aside was, so in our example, we wrongly get a comma inserted _after_ key "b": {"a":[{}], "b":,[{}] }
Diffstat (limited to 'test/libapt')
-rw-r--r--test/libapt/json_test.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/libapt/json_test.cc b/test/libapt/json_test.cc
index e3317afc4..9c29936f6 100644
--- a/test/libapt/json_test.cc
+++ b/test/libapt/json_test.cc
@@ -43,3 +43,19 @@ TEST(JsonTest, JsonArrayAndValues)
EXPECT_EQ("[0,\"value\",1,true]", os.str());
}
+TEST(JsonTest, JsonStackRegression)
+{
+ std::ostringstream os;
+
+ JsonWriter w(os);
+
+ // Nest those things deeply such that we transition states:
+ // object -> array -> object; -> array -> object
+ // Older versions never popped back and got stuck on array state.
+ w.beginObject();
+ w.name("a").beginArray().beginObject().endObject().endArray();
+ w.name("b").beginArray().beginObject().endObject().endArray();
+ w.endObject();
+
+ EXPECT_EQ("{\"a\":[{}],\"b\":[{}]}", os.str());
+}