From 1a6fb9ab8807f8ad8c8f79ba1cc4fa7a015c08d6 Mon Sep 17 00:00:00 2001 From: Not Zed Date: Tue, 1 Jun 2004 10:07:13 +0000 Subject: ** A few fixes for better rfc compliance, and cleaner code. 2004-06-01 Not Zed ** A few fixes for better rfc compliance, and cleaner code. * camel-mime-utils.c (header_encode_param): a bunch of logic cleanups with new util functions. (header_decode_init): setup a new type ATTR_CHAR, for attribute-char. * tests/misc/test2.c (main): new test for rfc2184 stuff. * camel-mime-utils.c (header_convert): helper to convert between charsets. (rfc2184_decode): fix a bunch of logic problems and use the helper above to simplify code. (decode_param_token): removed, not needed. (header_decode_rfc2184_param): removed, not needed. (header_decode_param): removed, not needed. ugh. (header_decode_param_list): completely rewritten, hence lack of need of above. svn path=/trunk/; revision=26140 --- camel/tests/misc/Makefile.am | 5 +- camel/tests/misc/README | 1 + camel/tests/misc/test2.c | 121 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 camel/tests/misc/test2.c (limited to 'camel/tests/misc') diff --git a/camel/tests/misc/Makefile.am b/camel/tests/misc/Makefile.am index cc119e9390..4cf6500c06 100644 --- a/camel/tests/misc/Makefile.am +++ b/camel/tests/misc/Makefile.am @@ -20,9 +20,10 @@ check_PROGRAMS = \ url \ url-scan \ utf7 \ - split + split \ + test2 -TESTS = url utf7 split url-scan +TESTS = url utf7 split url-scan test2 diff --git a/camel/tests/misc/README b/camel/tests/misc/README index e92f579cf6..6b8f4a22f2 100644 --- a/camel/tests/misc/README +++ b/camel/tests/misc/README @@ -1,4 +1,5 @@ +test2 rfc2184 multipart/i18n parameters url URL parsing utf7 UTF7 and UTF8 processing split word splitting for searching diff --git a/camel/tests/misc/test2.c b/camel/tests/misc/test2.c new file mode 100644 index 0000000000..a802392e91 --- /dev/null +++ b/camel/tests/misc/test2.c @@ -0,0 +1,121 @@ + + +#include + +#include +#include +#include +#include +#include +#include + +#include "camel-test.h" + +/* NB: We know which order the params will be decoded in, plain in the order they come, + and rfc2184 encoded following those, sorted lexigraphically */ +struct { + char *list; + int count; + char *params[8]; +} test1[] = { + { "; charset=\"iso-8859-1\"", + 1, + { "charset", "iso-8859-1" }, }, + { "; charset=iso-8859-1", + 1, + { "charset", "iso-8859-1" }, }, + { "; charset=\"iso-8859-1\"; boundary=\"foo\"", + 2, + { "charset", "iso-8859-1", + "boundary", "foo" }, }, + { "; charset*1 = 8859; charset*0=\"iso-8859-1'en'iso-\";charset*2=\"-1\" ", + 1, + { "charset", "iso-8859-1" }, }, + { "; charset*1 = 8859; boundary=foo; charset*0=\"iso-8859-1'en'iso-\";charset*2=\"-1\" ", + 2, + { "boundary", "foo", + "charset", "iso-8859-1", }, }, + { "; charset*1 = 8859; boundary*0=f; charset*0=\"iso-8859-1'en'iso-\"; boundary*2=\"o\" ; charset*2=\"-1\"; boundary*1=o ", + 2, + { "boundary", "foo", + "charset", "iso-8859-1", }, }, + { "; charset*1 = 8859; boundary*0=\"iso-8859-1'en'f\"; charset*0=\"iso-8859-1'en'iso-\"; boundary*2=\"o\" ; charset*2=\"-1\"; boundary*1=o ", + 2, + { "boundary", "foo", + "charset", "iso-8859-1", }, }, +}; + +struct { + int count; + char *params[8]; + char *list; +} test2[] = { + { 1, + { "name", "Doul\xC3\xADk01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123457890123456789123456789" }, + ";\n" + "\tname*0*=iso-8859-1''Doul%EDk012345678901234567890123456789012345678901234;\n" + "\tname*1*=56789012345678901234567890123456789012345678901234567890123457890;\n" + "\tname*2*=123456789123456789" }, + { 1, + { "name", "\"%$#@ special chars?;; !" }, + "; name=\"\\\"%$#@ special chars?;; !\"" }, + { 1, + { "name", "\"%$#@ special chars?;; !\xC3\xAD" }, + "; name*=iso-8859-1''%22%25$#%40%20special%20chars%3F%3B%3B%20!%ED" }, +}; + +int +main (int argc, char **argv) +{ + int i, j; + + camel_test_init(argc, argv); + + camel_test_start("Param list decoding"); + + for (i=0;iname, test1[i].params[j*2]) == 0); + check(strcmp(node->value, test1[i].params[j*2+1]) == 0); + node = node->next; + } + check_msg(node == NULL, "found more params than should have"); + camel_header_param_list_free(head); + camel_test_pull(); + } + + camel_test_end(); + + camel_test_start("Param list encoding"); + + for (i=0;inext; + check(j == test2[i].count); + + text = camel_header_param_list_format(head); + check(strcmp(text, test2[i].list) == 0); + camel_header_param_list_free(head); + + camel_test_pull(); + } + + camel_test_end(); + + return 0; +} -- cgit