diff options
author | Julian Andres Klode <julian.klode@canonical.com> | 2021-04-21 12:17:55 +0200 |
---|---|---|
committer | Julian Andres Klode <julian.klode@canonical.com> | 2021-04-23 12:25:40 +0200 |
commit | 09e3c0c855e339216784a1d43715c3ae2d79ec23 (patch) | |
tree | eae37641a9cc6d7416dc5fb7bdd06a5851e0c48a /test/libapt | |
parent | 57b727af4e1eea4ea118ca5e5028fa7ce86fb538 (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.cc | 16 |
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()); +} |