summaryrefslogtreecommitdiff
path: root/tests/header-parsing-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/header-parsing-test.c')
-rw-r--r--tests/header-parsing-test.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/header-parsing-test.c b/tests/header-parsing-test.c
index 9cf06cee..31edfd02 100644
--- a/tests/header-parsing-test.c
+++ b/tests/header-parsing-test.c
@@ -794,6 +794,46 @@ static struct QValueTest {
};
static const int num_qvaluetests = G_N_ELEMENTS (qvaluetests);
+static struct ParamListTest {
+ gboolean strict;
+ const char *header_value;
+ struct ParamListResult {
+ const char * param;
+ const char * value;
+ } results[3];
+} paramlisttests[] = {
+ { TRUE,
+ "UserID=JohnDoe; Max-Age=3600; Version=1",
+ { { "UserID", "JohnDoe" },
+ { "Max-Age", "3600" },
+ { "Version", "1" },
+ }
+ },
+
+ { TRUE,
+ "form-data; name=\"fieldName\"; filename=\"filename.jpg\"",
+ { { "form-data", NULL },
+ { "name", "fieldName" },
+ { "filename", "filename.jpg" },
+ },
+ },
+
+ { FALSE,
+ "form-data; form-data; filename=\"filename.jpg\"",
+ { { "form-data", NULL },
+ { "filename", "filename.jpg" },
+ },
+ },
+
+ { FALSE,
+ "attachment; filename*=UTF-8''t%C3%A9st.txt; filename=\"test.txt\"",
+ { { "attachment", NULL },
+ { "filename", "t\xC3\xA9st.txt" },
+ },
+ },
+};
+static const int num_paramlisttests = G_N_ELEMENTS (paramlisttests);
+
static void
check_headers (Header *headers, SoupMessageHeaders *hdrs)
{
@@ -949,6 +989,41 @@ do_qvalue_tests (void)
}
}
+static void
+do_param_list_tests (void)
+{
+ int i, j, n_params;
+ GHashTable* params;
+
+ for (i = 0; i < num_paramlisttests; i++) {
+ params = soup_header_parse_semi_param_list (paramlisttests[i].header_value);
+ g_assert_nonnull (params);
+ n_params = paramlisttests[i].strict ? 3 : 2;
+ g_assert_cmpuint (g_hash_table_size (params), ==, n_params);
+ for (j = 0; j < n_params; j++) {
+ g_assert_cmpstr (g_hash_table_lookup (params, paramlisttests[i].results[j].param),
+ ==, paramlisttests[i].results[j].value);
+ }
+ soup_header_free_param_list (params);
+ }
+
+ for (i = 0; i < num_paramlisttests; i++) {
+ params = soup_header_parse_semi_param_list_strict (paramlisttests[i].header_value);
+ if (paramlisttests[i].strict) {
+ g_assert_nonnull (params);
+ n_params = 3;
+ g_assert_cmpuint (g_hash_table_size (params), ==, n_params);
+ for (j = 0; j < n_params; j++) {
+ g_assert_cmpstr (g_hash_table_lookup (params, paramlisttests[i].results[j].param),
+ ==, paramlisttests[i].results[j].value);
+ }
+ soup_header_free_param_list (params);
+ } else {
+ g_assert_null (params);
+ }
+ }
+}
+
#define RFC5987_TEST_FILENAME "t\xC3\xA9st.txt"
#define RFC5987_TEST_FALLBACK_FILENAME "test.txt"
@@ -1175,6 +1250,7 @@ main (int argc, char **argv)
g_test_add_func ("/header-parsing/request", do_request_tests);
g_test_add_func ("/header-parsing/response", do_response_tests);
g_test_add_func ("/header-parsing/qvalue", do_qvalue_tests);
+ g_test_add_func ("/header-parsing/param-list", do_param_list_tests);
g_test_add_func ("/header-parsing/content-disposition", do_content_disposition_tests);
g_test_add_func ("/header-parsing/content-type", do_content_type_tests);
g_test_add_func ("/header-parsing/append-param", do_append_param_tests);