@@ -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