@@ -59,19 +59,18 @@ TEST(EncodeQueryParamTest, ParseReservedCharactersTest) {
59
59
" %3B%2C%2F%3F%3A%40%26%3D%2B%24" );
60
60
}
61
61
62
- TEST (EncodeQueryParamTest, TestUTF8Characters){
62
+ TEST (EncodeQueryParamTest, TestUTF8Characters) {
63
63
string chineseCharacters = " 中国語" ;
64
64
string russianCharacters = " дом" ;
65
65
string brazilianCharacters = " óculos" ;
66
66
67
67
EXPECT_EQ (detail::encode_query_param (chineseCharacters),
68
- " %E4%B8%AD%E5%9B%BD%E8%AA%9E" );
68
+ " %E4%B8%AD%E5%9B%BD%E8%AA%9E" );
69
69
70
70
EXPECT_EQ (detail::encode_query_param (russianCharacters),
71
- " %D0%B4%D0%BE%D0%BC" );
71
+ " %D0%B4%D0%BE%D0%BC" );
72
72
73
- EXPECT_EQ (detail::encode_query_param (brazilianCharacters),
74
- " %C3%B3culos" );
73
+ EXPECT_EQ (detail::encode_query_param (brazilianCharacters), " %C3%B3culos" );
75
74
}
76
75
77
76
TEST (TrimTests, TrimStringTests) {
@@ -3150,7 +3149,7 @@ TEST(ExceptionTest, ThrowExceptionInHandler) {
3150
3149
3151
3150
svr.Get (" /hi" , [&](const Request & /* req*/ , Response & /* res*/ ) {
3152
3151
throw std::runtime_error (" exception..." );
3153
- // res.set_content("Hello World!", "text/plain");
3152
+ // res.set_content("Hello World!", "text/plain");
3154
3153
});
3155
3154
3156
3155
auto listen_thread = std::thread ([&svr]() { svr.listen (" localhost" , PORT); });
@@ -3211,6 +3210,39 @@ TEST(KeepAliveTest, ReadTimeout) {
3211
3210
ASSERT_FALSE (svr.is_running ());
3212
3211
}
3213
3212
3213
+ TEST (ErrorHandlerWithContentProviderTest, ErrorHandler) {
3214
+ Server svr;
3215
+
3216
+ svr.set_error_handler ([](Request const &, Response &res) -> void {
3217
+ res.set_chunked_content_provider (
3218
+ " text/plain" , [](std::size_t const , DataSink &sink) -> bool {
3219
+ sink.os << " hello" ;
3220
+ sink.os << " world" ;
3221
+ sink.done ();
3222
+ return true ;
3223
+ });
3224
+ });
3225
+
3226
+ auto listen_thread = std::thread ([&svr]() { svr.listen (" localhost" , PORT); });
3227
+ while (!svr.is_running ()) {
3228
+ std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
3229
+ }
3230
+
3231
+ // Give GET time to get a few messages.
3232
+ std::this_thread::sleep_for (std::chrono::seconds (1 ));
3233
+
3234
+ Client cli (" localhost" , PORT);
3235
+
3236
+ auto res = cli.Get (" /" );
3237
+ ASSERT_TRUE (res);
3238
+ EXPECT_EQ (404 , res->status );
3239
+ EXPECT_EQ (" helloworld" , res->body );
3240
+
3241
+ svr.stop ();
3242
+ listen_thread.join ();
3243
+ ASSERT_FALSE (svr.is_running ());
3244
+ }
3245
+
3214
3246
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
3215
3247
TEST (KeepAliveTest, ReadTimeoutSSL) {
3216
3248
SSLServer svr (SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE);
@@ -3770,9 +3802,9 @@ TEST(DecodeWithChunkedEncoding, BrotliEncoding) {
3770
3802
TEST (HttpsToHttpRedirectTest2, SimpleInterface) {
3771
3803
Client cli (" https://nghttp2.org" );
3772
3804
cli.set_follow_location (true );
3773
- auto res = cli. Get (
3774
- " /httpbin/"
3775
- " redirect-to?url=http%3A%2F%2Fwww.google.com&status_code=302" );
3805
+ auto res =
3806
+ cli. Get ( " /httpbin/"
3807
+ " redirect-to?url=http%3A%2F%2Fwww.google.com&status_code=302" );
3776
3808
3777
3809
ASSERT_TRUE (res);
3778
3810
EXPECT_EQ (200 , res->status );
0 commit comments