bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2016-2018 Dovecot authors, see the included COPYING file */
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "lib.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "str.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "unichar.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "message-parser.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "message-search.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen#include "test-common.h"
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainenstatic void test_message_search_more_get_decoded(void)
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen{
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen const char input[] = "p\xC3\xB6\xC3\xB6";
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen const unsigned char text_plain[] = "text/plain; charset=utf-8";
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen struct message_search_context *ctx1, *ctx2;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen struct message_block raw_block, decoded_block;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen struct message_header_line hdr;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen struct message_part part;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen unsigned int i;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_begin("message_search_more_get_decoded()");
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen ctx1 = message_search_init("p\xC3\xA4\xC3\xA4", NULL, 0);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen ctx2 = message_search_init("p\xC3\xB6\xC3\xB6", NULL, 0);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Bosch i_zero(&raw_block);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen raw_block.part = ∂
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen /* feed the Content-Type header */
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Bosch i_zero(&hdr);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen hdr.name = "Content-Type"; hdr.name_len = strlen(hdr.name);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen hdr.value = hdr.full_value = text_plain;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen hdr.value_len = hdr.full_value_len = sizeof(text_plain)-1;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen raw_block.hdr = &hdr;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(!message_search_more_get_decoded(ctx1, &raw_block, &decoded_block));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(!message_search_more_decoded(ctx2, &decoded_block));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen /* EOH */
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen raw_block.hdr = NULL;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(!message_search_more_get_decoded(ctx1, &raw_block, &decoded_block));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(!message_search_more_decoded(ctx2, &decoded_block));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen /* body */
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen raw_block.size = 1;
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen for (i = 0; input[i] != '\0'; i++) {
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen raw_block.data = (const void *)&input[i];
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(!message_search_more_get_decoded(ctx1, &raw_block, &decoded_block));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_assert(message_search_more_decoded(ctx2, &decoded_block) == (input[i+1] == '\0'));
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen }
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen message_search_deinit(&ctx1);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen message_search_deinit(&ctx2);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_end();
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen}
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainenint main(void)
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen{
baf3e87e186453fda13bd21f7cbcb2efc8492e8bTimo Sirainen static void (*const test_functions[])(void) = {
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen test_message_search_more_get_decoded,
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen NULL
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen };
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen return test_run(test_functions);
121f820aeb2f25c563a5dcbcf353a7b0e9a7e6e1Timo Sirainen}