Skip to content

Commit 8a8d338

Browse files
committed
Merge fix for JSON sorting bug
1 parent 9b05d1a commit 8a8d338

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

Release/src/json/json_parsing.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -952,9 +952,9 @@ std::unique_ptr<web::json::details::_Object> JSON_Parser<CharType>::_ParseObject
952952
auto fieldValue = _ParseValue(tkn);
953953
auto type = fieldValue->type();
954954

955-
elems.emplace_back(utility::conversions::to_string_t(fieldName), json::value(std::move(fieldValue), type));
955+
elems.emplace_back(utility::conversions::to_string_t(std::move(fieldName)), json::value(std::move(fieldValue), type));
956956
#else
957-
elems.emplace_back(utility::conversions::to_string_t(fieldName), json::value(_ParseValue(tkn)));
957+
elems.emplace_back(utility::conversions::to_string_t(std::move(fieldName)), json::value(_ParseValue(tkn)));
958958
#endif
959959

960960
// State 4: Looking for a comma or a closing brace

Release/tests/Functional/http/client/outside_tests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ TEST_FIXTURE(uri_address, outside_ssl_json,
115115
playlistClient.request(methods::GET).then([=](http_response playlistResponse) -> pplx::task<json::value>
116116
{
117117
return playlistResponse.extract_json();
118-
}).then([=](json::value jsonArray)
118+
}).then([=](json::value v)
119119
{
120120
int count = 0;
121-
json::object& obj = jsonArray.as_object();
121+
auto& obj = v.as_object();
122122

123123
VERIFY_ARE_NOT_EQUAL(obj.find(U("pageInfo")), obj.end());
124124
VERIFY_ARE_NOT_EQUAL(obj.find(U("items")), obj.end());

Release/tests/Functional/json/parsing_tests.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,13 @@ TEST(deeply_nested)
498498
VERIFY_PARSING_THROW(json::value::parse(strBad));
499499
}
500500

501-
TEST(parse_object)
501+
static bool compare_pairs(const std::pair<utility::string_t, json::value>& p1,
502+
const std::pair<utility::string_t, json::value>& p2)
503+
{
504+
return p1.first < p2.first;
505+
}
506+
507+
TEST(unsorted_object_parsing)
502508
{
503509
utility::stringstream_t ss;
504510
ss << U("{\"z\":2, \"a\":1}");
@@ -507,9 +513,11 @@ TEST(parse_object)
507513

508514
VERIFY_ARE_NOT_EQUAL(obj.find(U("a")), obj.end());
509515
VERIFY_ARE_NOT_EQUAL(obj.find(U("z")), obj.end());
510-
VERIFY_ARE_EQUAL(obj["a"], 1);
511-
VERIFY_ARE_EQUAL(obj["z"], 2);
516+
VERIFY_ARE_EQUAL(obj[U("a")], 1);
517+
VERIFY_ARE_EQUAL(obj[U("z")], 2);
512518
VERIFY_ARE_EQUAL(obj.size(), 2);
519+
520+
VERIFY_IS_TRUE(::std::is_sorted(obj.begin(), obj.end(), compare_pairs));
513521
}
514522

515523
} // SUITE(parsing_tests)

0 commit comments

Comments
 (0)