bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2007-2018 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 =
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen "; key4*=us-ascii''foo"
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",
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen "key4*",
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen "us-ascii''foo",
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
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen test_begin("rfc2231 parser");
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen rfc822_parser_init(&parser, (const void *)input, strlen(input), NULL);
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen test_assert(rfc2231_parse(&parser, &result) == 0);
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen for (i = 0; output[i] != NULL && result[i] != NULL; i++)
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen test_assert(strcmp(output[i], result[i]) == 0);
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen test_assert(output[i] == NULL && result[i] == NULL);
ec23a602b0230eea29e64e2f283a9cf215be1f82Timo Sirainen test_end();
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen}
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainenint main(void)
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen{
baf3e87e186453fda13bd21f7cbcb2efc8492e8bTimo Sirainen static void (*const test_functions[])(void) = {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen test_rfc2231_parser,
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen NULL
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen };
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen return test_run(test_functions);
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen}