diff --git a/test/unit_test.c b/test/unit_test.c
index 4d7672094c2ac7931f58ce8003e2ff7849f35814..ca630b02e0bf805b3226e051e106c446d0373b97 100644
--- a/test/unit_test.c
+++ b/test/unit_test.c
@@ -241,7 +241,7 @@ static int log_message_cb(const struct mg_connection *conn, const char *msg) {
 
 static const struct mg_callbacks CALLBACKS = {
   &begin_request_handler_cb, NULL, &log_message_cb, NULL, NULL, NULL, NULL,
-  &open_file_cb, NULL, &upload_cb
+  &open_file_cb, NULL, &upload_cb, NULL
 };
 
 static const char *OPTIONS[] = {
@@ -577,6 +577,18 @@ static void test_api_calls(void) {
   mg_stop(ctx);
 }
 
+static void test_url_decode(void) {
+  char buf[100];
+
+  ASSERT(url_decode("foo", 3, buf, 3, 0) == -1);  // No space for terminating \0
+  ASSERT(url_decode("foo", 3, buf, 4, 0) == 3);
+  ASSERT(strcmp(buf, "foo") == 0);
+  ASSERT(url_decode("a+", 2, buf, sizeof(buf), 0) == 2);
+  ASSERT(strcmp(buf, "a+") == 0);
+  ASSERT(url_decode("a+", 2, buf, sizeof(buf), 1) == 2);
+  ASSERT(strcmp(buf, "a ") == 0);
+}
+
 int __cdecl main(void) {
   test_alloc_vprintf();
   test_base64_encode();
@@ -593,6 +605,7 @@ int __cdecl main(void) {
   test_mg_upload();
   test_request_replies();
   test_api_calls();
+  test_url_decode();
 #ifdef USE_LUA
   test_lua();
 #endif