diff options
Diffstat (limited to 'pigeonhole/src/lib-sieve/util/test-rfc2822.c')
-rw-r--r-- | pigeonhole/src/lib-sieve/util/test-rfc2822.c | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/pigeonhole/src/lib-sieve/util/test-rfc2822.c b/pigeonhole/src/lib-sieve/util/test-rfc2822.c new file mode 100644 index 0000000..66e8ee5 --- /dev/null +++ b/pigeonhole/src/lib-sieve/util/test-rfc2822.c @@ -0,0 +1,197 @@ +/* Copyright (c) 2018 Pigeonhole authors, see the included COPYING file */ + +#include "lib.h" +#include "test-common.h" +#include "str.h" + +#include "rfc2822.h" + +struct test_header_write { + const char *name; + const char *body; + const char *output; +}; + +static const struct test_header_write header_write_tests[] = { + { + .name = "Frop", + .body = "Bladiebla", + .output = "Frop: Bladiebla\r\n" + },{ + .name = "Subject", + .body = "This is a very long subject that well exceeds the " + "boundary of 80 characters. It should therefore " + "trigger the header folding algorithm.", + .output = + "Subject: This is a very long subject that well " + "exceeds the boundary of 80\r\n" + "\tcharacters. It should therefore trigger the header " + "folding algorithm.\r\n" + },{ + .name = "Subject", + .body = "This\tis\ta\tvery\tlong\tsubject\tthat\twell\texceeds" + "\tthe\tboundary\tof\t80\tcharacters.\tIt\tshould\t" + "therefore\ttrigger\tthe\theader\tfolding\talgorithm.", + .output = + "Subject: This\tis\ta\tvery\tlong\tsubject\tthat\twell" + "\texceeds\tthe\tboundary\tof\t80\r\n" + "\tcharacters.\tIt\tshould\ttherefore\ttrigger\tthe\t" + "header\tfolding\talgorithm.\r\n" + },{ + .name = "Comment", + .body = "This header already contains newlines.\n" + "The header folding algorithm should respect these.\n" + "It also should convert between CRLF and LF when " + "needed.", + .output = "Comment: This header already contains newlines.\r\n" + "\tThe header folding algorithm should respect " + "these.\r\n" + "\tIt also should convert between CRLF and LF when " + "needed.\r\n" + },{ + .name = "References", + .body = "<messageid1@example.com> <messageid2@example.com> " + "<extremelylonglonglonglonglonglonglonglonglonglong" + "longlongmessageid3@example.com> " + "<messageid4@example.com>", + .output = "References: <messageid1@example.com> " + "<messageid2@example.com>\r\n" + "\t<extremelylonglonglonglonglonglonglonglonglonglong" + "longlongmessageid3@example.com>\r\n" + "\t<messageid4@example.com>\r\n", + },{ + .name = "Cc", + .body = "\"Richard Edgar Cipient\" " + "<r.e.cipient@example.com>, \"Albert Buser\" " + "<a.buser@example.com>, \"Steven Pammer\" " + "<s.pammer@example.com>", + .output = "Cc: \"Richard Edgar Cipient\" " + "<r.e.cipient@example.com>, \"Albert Buser\"\r\n" + "\t<a.buser@example.com>, \"Steven Pammer\" " + "<s.pammer@example.com>\r\n" + },{ + .name = "References", + .body = "<00fd01d31b6c$33d98e30$9b8caa90$@karel@aa.example.org" + "> <00f201d31c36$afbfa320$0f3ee960$@karel@aa.example.o" + "rg> <015c01d32023$fe3840c0$faa8c240$@karel@aa.examp" + "le.org> <014601d325a4$ece1ed90$c6a5c8b0$@karel@aa." + "example.org> <012801d32b24$7734c380$659e4a80$@karel" + "@aa.example.org> <00da01d32be9$2d9944b0$88cbce10$@kar" + "el@aa.example.org> <006a01d336ef$6825d5b0$387181" + "10$@karel@aa.example.org> <018501d33880$58b654f0$0a2" + "2fed0$@frederik@aa.example.org> <00e601d33ba3$be50f10" + "0$3af2d300$@frederik@aa.example.org> <016501d341ee$e" + "678e1a0$b36aa4e0$@frederik@aa.example.org> <00ab01" + "d348f9$ae2e1ab0$0a8a5010$@karel@aa.example.org> <0086" + "01d349c1$98ff4ba0$cafde2e0$@frederik@aa.example.org> " + " <019301d357e6$a2190680$e64b1380$@frederik@aa.example" + ".org> <025f01d384b0$24d2c" + "660$6e785320$@karel@aa.example.org> <01cf01d3889e$7" + "280cb90$578262b0$@karel@aa.example.org> <013701d38" + "bc2$9164b950$b42e2bf0$@karel@aa.example.org> " + " <014f01d3a5b1$a51afc80$ef\n" + " \n" + "\t \t \t \t \t \t \t \t5\t0\tf\t5\t8\t0\t$\t@\tk\ta\t" + "r\te\tl\t@\taa.example.org> <01cb01d3af29$dd7d" + "1b40$987751c0$@karel@aa.example.org> " + " <00b401d3f2bc$6ad8c180$408a4480" + "$@karel@aa.example.org> <011a01d3f6ab$0eeb0480$2cc1" + "0d80$@frederik@aa.example.org> <005c01d3f774$37f1b210" + "$a7d51630$@richard@aa.example.org> <01a801d3fc2d$59" + "0f7730$0b2e6590$@frederik@aa.example.org> <007501d3fc" + "f5$23d75ce0$6b8616a0$@frederik@aa.example.org> <015d0" + "1d3fdbf$136da510$3a48ef30$@frederik@aa.example.org> <" + "021a01d3fe87$556d68b0$00483a10$@frederik@aa.example.o" + "rg> <013f01d3ff4e$a2d13d30$e873b790$@frederik@aa.exam" + "ple.org> <001f01d401ab$31e7b090$95b711b0$@frederik@aa" + ".example.org> <017201d40273$a118d200$e34a7600$@freder" + "ik@aa.example.org> <017401d4033e$ca3602e0$5ea208a0$@f" + "rederik@aa.example.org> <02a601d40404$608b9e10$21a2da" + "30$@frederik@aa.example.org> <014301d404d0$b65269b0$2" + "2f73d10$@frederik@aa.example.org> <015901d4072b$b5a1b" + "950$20e52bf0$@frederik@aa.example.org> <01b401d407f3$" + "bef52050$3cdf\n" + " 60 \n" + "\tf0 \t$@ \tfr \ted \teri\tk@aa.example.org> <012801d" + "408bd$6602fce0$3208f6a0$@frederik@aa.example.org> <01" + "c801d40984$ae4b23c0$0ae16b40$@frederik@aa.example.org" + "> <00ec01d40a4d$12859190$3790b4b0$@frederik@aa.exampl" + "e.org> <02af01d40d74$589c9050$09d5b0f0$@frederik@aa.e" + "xample.org> <000d01d40ec8$d3d337b0$7b79a710$@richard@" + "aa.example.org>\n", + .output = "References: <00fd01d31b6c$33d98e30$9b8caa90$@karel@aa.example.org>\r\n" + "\t<00f201d31c36$afbfa320$0f3ee960$@karel@aa.example.org>\r\n" + "\t<015c01d32023$fe3840c0$faa8c240$@karel@aa.example.org>\r\n" + "\t<014601d325a4$ece1ed90$c6a5c8b0$@karel@aa.example.org>\r\n" + "\t<012801d32b24$7734c380$659e4a80$@karel@aa.example.org>\r\n" + "\t<00da01d32be9$2d9944b0$88cbce10$@karel@aa.example.org>\r\n" + "\t<006a01d336ef$6825d5b0$38718110$@karel@aa.example.org>\r\n" + "\t<018501d33880$58b654f0$0a22fed0$@frederik@aa.example.org>\r\n" + "\t<00e601d33ba3$be50f100$3af2d300$@frederik@aa.example.org>\r\n" + "\t<016501d341ee$e678e1a0$b36aa4e0$@frederik@aa.example.org>\r\n" + "\t<00ab01d348f9$ae2e1ab0$0a8a5010$@karel@aa.example.org>\r\n" + "\t<008601d349c1$98ff4ba0$cafde2e0$@frederik@aa.example.org>\r\n" + "\t<019301d357e6$a2190680$e64b1380$@frederik@aa.example.org>\r\n" + "\t<025f01d384b0$24d2c660$6e785320$@karel@aa.example.org>\r\n" + "\t<01cf01d3889e$7280cb90$578262b0$@karel@aa.example.org>\r\n" + "\t<013701d38bc2$9164b950$b42e2bf0$@karel@aa.example.org>\r\n" + "\t<014f01d3a5b1$a51afc80$ef\r\n" + "\t5\t0\tf\t5\t8\t0\t$\t@\tk\ta\tr\te\tl\t@\taa.example.org>\r\n" + "\t<01cb01d3af29$dd7d1b40$987751c0$@karel@aa.example.org>\r\n" + "\t<00b401d3f2bc$6ad8c180$408a4480$@karel@aa.example.org>\r\n" + "\t<011a01d3f6ab$0eeb0480$2cc10d80$@frederik@aa.example.org>\r\n" + "\t<005c01d3f774$37f1b210$a7d51630$@richard@aa.example.org>\r\n" + "\t<01a801d3fc2d$590f7730$0b2e6590$@frederik@aa.example.org>\r\n" + "\t<007501d3fcf5$23d75ce0$6b8616a0$@frederik@aa.example.org>\r\n" + "\t<015d01d3fdbf$136da510$3a48ef30$@frederik@aa.example.org>\r\n" + "\t<021a01d3fe87$556d68b0$00483a10$@frederik@aa.example.org>\r\n" + "\t<013f01d3ff4e$a2d13d30$e873b790$@frederik@aa.example.org>\r\n" + "\t<001f01d401ab$31e7b090$95b711b0$@frederik@aa.example.org>\r\n" + "\t<017201d40273$a118d200$e34a7600$@frederik@aa.example.org>\r\n" + "\t<017401d4033e$ca3602e0$5ea208a0$@frederik@aa.example.org>\r\n" + "\t<02a601d40404$608b9e10$21a2da30$@frederik@aa.example.org>\r\n" + "\t<014301d404d0$b65269b0$22f73d10$@frederik@aa.example.org>\r\n" + "\t<015901d4072b$b5a1b950$20e52bf0$@frederik@aa.example.org>\r\n" + "\t<01b401d407f3$bef52050$3cdf\r\n" + "\t60\r\n" + "\tf0 \t$@ \tfr \ted \teri\tk@aa.example.org>\r\n" + "\t<012801d408bd$6602fce0$3208f6a0$@frederik@aa.example.org>\r\n" + "\t<01c801d40984$ae4b23c0$0ae16b40$@frederik@aa.example.org>\r\n" + "\t<00ec01d40a4d$12859190$3790b4b0$@frederik@aa.example.org>\r\n" + "\t<02af01d40d74$589c9050$09d5b0f0$@frederik@aa.example.org>\r\n" + "\t<000d01d40ec8$d3d337b0$7b79a710$@richard@aa.example.org>\r\n" + } +}; + +static const unsigned int header_write_tests_count = + N_ELEMENTS(header_write_tests); + +static void test_rfc2822_header_write(void) +{ + string_t *header; + unsigned int i; + + test_begin("rfc2822 - header write"); + + header = t_str_new(1024); + for (i = 0; i < header_write_tests_count; i++) { + const struct test_header_write *test = &header_write_tests[i]; + + str_truncate(header, 0); + rfc2822_header_write(header, test->name, test->body); + + test_assert_idx(strcmp(str_c(header), test->output) == 0, i); + } + + test_end(); +} + +int main(void) +{ + static void (*test_functions[])(void) = { + test_rfc2822_header_write, + NULL + }; + return test_run(test_functions); +} + |