Skip to content

Commit c537963

Browse files
committed
feat: add sort to url_search_params
1 parent c079ddb commit c537963

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

include/ada/url_search_params.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct url_search_params {
6060
/**
6161
* @see https://url.spec.whatwg.org/#dom-urlsearchparams-sort
6262
*/
63-
void sort() const noexcept;
63+
void sort();
6464

6565
/**
6666
* @see https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior

src/url_search_params.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "ada.h"
22
#include "ada/url_search_params.h"
33

4-
#include <optional>
4+
#include <algorithm>
55
#include <string>
66
#include <string_view>
77
#include <vector>
@@ -25,8 +25,12 @@ void url_search_params::remove(const std::string_view key,
2525
params.end());
2626
}
2727

28-
void url_search_params::sort() const noexcept {
29-
// TODO: Implement this
28+
void url_search_params::sort() {
29+
typedef std::pair<std::string, std::string> key_value_pair;
30+
std::stable_sort(params.begin(), params.end(),
31+
[](const key_value_pair &lhs, const key_value_pair &rhs) {
32+
return lhs.first < rhs.first;
33+
});
3034
}
3135

3236
void url_search_params::set(const std::string_view key,

tests/url_search_params.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,14 @@ TEST(url_search_params, remove) {
4545
ASSERT_EQ(search_params.to_string(), "key1=value1");
4646
SUCCEED();
4747
}
48+
49+
TEST(url_search_params, sort) {
50+
auto search_params = ada::url_search_params();
51+
search_params.append("bbb", "second");
52+
search_params.append("aaa", "first");
53+
search_params.append("ccc", "third");
54+
ASSERT_EQ(search_params.size(), 3);
55+
search_params.sort();
56+
ASSERT_EQ(search_params.to_string(), "aaa=first&bbb=second&ccc=third");
57+
SUCCEED();
58+
}

0 commit comments

Comments
 (0)