From 548d50fb19cd66dbe153e4d7e879501bab58c0aa Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Wed, 15 Sep 2010 00:38:16 +0300 Subject: Rewrite libmailutils testsuite in Autotest. * configure.ac: Create libmailutils/tests/atlocal and libmailutils/tests/Makefile. Remove libmailutils/testsuite. * examples/Makefile.am (noinst_PROGRAMS): Remove programs moved to libmailutils/tests. * examples/argcv.c -> libmailutils/tests/argcv.c * libmailutils/testsuite/Decode -> libmailutils/tests/Decode * libmailutils/testsuite/Encode -> libmailutils/tests/Encode * examples/decode2047.c: Move to libmailutils/tests * examples/encode2047.c: Move to libmailutils/tests * examples/mailcap.c: Likewise. * examples/url-parse.c: Likewise. * include/mailutils/Makefile.am: Minor changes. * libmailutils/Makefile.am (SUBDIRS): Replace testsuite with tests. * libmailutils/tests/Makefile.am: New file. * libmailutils/tests/addr.c: New file. * libmailutils/tests/address.at: New file. * libmailutils/tests/argcv.at: New file. * libmailutils/tests/atlocal.in: New file. * libmailutils/tests/base64d.at: New file. * libmailutils/tests/base64e.at: New file. * libmailutils/tests/decode2047.at: New file. * libmailutils/tests/encode2047.at: New file. * libmailutils/tests/fltst.c: New file. * libmailutils/tests/mailcap.at: New file. * libmailutils/tests/mime.at: New file. * libmailutils/tests/testsuite.at: New file. * libmailutils/tests/url.at: New file. * libmailutils/testsuite/: Delete. * frm/tests/Makefile.am: Prefix package.m4 creation commands with $(AM_V_GEN). * readmsg/tests/Makefile.am: Likewise. * sieve/tests/Makefile.am: Likewise. * frm/tests/testsuite.at: Minor changes. * readmsg/tests/testsuite.at: Include testsuite.inc. * sieve/tests/testsuite.at: Likewise. * sieve/tests/version.at: Comment out inclusion of testsuite.inc. * testsuite/testsuite.inc: Add m4_version_prereq. --- configure.ac | 5 +- examples/Makefile.am | 17 +- examples/argcv.c | 60 -- examples/decode2047.c | 81 -- examples/encode2047.c | 206 ----- examples/mailcap.c | 102 --- examples/mimetest.c | 296 ------- examples/url-parse.c | 144 ---- frm/tests/Makefile.am | 2 +- frm/tests/testsuite.at | 7 +- include/mailutils/Makefile.am | 2 +- libmailutils/Makefile.am | 2 +- libmailutils/tests/Decode | 5 + libmailutils/tests/Encode | Bin 0 -> 256 bytes libmailutils/tests/Makefile.am | 100 +++ libmailutils/tests/addr.c | 103 +++ libmailutils/tests/address.at | 1080 +++++++++++++++++++++++++ libmailutils/tests/argcv.at | 91 +++ libmailutils/tests/argcv.c | 60 ++ libmailutils/tests/atlocal.in | 9 + libmailutils/tests/base64d.at | 39 + libmailutils/tests/base64e.at | 39 + libmailutils/tests/decode2047.at | 60 ++ libmailutils/tests/decode2047.c | 82 ++ libmailutils/tests/encode2047.at | 32 + libmailutils/tests/encode2047.c | 207 +++++ libmailutils/tests/fltst.c | 195 +++++ libmailutils/tests/mailcap.at | 279 +++++++ libmailutils/tests/mailcap.c | 102 +++ libmailutils/tests/mime.at | 220 +++++ libmailutils/tests/mimetest.c | 296 +++++++ libmailutils/tests/testsuite.at | 30 + libmailutils/tests/url-parse.c | 142 ++++ libmailutils/tests/url.at | 776 ++++++++++++++++++ libmailutils/testsuite/.gitignore | 7 - libmailutils/testsuite/Addrs | 644 --------------- libmailutils/testsuite/Argcv | 52 -- libmailutils/testsuite/Decode | 5 - libmailutils/testsuite/Decode2047 | 36 - libmailutils/testsuite/Encode | Bin 256 -> 0 bytes libmailutils/testsuite/Encode2047 | 27 - libmailutils/testsuite/Mailcap | 195 ----- libmailutils/testsuite/Makefile.am | 92 --- libmailutils/testsuite/Mime | 212 ----- libmailutils/testsuite/Urls | 629 -------------- libmailutils/testsuite/lib/DISTFILES | 1 - libmailutils/testsuite/lib/mailbox.exp | 243 ------ libmailutils/testsuite/mailbox/DISTFILES | 9 - libmailutils/testsuite/mailbox/address.exp | 48 -- libmailutils/testsuite/mailbox/argcv.exp | 55 -- libmailutils/testsuite/mailbox/base64.exp | 37 - libmailutils/testsuite/mailbox/decode2047.exp | 50 -- libmailutils/testsuite/mailbox/encode2047.exp | 62 -- libmailutils/testsuite/mailbox/list.exp | 330 -------- libmailutils/testsuite/mailbox/mailcap.exp | 71 -- libmailutils/testsuite/mailbox/mime.exp | 39 - libmailutils/testsuite/mailbox/url.exp | 48 -- readmsg/tests/Makefile.am | 2 +- readmsg/tests/testsuite.at | 1 - sieve/tests/Makefile.am | 2 +- sieve/tests/testsuite.at | 3 +- sieve/tests/version.at | 2 +- testsuite/testsuite.inc | 7 +- 63 files changed, 3964 insertions(+), 3816 deletions(-) delete mode 100644 examples/argcv.c delete mode 100644 examples/decode2047.c delete mode 100644 examples/encode2047.c delete mode 100644 examples/mailcap.c delete mode 100644 examples/mimetest.c delete mode 100644 examples/url-parse.c create mode 100644 libmailutils/tests/Decode create mode 100644 libmailutils/tests/Encode create mode 100644 libmailutils/tests/Makefile.am create mode 100644 libmailutils/tests/addr.c create mode 100644 libmailutils/tests/address.at create mode 100644 libmailutils/tests/argcv.at create mode 100644 libmailutils/tests/argcv.c create mode 100644 libmailutils/tests/atlocal.in create mode 100644 libmailutils/tests/base64d.at create mode 100644 libmailutils/tests/base64e.at create mode 100644 libmailutils/tests/decode2047.at create mode 100644 libmailutils/tests/decode2047.c create mode 100644 libmailutils/tests/encode2047.at create mode 100644 libmailutils/tests/encode2047.c create mode 100644 libmailutils/tests/fltst.c create mode 100644 libmailutils/tests/mailcap.at create mode 100644 libmailutils/tests/mailcap.c create mode 100644 libmailutils/tests/mime.at create mode 100644 libmailutils/tests/mimetest.c create mode 100644 libmailutils/tests/testsuite.at create mode 100644 libmailutils/tests/url-parse.c create mode 100644 libmailutils/tests/url.at delete mode 100644 libmailutils/testsuite/.gitignore delete mode 100644 libmailutils/testsuite/Addrs delete mode 100644 libmailutils/testsuite/Argcv delete mode 100644 libmailutils/testsuite/Decode delete mode 100644 libmailutils/testsuite/Decode2047 delete mode 100644 libmailutils/testsuite/Encode delete mode 100644 libmailutils/testsuite/Encode2047 delete mode 100644 libmailutils/testsuite/Mailcap delete mode 100644 libmailutils/testsuite/Makefile.am delete mode 100644 libmailutils/testsuite/Mime delete mode 100644 libmailutils/testsuite/Urls delete mode 100644 libmailutils/testsuite/lib/DISTFILES delete mode 100644 libmailutils/testsuite/lib/mailbox.exp delete mode 100644 libmailutils/testsuite/mailbox/DISTFILES delete mode 100644 libmailutils/testsuite/mailbox/address.exp delete mode 100644 libmailutils/testsuite/mailbox/argcv.exp delete mode 100644 libmailutils/testsuite/mailbox/base64.exp delete mode 100644 libmailutils/testsuite/mailbox/decode2047.exp delete mode 100644 libmailutils/testsuite/mailbox/encode2047.exp delete mode 100644 libmailutils/testsuite/mailbox/list.exp delete mode 100644 libmailutils/testsuite/mailbox/mailcap.exp delete mode 100644 libmailutils/testsuite/mailbox/mime.exp delete mode 100644 libmailutils/testsuite/mailbox/url.exp diff --git a/configure.ac b/configure.ac index 2b097f7d0..27ffc544b 100644 --- a/configure.ac +++ b/configure.ac @@ -1211,7 +1211,9 @@ AC_ARG_WITH([mh-bindir], # Initialize the (autotest) test suite. AC_CONFIG_TESTDIR(tests) -AC_CONFIG_FILES([frm/tests/Makefile +AC_CONFIG_FILES([libmailutils/tests/Makefile + libmailutils/tests/atlocal + frm/tests/Makefile frm/tests/atlocal readmsg/tests/Makefile readmsg/tests/atlocal @@ -1362,7 +1364,6 @@ AC_CONFIG_FILES([ mail/Makefile mail/testsuite/Makefile libmailutils/Makefile - libmailutils/testsuite/Makefile messages/Makefile messages/testsuite/Makefile mh/Makefile diff --git a/examples/Makefile.am b/examples/Makefile.am index 7e858d78a..c283d0db3 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -35,18 +35,13 @@ SUBDIRS = config $(CPP_DIR) python scheme noinst_PROGRAMS = \ aclck\ addr\ - argcv\ base64\ - decode2047\ echosrv\ - encode2047\ header\ http\ iconv\ listop\ lsf\ - mailcap\ - mimetest\ msg-send\ mta\ mucat\ @@ -56,8 +51,7 @@ noinst_PROGRAMS = \ musocio\ $(NNTPCLIENT)\ $(POP3CLIENT)\ - sfrom\ - url-parse + sfrom EXTRA_PROGRAMS = pop3client nntpclient @@ -79,15 +73,6 @@ numaddr_la_SOURCES = numaddr.c numaddr_la_LIBADD = ${MU_LIB_SIEVE} numaddr_la_LDFLAGS = -module -avoid-version -no-undefined -rpath '$(moddir)' -mimetest_LDADD =\ - ../lib/libmuaux.la\ - ${MU_LIB_MBOX}\ - ${MU_LIB_IMAP}\ - ${MU_LIB_POP}\ - ${MU_LIB_AUTH}\ - @MU_AUTHLIBS@\ - ${MU_LIB_MAILUTILS} - msg_send_LDADD =\ ../lib/libmuaux.la\ ${MU_LIB_MAILER}\ diff --git a/examples/argcv.c b/examples/argcv.c deleted file mode 100644 index 3253feb70..000000000 --- a/examples/argcv.c +++ /dev/null @@ -1,60 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include -#include -#include -#include - -int -main (int argc, char **argv) -{ - char *delim = ""; - char *comment = "#"; - char buf[512]; - - while (fgets (buf, sizeof buf, stdin)) - { - int status, c; - char **v; - char *s; - - status = mu_argcv_get (buf, delim, comment, &c, &v); - if (status) - { - fprintf (stderr, "cannot parse: %s\n", mu_strerror (status)); - continue; - } - status = mu_argcv_string (c, v, &s); - if (status) - fprintf (stderr, "cannot create string: %s\n", mu_strerror (status)); - else - { - printf ("%d: %s\n", c, s); - free (s); - } - mu_argcv_free (c, v); - } - exit (0); -} diff --git a/examples/decode2047.c b/examples/decode2047.c deleted file mode 100644 index bdb1ca29d..000000000 --- a/examples/decode2047.c +++ /dev/null @@ -1,81 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 2003, 2007, 2010 Free Software Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include - -#include - -#define ISPRINT(c) ((c)=='\t'||(c)==' '||(c)=='\n'||\ - ((unsigned char)(c)>' '&&(unsigned char)(c)<128)) - -void -print (char *p, int printable) -{ - for (; *p; p++) - { - if (printable && *p != '\n' && !ISPRINT (*p)) - printf ("\\%03o", *(unsigned char *) p); - else - putchar (*p); - } -} - -int -main (int argc, char *argv[]) -{ - char buf[256]; - int c, printable = 0; - char *charset = "iso-8859-1"; - - while ((c = getopt (argc, argv, "c:p")) != EOF) - switch (c) - { - case 'c': - charset = optarg; - break; - case 'p': - printable = 1; - break; - - default: - exit (1); - } - - while (fgets (buf, sizeof (buf), stdin)) - { - char *p = NULL; - int rc, len; - - len = strlen (buf); - if (len > 0 && buf[len - 1] == '\n') - buf[len - 1] = 0; - rc = mu_rfc2047_decode (charset, buf, &p); - printf ("%s=> %s\n", buf, mu_strerror (rc)); - if (p) - print (p, printable); - putchar ('\n'); - free (p); - } - return 0; -} diff --git a/examples/encode2047.c b/examples/encode2047.c deleted file mode 100644 index b5b0dde36..000000000 --- a/examples/encode2047.c +++ /dev/null @@ -1,206 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 2005, 2006, 2007, 2010 Free Software Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include - -#include - -/* Replace all octal escapes in BUF with the corresponding characters. */ -static void -decode_octal (char *buf) -{ - char *p; - unsigned i, n; - - for (p = buf; *p;) - { - if (*buf == '\\') - { - buf++; - switch (*buf) - { - case 'a': - *p++ = '\a'; - buf++; - break; - - case 'b': - *p++ = '\b'; - buf++; - break; - - case 'f': - *p++ = '\f'; - buf++; - break; - - case 'n': - *p++ = '\n'; - buf++; - break; - - case 'r': - *p++ = '\r'; - buf++; - break; - - case 't': - *p++ = '\t'; - buf++; - break; - - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - n = 0; - for (i = 0; i < 3; i++, buf++) - { - unsigned x = *(unsigned char*)buf - '0'; - if (x > 7) - break; - n <<= 3; - n += x; - } - if (i != 3) - { - buf -= i; - *p++ = '\\'; - } - else - *p++ = n; - break; - - default: - *p++ = '\\'; - *p++ = *buf++; - break; - } - } - else - *p++ = *buf++; - } - *p = 0; -} - -int -main (int argc, char *argv[]) -{ - int c; - char buf[256]; - char vbuf[256]; - char *charset = strdup ("iso-8859-1"); - char *encoding = strdup ("quoted-printable"); - int octal = 0; - - while ((c = getopt (argc, argv, "c:e:hot")) != EOF) - switch (c) - { - case 'c': - free (charset); - charset = strdup (optarg); - break; - - case 'e': - free (encoding); - encoding = strdup (optarg); - break; - - case 'o': - octal = 1; - break; - - case 't': - octal = 0; - break; - - case 'h': - printf ("usage: %s [-c charset] [-e encoding] [-ot]\n", argv[0]); - exit (0); - - default: - exit (1); - } - - while (fgets (buf, sizeof (buf), stdin)) - { - int len; - char *p = NULL; - char *cmd; - int rc; - - len = strlen (buf); - if (len > 0 && buf[len - 1] == '\n') - buf[len - 1] = 0; - strncpy(vbuf, buf, sizeof vbuf); - cmd = vbuf; - if (cmd[0] == '\\') - { - if (cmd[1] == 0) - { - fprintf (stderr, "Unfinished command\n"); - continue; - } - - for (p = cmd + 2; *p && *p == ' '; p++) - ; - switch (cmd[1]) - { - case 'c': - free (charset); - charset = strdup (p); - continue; - - case 'e': - free (encoding); - encoding = strdup (p); - continue; - - case 'o': - octal = 1; - continue; - - case 't': - octal = 0; - continue; - - case '\\': - cmd++; - break; - - default: - fprintf (stderr, "Unknown command\n"); - continue; - } - } - - if (octal) - decode_octal (cmd); - - rc = mu_rfc2047_encode (charset, encoding, cmd, &p); - printf ("%s=> %s\n", buf, mu_strerror (rc)); - if (p) - printf ("%s\n", p); - free (p); - } - return 0; -} diff --git a/examples/mailcap.c b/examples/mailcap.c deleted file mode 100644 index cacb752e9..000000000 --- a/examples/mailcap.c +++ /dev/null @@ -1,102 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 1999, 2000, 2001, 2004, 2007, 2009, 2010 Free Software - Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include -#include - -int -main (int argc, char **argv) -{ - mu_stream_t stream = NULL; - int status = 0; - char *file = argc == 1 ? "/etc/mailcap" : argv[1]; - mu_mailcap_t mailcap = NULL; - - status = mu_file_stream_create (&stream, file, MU_STREAM_READ); - if (status) - { - mu_error ("cannot create file stream %s: %s", - file, mu_strerror (status)); - exit (1); - } - - status = mu_stream_open (stream); - if (status) - { - mu_error ("cannot open file stream %s: %s", - file, mu_strerror (status)); - exit (1); - } - - status = mu_mailcap_create (&mailcap, stream); - if (status == 0) - { - int i; - size_t count = 0; - char buffer[256]; - - mu_mailcap_entries_count (mailcap, &count); - for (i = 1; i <= count; i++) - { - size_t j; - mu_mailcap_entry_t entry = NULL; - size_t fields_count = 0; - - printf ("entry[%d]\n", i); - - mu_mailcap_get_entry (mailcap, i, &entry); - - /* typefield. */ - mu_mailcap_entry_get_typefield (entry, buffer, - sizeof (buffer), NULL); - printf ("\ttypefield: %s\n", buffer); - - /* view-command. */ - mu_mailcap_entry_get_viewcommand (entry, buffer, - sizeof (buffer), NULL); - printf ("\tview-command: %s\n", buffer); - - /* fields. */ - mu_mailcap_entry_fields_count (entry, &fields_count); - for (j = 1; j <= fields_count; j++) - { - int status = mu_mailcap_entry_get_field (entry, j, buffer, - sizeof (buffer), NULL); - if (status) - { - mu_error ("cannot retrieve field %lu: %s", - (unsigned long) j, - mu_strerror (status)); - break; - } - printf ("\tfields[%lu]: %s\n", (unsigned long) j, buffer); - } - printf ("\n"); - } - mu_mailcap_destroy (&mailcap); - } - - return 0; -} diff --git a/examples/mimetest.c b/examples/mimetest.c deleted file mode 100644 index e440b372e..000000000 --- a/examples/mimetest.c +++ /dev/null @@ -1,296 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 1999, 2000, 2001, 2005, 2007, 2009, 2010 Free Software - Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include -#include -#include - -#include - -#include - -void message_display_parts(mu_message_t msg, int indent); - -const char *from; -const char *subject; -const char *charset; -int print_attachments; -int indent_level = 4; - -void -print_file (const char *fname, int indent) -{ - char buf[128]; - FILE *fp = fopen (fname, "r"); - - if (!fp) - { - fprintf (stderr, "can't open file %s: %s", fname, strerror (errno)); - return; - } - - while (fgets (buf, sizeof buf, fp)) - printf ("%*.*s%s", indent, indent, "", buf); - fclose (fp); - unlink (fname); -} - -int -main (int argc, char **argv) -{ - mu_mailbox_t mbox = NULL; - size_t i; - size_t count = 0; - char *mailbox_name; - int debug = 0; - - for (i = 1; i < argc; i++) - { - if (strcmp (argv[i], "-d") == 0) - debug = 1; - else if (strcmp (argv[i], "-p") == 0) - print_attachments = 1; - else if (strcmp (argv[i], "-i") == 0) - { - if (++i == argc) - { - mu_error ("-i requires argument"); - exit (1); - } - indent_level = strtoul (argv[i], NULL, 0); - } - else if (strcmp (argv[i], "-c") == 0) - { - if (++i == argc) - { - mu_error ("-c requires argument"); - exit (1); - } - charset = argv[i]; - } - else - break; - } - - mailbox_name = argv[i]; - - /* Registration. */ - mu_registrar_record (mu_imap_record); - mu_registrar_record (mu_pop_record); - mu_registrar_record (mu_mbox_record); - mu_registrar_set_default_record (mu_mbox_record); - - MU_ASSERT (mu_mailbox_create_default (&mbox, mailbox_name)); - - /* Debugging trace. */ - if (debug) - { - mu_debug_t debug; - mu_mailbox_get_debug (mbox, &debug); - mu_debug_set_level (debug, MU_DEBUG_LEVEL_UPTO (MU_DEBUG_PROT)); - } - - /* Open the mailbox for reading only. */ - MU_ASSERT (mu_mailbox_open (mbox, MU_STREAM_RDWR)); - - /* Iterate through the entire message set. */ - MU_ASSERT (mu_mailbox_messages_count (mbox, &count)); - - for (i = 1; i <= count; ++i) - { - mu_message_t msg; - mu_header_t hdr; - size_t nparts; - size_t msize, nlines; - - MU_ASSERT (mu_mailbox_get_message (mbox, i, &msg)); - MU_ASSERT (mu_message_size (msg, &msize)); - MU_ASSERT (mu_message_lines (msg, &nlines)); - MU_ASSERT (mu_message_get_header (msg, &hdr)); - if (mu_header_sget_value (hdr, MU_HEADER_FROM, &from)) - from = ""; - if (mu_header_sget_value (hdr, MU_HEADER_SUBJECT, &subject)) - subject = ""; - printf ("Message: %lu\n", (unsigned long) i); - printf ("From: %s\n", from); - printf ("Subject: %s\n", subject); - - MU_ASSERT (mu_message_get_num_parts (msg, &nparts)); - printf ("Number of parts in message - %lu\n", - (unsigned long) nparts); - printf ("Total message size - %lu/%lu\n", - (unsigned long) msize, (unsigned long) nlines); - message_display_parts (msg, 0); - } - mu_mailbox_close (mbox); - mu_mailbox_destroy (&mbox); - return 0; -} - -char buf[2048]; - -static void -print_message_part_sizes (mu_message_t part, int indent) -{ - mu_body_t body; - mu_header_t hdr; - size_t msize, mlines, hsize, hlines, bsize, blines; - - MU_ASSERT (mu_message_size (part, &msize)); - MU_ASSERT (mu_message_lines (part, &mlines)); - MU_ASSERT (mu_message_get_header (part, &hdr)); - MU_ASSERT (mu_header_size (hdr, &hsize)); - MU_ASSERT (mu_header_lines (hdr, &hlines)); - MU_ASSERT (mu_message_get_body (part, &body)); - MU_ASSERT (mu_body_size (body, &bsize)); - MU_ASSERT (mu_body_lines (body, &blines)); - printf ("%*.*sMessage part size - %lu/%lu: %lu/%lu, %lu/%lu\n", - indent, indent, "", - (unsigned long) msize, (unsigned long) mlines, - (unsigned long) hsize, (unsigned long) hlines, - (unsigned long) bsize, (unsigned long) blines); -} - -void -message_display_parts (mu_message_t msg, int indent) -{ - int ret, j; - size_t nparts; - mu_message_t part; - mu_header_t hdr; - mu_stream_t str; - mu_body_t body; - int ismulti; - size_t nbytes; - - /* How many parts does the message has? */ - if ((ret = mu_message_get_num_parts (msg, &nparts)) != 0) - { - fprintf (stderr, "mu_message_get_num_parts - %s\n", mu_strerror (ret)); - exit (2); - } - - /* Iterate through all the parts. - Treat type "message/rfc822" differently, since it is a message of - its own that can have other subparts(recursive). */ - for (j = 1; j <= nparts; j++) - { - int status; - const char *hvalue; - char *type = NULL; - const char *encoding = ""; - - MU_ASSERT (mu_message_get_part (msg, j, &part)); - MU_ASSERT (mu_message_get_header (part, &hdr)); - status = mu_header_sget_value (hdr, MU_HEADER_CONTENT_TYPE, - &hvalue); - if (status == MU_ERR_NOENT) - /* nothing */; - else if (status != 0) - mu_error ("Cannot get header value: %s", mu_strerror (status)); - else - { - status = mu_mimehdr_aget_disp (hvalue, &type); - if (status) - mu_error ("Cannot extract content type field: %s", - mu_strerror (status)); - } - printf ("%*.*sType of part %d = %s\n", indent, indent, "", - j, type ? type : ""); - print_message_part_sizes (part, indent); - if (mu_header_sget_value (hdr, MU_HEADER_CONTENT_TRANSFER_ENCODING, - &encoding)) - encoding = ""; - ismulti = 0; - if ((type - && mu_c_strcasecmp (type, "message/rfc822") == 0) - || (mu_message_is_multipart (part, &ismulti) == 0 && ismulti)) - { - if (!ismulti) - MU_ASSERT (mu_message_unencapsulate (part, &part, NULL)); - - MU_ASSERT (mu_message_get_header (part, &hdr)); - if (mu_header_sget_value (hdr, MU_HEADER_FROM, &from)) - from = ""; - if (mu_header_sget_value (hdr, MU_HEADER_SUBJECT, &subject)) - subject = ""; - printf ("%*.*sEncapsulated message : %s\t%s\n", - indent, indent, "", from, subject); - printf ("%*.*sBegin\n", indent, indent, ""); - message_display_parts (part, indent + indent_level); - mu_message_destroy (&part, NULL); - } - else if (!type - || (mu_c_strcasecmp (type, "text/plain") == 0) - || (mu_c_strcasecmp (type, "text/html")) == 0) - { - printf ("%*.*sText Message\n", indent, indent, ""); - printf ("%*.*sBegin\n", indent, indent, ""); - mu_message_get_body (part, &body); - mu_body_get_streamref (body, &str); - /* Make sure the original body stream is not closed when - str gets destroyed */ - mu_filter_create (&str, str, encoding, MU_FILTER_DECODE, - MU_STREAM_READ); - - while (mu_stream_readline (str, buf, sizeof (buf), &nbytes) == 0 - && nbytes) - { - printf ("%*.*s%s", indent, indent, "", buf); - } - mu_stream_destroy (&str); - } - else - { - /* Save the attachements. */ - char *fname = NULL; - - mu_message_aget_decoded_attachment_name (part, charset, - &fname, NULL); - if (fname == NULL) - fname = mu_tempname (NULL); - - printf ("%*.*sAttachment - saving [%s]\n", indent, indent, "", - fname); - printf ("%*.*sBegin\n", indent, indent, ""); - if (charset) - { - mu_mime_io_buffer_t info; - mu_mime_io_buffer_create (&info); - mu_mime_io_buffer_set_charset (info, charset); - MU_ASSERT (mu_message_save_attachment (part, NULL, info)); - mu_mime_io_buffer_destroy (&info); - } - else - MU_ASSERT (mu_message_save_attachment (part, fname, NULL)); - if (print_attachments) - print_file (fname, indent); - free (fname); - } - printf ("\n%*.*sEnd\n", indent, indent, ""); - free (type); - } -} - diff --git a/examples/url-parse.c b/examples/url-parse.c deleted file mode 100644 index 82541b5fb..000000000 --- a/examples/url-parse.c +++ /dev/null @@ -1,144 +0,0 @@ -/* GNU Mailutils -- a suite of utilities for electronic mail - Copyright (C) 1999, 2000, 2001, 2007, 2009, 2010 Free Software - Foundation, Inc. - - GNU Mailutils is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Mailutils is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Mailutils; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA */ - -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -#include -#include -#include -#include -#include - -#define CAT2(a,b) a ## b - -#define GET_AND_PRINT(field,u,buf,status) \ - status = CAT2(mu_url_sget_,field) (u, &buf); \ - if (status == MU_ERR_NOENT) \ - buf = ""; \ - else if (status) \ - { \ - mu_error ("cannot get %s: %s", #field, mu_strerror (status)); \ - exit (1); \ - } \ - printf ("\t" #field " <%s>\n", buf) - -static void -print_fvpairs (mu_url_t url) -{ - size_t fvc, i; - char **fvp; - int rc = mu_url_sget_fvpairs (url, &fvc, &fvp); - if (rc) - { - mu_error ("cannot get F/V pairs: %s", mu_strerror (rc)); - exit (1); - } - if (fvc == 0) - return; - for (i = 0; i < fvc; i++) - printf ("\tparam[%lu] <%s>\n", (unsigned long) i, fvp[i]); -} - -static void -print_query (mu_url_t url) -{ - size_t qargc, i; - char **qargv; - int rc = mu_url_sget_query (url, &qargc, &qargv); - if (rc) - { - mu_error ("cannot get query: %s", mu_strerror (rc)); - exit (1); - } - if (qargc == 0) - return; - for (i = 0; i < qargc; i++) - printf ("\tquery[%lu] <%s>\n", (unsigned long) i, qargv[i]); -} - -int -main () -{ - char str[1024]; - long port = 0; - mu_url_t u = NULL; - - while (fgets (str, sizeof (str), stdin) != NULL) - { - int rc; - const char *buf; - mu_secret_t secret; - - str[strlen (str) - 1] = '\0'; /* chop newline */ - if (strspn (str, " \t") == strlen (str)) - continue; /* skip empty lines */ - if ((rc = mu_url_create (&u, str)) != 0) - { - fprintf (stderr, "mu_url_create %s ERROR: [%d] %s", - str, rc, mu_strerror (rc)); - exit (1); - } - if ((rc = mu_url_parse (u)) != 0) - { - printf ("%s => FAILED: [%d] %s\n", - str, rc, mu_strerror (rc)); - continue; - } - printf ("%s => SUCCESS\n", str); - - GET_AND_PRINT (scheme, u, buf, rc); - GET_AND_PRINT (user, u, buf, rc); - - rc = mu_url_get_secret (u, &secret); - if (rc == MU_ERR_NOENT) - printf ("\tpasswd <>\n"); - else if (rc) - { - mu_error ("cannot get %s: %s", "passwd", mu_strerror (rc)); - exit (1); - } - else - { - printf ("\tpasswd <%s>\n", mu_secret_password (secret)); - mu_secret_password_unref (secret); - } - - GET_AND_PRINT (auth, u, buf, rc); - GET_AND_PRINT (host, u, buf, rc); - - rc = mu_url_get_port (u, &port); - if (rc) - { - mu_error ("cannot get %s: %s", "port", mu_strerror (rc)); - exit (1); - } - printf ("\tport %ld\n", port); - - GET_AND_PRINT (path, u, buf, rc); - print_fvpairs (u); - print_query (u); - - mu_url_destroy (&u); - - } - return 0; -} diff --git a/frm/tests/Makefile.am b/frm/tests/Makefile.am index 647d10843..be7ac1011 100644 --- a/frm/tests/Makefile.am +++ b/frm/tests/Makefile.am @@ -23,7 +23,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) ## ------------ ## $(srcdir)/package.m4: $(top_srcdir)/configure.ac - { \ + $(AM_V_GEN){ \ echo '# Signature of the current package.'; \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ diff --git a/frm/tests/testsuite.at b/frm/tests/testsuite.at index eae8fc1bc..0afd41542 100644 --- a/frm/tests/testsuite.at +++ b/frm/tests/testsuite.at @@ -15,10 +15,7 @@ # along with GNU Mailutils. If not, see . # This file is part of Mailfromd testsuite. -# Require a reasonably recent autotest. -m4_version_prereq([2.52g]) - -m4_define([AT_SKIP_TEST],[exit 77]) +m4_include([testsuite.inc]) dnl ------------------------------------------------------------ dnl FRM_MAILBOX -- mailbox used for testing @@ -47,8 +44,6 @@ AT_INIT AT_TESTED([frm]) -m4_include([testsuite.inc]) - MUT_VERSION(frm) FRMTEST([no options],[frm00], diff --git a/include/mailutils/Makefile.am b/include/mailutils/Makefile.am index 098a9faef..9839c0a8b 100644 --- a/include/mailutils/Makefile.am +++ b/include/mailutils/Makefile.am @@ -20,7 +20,7 @@ BUILT_SOURCES=errno.h debug.h EXTRA_DIST=errno.hin debug.hm4 types.hin -errno.h: $(top_srcdir)/mailbox/errors errno.hin +errno.h: $(top_srcdir)/libmailutils/errors errno.hin $(AM_V_GEN)$(AWK) -f $(mu_aux_dir)/generr.awk $^ > $@ debug.h: $(mu_aux_dir)/debugdef.m4 debug.hm4 diff --git a/libmailutils/Makefile.am b/libmailutils/Makefile.am index f28b1bdbc..ea8d7389d 100644 --- a/libmailutils/Makefile.am +++ b/libmailutils/Makefile.am @@ -24,7 +24,7 @@ YLWRAP = $(SHELL) $(mu_aux_dir)/gylwrap AM_YFLAGS=-vt AM_LFLAGS=-dvp -SUBDIRS = testsuite +SUBDIRS = tests lib_LTLIBRARIES = libmailutils.la diff --git a/libmailutils/tests/Decode b/libmailutils/tests/Decode new file mode 100644 index 000000000..da6724734 --- /dev/null +++ b/libmailutils/tests/Decode @@ -0,0 +1,5 @@ +AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4 +OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx +cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq +q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj +5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w== diff --git a/libmailutils/tests/Encode b/libmailutils/tests/Encode new file mode 100644 index 000000000..c86626638 Binary files /dev/null and b/libmailutils/tests/Encode differ diff --git a/libmailutils/tests/Makefile.am b/libmailutils/tests/Makefile.am new file mode 100644 index 000000000..4cee19cfb --- /dev/null +++ b/libmailutils/tests/Makefile.am @@ -0,0 +1,100 @@ +# This file is part of GNU Mailutils. +# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# +# GNU Mailutils is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 3, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mailutils. If not, see . + +EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 +DISTCLEANFILES = atconfig $(check_SCRIPTS) +MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) + +## ------------ ## +## package.m4. ## +## ------------ ## + +$(srcdir)/package.m4: $(top_srcdir)/configure.ac + $(AM_V_GEN){ \ + echo '# Signature of the current package.'; \ + echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ + echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ + echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ + echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ + } >$(srcdir)/package.m4 + +# + +## -------------------------- ## +## Non-installable programs +## -------------------------- ## + +INCLUDES = @MU_LIB_COMMON_INCLUDES@ +noinst_PROGRAMS = \ + addr\ + argcv\ + decode2047\ + encode2047\ + fltst\ + mailcap\ + mimetest\ + url-parse + +LDADD =\ + ../../lib/libmuaux.la\ + ${MU_LIB_MBOX}\ + ${MU_LIB_IMAP}\ + ${MU_LIB_POP}\ + ${MU_LIB_AUTH}\ + @MU_AUTHLIBS@\ + ${MU_LIB_MAILUTILS} + +EXTRA_DIST += Encode Decode + +## ------------ ## +## Test suite. ## +## ------------ ## + +TESTSUITE_AT = \ + address.at\ + argcv.at\ + base64d.at\ + base64e.at\ + decode2047.at\ + encode2047.at\ + mailcap.at\ + mime.at\ + testsuite.at\ + url.at + +TESTSUITE = $(srcdir)/testsuite +M4=m4 + +AUTOTEST = $(AUTOM4TE) --language=autotest +$(TESTSUITE): package.m4 $(TESTSUITE_AT) + $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) -I $(top_srcdir)/testsuite testsuite.at -o $@.tmp + $(AM_V_at)mv $@.tmp $@ + +atconfig: $(top_builddir)/config.status + cd $(top_builddir) && ./config.status tests/$@ + +clean-local: + @test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean + +check-local: atconfig atlocal $(TESTSUITE) + @$(SHELL) $(TESTSUITE) + +# Run the test suite on the *installed* tree. +#installcheck-local: +# $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin + + diff --git a/libmailutils/tests/addr.c b/libmailutils/tests/addr.c new file mode 100644 index 000000000..7e91f9953 --- /dev/null +++ b/libmailutils/tests/addr.c @@ -0,0 +1,103 @@ +/* GNU Mailutils -- a suite of utilities for electronic mail + Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2010 Free Software + Foundation, Inc. + + GNU Mailutils is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GNU Mailutils is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Mailutils; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301 USA */ + +#ifdef HAVE_CONFIG_H +# include +#endif +#include +#include +#include + +#include +#include +#include +#include + +#define EPARSE MU_ERR_NOENT + +int +main (int argc, char *argv[]) +{ + char *str; + size_t i; + size_t pcount = 0; + int status; + const char *buf; + mu_address_t address = NULL; + struct mu_address hint; + + if (argc != 2) + { + fprintf (stderr, "usage: %s address\n", argv[0]); + return 2; + } + str = argv[1]; + + hint.domain = "localhost"; + status = mu_address_create_hint (&address, str, &hint, MU_ADDR_HINT_DOMAIN); + mu_address_get_count (address, &pcount); + + if (status) + { + fprintf (stderr, "%s\n", mu_errname (status)); + return 1; + } + else + printf ("naddr: %lu\n", (unsigned long) pcount); + + for (i = 1; i <= pcount; i++) + { + int isgroup; + + mu_address_is_group (address, i, &isgroup); + printf ("%lu. ", (unsigned long) i); + + if (isgroup) + { + mu_address_sget_personal (address, i, &buf); + printf ("group <%s>:\n", buf); + } + else + { + mu_address_sget_email (address, i, &buf); + printf ("email <%s>:\n", buf); + } + + if (mu_address_sget_personal (address, i, &buf) == 0 && buf && !isgroup) + printf ("personal <%s>\n", buf); + + if (mu_address_sget_comments (address, i, &buf) == 0 && buf) + printf ("comments <%s>\n", buf); + + if (mu_address_sget_local_part (address, i, &buf) == 0 && buf) + { + printf ("local-part <%s>", buf); + + if (mu_address_sget_domain (address, i, &buf) == 0 && buf) + printf (" domain <%s>", buf); + + printf ("\n"); + } + + if (mu_address_sget_route (address, i, &buf) == 0 && buf) + printf ("route <%s>\n", buf); + } + mu_address_destroy (&address); + return 0; +} diff --git a/libmailutils/tests/address.at b/libmailutils/tests/address.at new file mode 100644 index 000000000..9ce9fa3ae --- /dev/null +++ b/libmailutils/tests/address.at @@ -0,0 +1,1080 @@ +# This file is part of GNU Mailutils. -*- Autotest -*- +# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# +# GNU Mailutils is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 3, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Mailutils. If not, see . +# This file is part of Mailfromd testsuite. + +dnl ------------------------------------------------------------ +dnl TESTADDR(ADDR, [KW = `'], [STATUS = `0'], [STDOUT = `'], +dnl [STDERR = `'], [RUN-IF-FAIL], [RUN-IF-PASS]) +dnl +m4_define([TESTADDR],[ +AT_SETUP([Address: [$1]]) +AT_KEYWORDS([address $2]) +AT_CHECK([addr '[$1]'],m4_shift(m4_shift($@))) +AT_CLEANUP +]) + +TESTADDR([Sam <@[matrix (smtp)], @[nexus: [node 12]]:sroberts@[10].[1]>],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +TESTADDR([a@b,z@y],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([,a@b,z@y],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a@b,z@y,],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([,a@b,z@y,],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a@b,,z@y],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a@b,,,z@y],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([,,,a@b,,,],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([,a@b],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([a@b,],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([,],[], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([,,],[], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([,,],[], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([a group: a@b,z@y;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: ,a@b,z@y;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: a@b,z@y,;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: ,a@b,z@y,;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: a@b,,z@y;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: a@b,,,z@y;],[group], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([a group: ,,,a@b,,, ;],[group], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([a group: ,a@b ;],[group], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([a group: a@b, ;],[group], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([a group: , ;],[group], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([a group: ,, ;],[group], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([a group: ,, ;],[group], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([Sam <@[matrix (smtp)], @[nexus: [node 12]]:sroberts@[10].[1]> ;],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +TESTADDR([Aliens: Sam <@[matrix (smtp)]: sam@sam>, sroberts@[10].[1];],[], +[0], +[[naddr: 2 +1. email : +personal +local-part domain +route <@[matrix (smtp)]> +2. email : +local-part domain <[10].[1]> +]]) + +TESTADDR([lo@hi, Aliens: Sam <@[matrix (smtp)]: sam@sam>, sroberts@[10].[1];], +[], +[0], +[[naddr: 3 +1. email : +local-part domain +2. email : +personal +local-part domain +route <@[matrix (smtp)]> +3. email : +local-part domain <[10].[1]> +]]) + +TESTADDR([Aliens: Sam <@[matrix (smtp)]: sam@sam>, sroberts@[10].[1];, hi@lo], +[], +[0], +[[naddr: 3 +1. email : +personal +local-part domain +route <@[matrix (smtp)]> +2. email : +local-part domain <[10].[1]> +3. email : +local-part domain +]]) + +TESTADDR([lo@hi, Aliens: Sam <@[matrix (smtp)]: sam@sam>, sroberts@[10].[1];, hi@lo], +[], +[0], +[[naddr: 4 +1. email : +local-part domain +2. email : +personal +local-part domain +route <@[matrix (smtp)]> +3. email : +local-part domain <[10].[1]> +4. email : +local-part domain +]]) + +TESTADDR([Sam <@mail2.uniserve.com:sroberts@uniserve.com>],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +route <@mail2.uniserve.com> +]) + +TESTADDR([< (hey) @ (hey, )smtp1.sympatico.ca, mail2.uniserve.com (hoo!):sroberts@uniserve.com>],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +TESTADDR([hw@570.com (Hardware Support Account)],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain <570.com> +]) + +TESTADDR([list-ietf-wg-apps-drums@faerber.muc.de (=?ISO-8859-1?Q?Claus_F=E4rber?=)],[], +[0], +[naddr: 1 +1. email : +personal <=?ISO-8859-1?Q?Claus_F=E4rber?=> +local-part domain +]) + +TESTADDR([(mutt #369), guug-bugs-closed@guug.de (#369)],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +personal <#369> +local-part domain +]) + +dnl -------------------------------------------------------------------------- +dnl FIXME: +m4_if([TESTADDR(["'Aernoudt Bottemanne'" ],[], +[0], +[naddr: 1 +1. email : +personal <'Aernoudt Bottemanne'> +local-part domain +]) + +TESTADDR(["'Haag, Ullrich - MBDC'" ,],[], +[0], +[naddr: 1 +1. email : +personal <'Haag, Ullrich - MBDC'> +local-part domain +]) + +TESTADDR(["'Michael C. Ibarra'" , arl@q7.net, Al ], +[], +[0], +[naddr: 3 +1. email : +personal <'Michael C. Ibarra'> +local-part domain +2. email : +local-part domain +3. email : +personal +local-part domain +]) + +TESTADDR(["'Sam Roberts'" ],[], +[0], +[naddr: 1 +1. email : +personal <'Sam Roberts'> +local-part domain +]) + +TESTADDR(["'paul@pitbull-productions.com'" ,],[], +[0], +[naddr: 1 +1. email : +personal <'paul@pitbull-productions.com'> +local-part domain +]) + +TESTADDR(["'sam@cogent.ca'" , "'sroberts@uniserve.com'"],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +TESTADDR(["'sroberts\@certicom\.ca'" ],[] +[0], +[naddr: 1 +1. email : +personal <'sroberts@certicom.ca'> +local-part domain +]) + +]) +dnl -------------------------------------------------------------------------- + +TESTADDR(["=?iso-8859-1?Q?Juan_Carlos_Marcos_Rodr=EDguez?=" ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?Juan_Carlos_Marcos_Rodr=EDguez?=> +local-part domain +]) + +TESTADDR(["Christian Edward Gruber" ,],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["D. J. Bernstein" <"djb- "@cr.yp.to>],[], +[0], +[naddr: 1 +1. email <"djb- "@cr.yp.to>: +personal +local-part domain +]) + +TESTADDR(["D. J. Bernstein" , drums@cs.utk.edu],[], +[0], +[naddr: 2 +1. email : +personal +local-part domain +2. email : +local-part domain +]) + +TESTADDR(["Dave Sill ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Dave \(work\) Baerg \(E-mail\)" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Demian" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Detailed Revision/Update of Message Standards" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Fred" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain <__nowhere__.users.sourceforge.net> +]) + +TESTADDR(["Haag, Ullrich - MBDC" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Jacob Palme" , ],[], +[0], +[naddr: 2 +1. email : +personal +local-part domain +2. email : +local-part domain +]) + +dnl FIXME +m4_if([ +TESTADDR(["Jakob 'sparky' Kaivo" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) +]) + +TESTADDR(["Lee R. Copp" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Lionel Johnson" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["Martin [Keso] Keseg" ],[], +[0], +[[naddr: 1 +1. email : +personal +local-part domain +]]) + +TESTADDR(["}{ristoph" ],[], +[0], +[naddr: 1 +1. email : +personal <}{ristoph> +local-part domain +]) + +TESTADDR(["fmartens-2000" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +dnl FIXME +m4_if([ +TESTADDR(["g'o'tz ohnesorge" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +]) + +TESTADDR(["gao jie" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["gnupg-devel@gnupg.org" ], +[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["gpg-devel" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["jigang" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["misc@openbsd.org" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["misc@openbsd.org" , brian@Awfulhak.org],[], +[0], +[naddr: 2 +1. email : +personal +local-part domain +2. email : +local-part domain +]) + +TESTADDR(["mutt-dev @ mutt . orgThomas Roessler" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR(["zwk@f36.n480.z2.fidonet.org" ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +dnl FIXME +m4_if([ +TESTADDR(['Dan Dall'Acqua' , 'Dave Shyong'],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +]) + +TESTADDR([0xdeadbeef-request@petting-zoo.net],[], +[0], +[naddr: 1 +1. email <0xdeadbeef-request@petting-zoo.net>: +local-part <0xdeadbeef-request> domain +]) + +TESTADDR([102023-00406421@cnxt19932218.conexant.com],[], +[0], +[naddr: 1 +1. email <102023-00406421@cnxt19932218.conexant.com>: +local-part <102023-00406421> domain +]) + +TESTADDR([218164.24.43@jobcontrolcenter.com],[], +[0], +[naddr: 1 +1. email <218164.24.43@jobcontrolcenter.com>: +local-part <218164.24.43> domain +]) + +TESTADDR([<0xdeadbeef-request@petting-zoo.net>],[], +[0], +[naddr: 1 +1. email <0xdeadbeef-request@petting-zoo.net>: +local-part <0xdeadbeef-request> domain +]) + +TESTADDR([<>],[], +[0], +[naddr: 1 +1. email <>: +]) + +TESTADDR([],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([],[], +[1], +[], +[MU_ERR_BAD_822_FORMAT +]) + +TESTADDR([],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([, ,],[], +[0], +[naddr: 2 +1. email : +local-part domain +2. email : +local-part domain +]) + +TESTADDR([],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([=?ISO-8859-1?Q?Kolbj=F8rn_Barmen?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?ISO-8859-1?Q?Kolbj=F8rn_Barmen?=> +local-part domain +]) + +TESTADDR([=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?=> +local-part domain +]) + +TESTADDR([=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= ,],[], +[0], +[naddr: 1 +1. email : +personal <=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?=> +local-part domain +]) + +TESTADDR([=?US-ASCII?Q?gary=5Fc?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?US-ASCII?Q?gary=5Fc?=> +local-part domain +]) + +TESTADDR([=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E?= Meunier <0@pervalidus.net>],[], +[0], +[naddr: 1 +1. email <0@pervalidus.net>: +personal <=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E?= Meunier> +local-part <0> domain +]) + +TESTADDR([=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E?= Meunier <0@pervalidus.net>,],[], +[0], +[naddr: 1 +1. email <0@pervalidus.net>: +personal <=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E?= Meunier> +local-part <0> domain +]) + +TESTADDR([=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E_Meunier?= <0@pervalidus.net>],[], +[0], +[naddr: 1 +1. email <0@pervalidus.net>: +personal <=?iso-8859-1?Q?Fr=E9d=E9ric_L_=2E_W_=2E_Meunier?=> +local-part <0> domain +]) + +TESTADDR([=?iso-8859-1?Q?J=F8rgen_Thomsen?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?J=F8rgen_Thomsen?=> +local-part domain +]) + +TESTADDR([=?iso-8859-1?Q?Jos=3F_C=2E_Garc=EDa_Sogo?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?Jos=3F_C=2E_Garc=EDa_Sogo?=> +local-part domain +]) + +TESTADDR([=?iso-8859-1?Q?Mikko_H=E4nninen?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?Mikko_H=E4nninen?=> +local-part domain +]) + +TESTADDR([=?iso-8859-1?Q?Mikko_H=E4nninen?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?Mikko_H=E4nninen?=> +local-part domain +]) + +TESTADDR([=?iso-8859-1?Q?R=E9mi_Guyomarch?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?R=E9mi_Guyomarch?=> +local-part domain <321.net> +]) + +TESTADDR([=?iso-8859-1?Q?Ulf_M=F6ller?= ],[], +[0], +[naddr: 1 +1. email : +personal <=?iso-8859-1?Q?Ulf_M=F6ller?=> +local-part domain +]) + +TESTADDR([ANDREW MARTIN ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Abhay Ghaisas , mutt-dev@mutt.org],[], +[0], +[naddr: 2 +1. email : +personal +local-part domain +2. email : +local-part domain +]) + +TESTADDR([Brian Salter-Duke ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Catharine Shyong ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([DRUMS-Last-Call:;],[], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([Detailed Revision/Update of Message Standards ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Eric Allman ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Gary ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([IETF working group on revision of mail standards ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([IETF-Announce:;],[], +[1], +[], +[MU_ERR_EMPTY_ADDRESS +]) + +TESTADDR([IETF-Announce:;, drums@cs.utk.edu],[], +[0], +[naddr: 1 +1. email : +local-part domain +]) + +TESTADDR([Jean-Baptiste Marchand ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Jonathan Rozes ],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain +]) + +TESTADDR([Jose "C." Garcia Sogo],[], +[0], +[naddr: 1 +1. email : +personal +local-part domain