test-message-header-decode.c revision d9076f5939edf5d20a261494b1a861dcbb0d32e2
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen/* Copyright (c) 2009-2012 Dovecot authors, see the included COPYING file */
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen#include "lib.h"
5b6470e0e2ef4012430cdeca7d9b89c1278a0ed4Timo Sirainen#include "buffer.h"
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen#include "str.h"
64f30df0bee5218c9a69915e796d9d1376cfbf29Timo Sirainen#include "charset-utf8.h"
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen#include "message-header-decode.h"
57f4445a46726a17bfe78b0964dd301a6ccb40ecTimo Sirainen#include "test-common.h"
bd63b5b860658b01b1f46f26d406e1e4a9dc019aTimo Sirainen
f6c1297c26b355c4aec2a08978f51ec3efecb351Timo Sirainenbool charset_is_utf8(const char *charset ATTR_UNUSED) { return TRUE; }
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainenint charset_to_utf8_begin(const char *charset ATTR_UNUSED,
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen normalizer_func_t *normalizer ATTR_UNUSED,
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen struct charset_translation **t_r ATTR_UNUSED) { return 0; }
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainenvoid charset_to_utf8_end(struct charset_translation **t ATTR_UNUSED) {}
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainenenum charset_result
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainencharset_to_utf8(struct charset_translation *t ATTR_UNUSED,
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen const unsigned char *src, size_t *src_size, buffer_t *dest)
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen{
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen buffer_append(dest, src, *src_size);
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen return CHARSET_RET_OK;
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen}
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainenstatic void test_message_header_decode(void)
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen{
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen static const char *data[] = {
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen "a =?utf-8?q?=c3=a4?= b", "a ä b",
2e5d624013c30633e8ded148d338ce46c321a995Timo Sirainen "a =?utf-8?q?=c3=a4?= b", "a ä b",
2e5d624013c30633e8ded148d338ce46c321a995Timo Sirainen "a =?utf-8?q?=c3=a4?=\t\t\r\n =?utf-8?q?=c3=a4?= b", "a ää b",
88b9f9eb91da632d3e941fe4276f8ace03205b25Timo Sirainen "a =?utf-8?q?=c3=a4?= x =?utf-8?q?=c3=a4?= b", "a ä x ä b",
88b9f9eb91da632d3e941fe4276f8ace03205b25Timo Sirainen "a =?utf-8?b?w6TDpCDDpA==?= b", "a ää ä b",
f26ef7a3a562dc42a1e9a4dde546bd30df3241e8Timo Sirainen "=?utf-8?b?w6Qgw6Q=?=", "ä ä",
f26ef7a3a562dc42a1e9a4dde546bd30df3241e8Timo Sirainen };
57b523eeb99ed5d7f5002907a409cdef54353ce5Timo Sirainen string_t *dest;
57b523eeb99ed5d7f5002907a409cdef54353ce5Timo Sirainen unsigned int i;
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen test_begin("message header decode");
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen dest = t_str_new(256);
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen for (i = 0; i < N_ELEMENTS(data); i += 2) {
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen str_truncate(dest, 0);
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen message_header_decode_utf8((const unsigned char *)data[i],
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen strlen(data[i]), dest, FALSE);
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen test_assert(strcmp(str_c(dest), data[i+1]) == 0);
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen }
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen test_end();
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen}
c8296ac1ed68ed5c5168de545b76f9b27fc76d35Timo Sirainen
2e5d624013c30633e8ded148d338ce46c321a995Timo Sirainenint main(void)
2e5d624013c30633e8ded148d338ce46c321a995Timo Sirainen{
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen static void (*test_functions[])(void) = {
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen test_message_header_decode,
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen NULL
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen };
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen return test_run(test_functions);
c37098f8ce6d512ba41f09564d04ed25720f0a77Timo Sirainen}
57a712a4998e4bb0073080232225380cd2cea625Timo Sirainen