test-rfc2231-parser.c revision 39025a2dabfcfaeee3790988b9ea00d19887a3d3
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen/* Copyright (c) 2007-2009 Dovecot authors, see the included COPYING file */
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen#include "lib.h"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen#include "rfc822-parser.h"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen#include "rfc2231-parser.h"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen#include "test-common.h"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainenstatic void test_rfc2231_parser(void)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen{
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen const char *input =
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key*2=ba%"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key2*0=a"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key3*0*=us-ascii'en'xyz"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key*0=\"foo\""
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key2*1*=b%25"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key3*1=plop%"
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "; key*1=baz";
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen const char *output[] = {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "key",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "foobazba%",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "key2*",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "''ab%25",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "key3*",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen "us-ascii'en'xyzplop%25",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen NULL
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen };
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen struct rfc822_parser_context parser;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen const char *const *result;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen unsigned int i;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen bool success;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen rfc822_parser_init(&parser, (const void *)input, strlen(input), NULL);
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen if (rfc2231_parse(&parser, &result) < 0)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen success = FALSE;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen else {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen success = TRUE;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen for (i = 0; output[i] != NULL && result[i] != NULL; i++) {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen if (strcmp(output[i], result[i]) != 0)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen break;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen }
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen if (output[i] != NULL || result[i] != NULL)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen success = FALSE;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen }
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen test_out("rfc2231_parse()", success);
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen}
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainenint main(void)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen{
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen static void (*test_functions[])(void) = {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen test_rfc2231_parser,
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen NULL
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen };
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen return test_run(test_functions);
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen}