Skip to content

Commit e595bff

Browse files
committed
Add unittest for URLEncode
1 parent 11baa5c commit e595bff

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

lldb/tools/lldb-dap/ClientLauncher.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ ClientLauncher::GetLauncher(ClientLauncher::Client client) {
2929
return nullptr;
3030
}
3131

32-
static std::string URLEncode(llvm::StringRef in) {
32+
std::string VSCodeLauncher::URLEncode(llvm::StringRef str) {
3333
std::string out;
3434
llvm::raw_string_ostream os(out);
35-
for (char c : in) {
35+
for (char c : str) {
3636
if (std::isalnum(c) || llvm::StringRef("-_.~").contains(c))
3737
os << c;
3838
else

lldb/tools/lldb-dap/ClientLauncher.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class VSCodeLauncher final : public ClientLauncher {
3333
using ClientLauncher::ClientLauncher;
3434

3535
llvm::Error Launch(const std::vector<llvm::StringRef> args) override;
36+
static std::string URLEncode(llvm::StringRef str);
3637
};
3738

3839
} // namespace lldb_dap

lldb/unittests/DAP/ClientLauncherTest.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,26 @@ TEST(ClientLauncherTest, GetClientFromEmptyString) {
4646
ClientLauncher::GetClientFrom("");
4747
EXPECT_FALSE(result.has_value());
4848
}
49+
50+
TEST(ClientLauncherTest, URLEncode) {
51+
EXPECT_EQ("", VSCodeLauncher::URLEncode(""));
52+
EXPECT_EQ(
53+
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~",
54+
VSCodeLauncher::URLEncode("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST"
55+
"UVWXYZ0123456789-_.~"));
56+
EXPECT_EQ("hello%20world", VSCodeLauncher::URLEncode("hello world"));
57+
EXPECT_EQ("hello%21%40%23%24", VSCodeLauncher::URLEncode("hello!@#$"));
58+
EXPECT_EQ("%2Fpath%2Fto%2Ffile", VSCodeLauncher::URLEncode("/path/to/file"));
59+
EXPECT_EQ("key%3Dvalue%26key2%3Dvalue2",
60+
VSCodeLauncher::URLEncode("key=value&key2=value2"));
61+
EXPECT_EQ("100%25complete", VSCodeLauncher::URLEncode("100%complete"));
62+
EXPECT_EQ("file_name%20with%20spaces%20%26%20special%21.txt",
63+
VSCodeLauncher::URLEncode("file_name with spaces & special!.txt"));
64+
EXPECT_EQ("%00%01%02",
65+
VSCodeLauncher::URLEncode(llvm::StringRef("\x00\x01\x02", 3)));
66+
EXPECT_EQ("test-file_name.txt~",
67+
VSCodeLauncher::URLEncode("test-file_name.txt~"));
68+
69+
// UTF-8 encoded characters should be percent-encoded byte by byte.
70+
EXPECT_EQ("%C3%A9", VSCodeLauncher::URLEncode("é"));
71+
}

0 commit comments

Comments
 (0)