diff options
Diffstat (limited to 'rfc822/reftest.c')
| -rw-r--r-- | rfc822/reftest.c | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/rfc822/reftest.c b/rfc822/reftest.c new file mode 100644 index 0000000..1d2ea9a --- /dev/null +++ b/rfc822/reftest.c @@ -0,0 +1,367 @@ +/* +** Copyright 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +/* +*/ + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#if HAVE_STRINGS_H +#include <strings.h> +#endif + +#if HAVE_LOCALE_H +#include <locale.h> +#endif + +#include "rfc822.h" +#include "imaprefs.h" + + +static void test1() +{ +struct imap_refmsgtable *mt=rfc822_threadalloc(); +char buf[20]; + + strcpy(buf, "a@b"); + rfc822_threadallocmsg(mt, buf); + strcpy(buf, "c@d"); + rfc822_threadallocmsg(mt, buf); + + printf("%s\n", (rfc822_threadsearchmsg(mt, "a@b") + ? "found":"not found")); + printf("%s\n", (rfc822_threadsearchmsg(mt, "c@d") + ? "found":"not found")); + printf("%s\n", (rfc822_threadsearchmsg(mt, "e@f") + ? "found":"not found")); + + rfc822_threadfree(mt); +} + +static void prtree(struct imap_refmsg *m) +{ + printf("<%s>", m->msgid ? m->msgid:""); + + if (m->isdummy) + { + printf(" (dummy)"); + } + + printf(".parent="); + if (m->parent) + printf("<%s>", m->parent->msgid ? m->parent->msgid:""); + else + printf("ROOT"); + + printf("\n"); + + for (m=m->firstchild; m; m=m->nextsib) + prtree(m); +} + +static void prpc(struct imap_refmsgtable *mt) +{ + struct imap_refmsg *root=rfc822_threadgetroot(mt), *m; + + if (!root) + return; + + for (m=root->firstchild; m; m=m->nextsib) + prtree(m); + + printf("\n\n"); +} + +static void test2() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<1>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<2>", + "<1>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<4>", + "<1> <2> <3>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + prpc(mt); + rfc822_threadfree(mt); +} + +static void test3() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<4>", + "<2> <1> <3>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<3>", + "<1> <2>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<2>", + "<1>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<1>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + prpc(mt); + rfc822_threadfree(mt); +} + +static void test4() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<1>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<2>", "<1>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<4>", "<1> <2> <3>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + prpc(mt); + rfc822_threadprune(mt); + prpc(mt); + rfc822_threadfree(mt); +} + +static void test5() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<4>", "<1> <2> <3>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<3>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + prpc(mt); + rfc822_threadprune(mt); + prpc(mt); + rfc822_threadfree(mt); +} + +static void prsubj(struct imap_refmsgtable *p) +{ + struct imap_subjlookup *s; + int i; + + for (i=0; i<sizeof(p->subjtable)/sizeof(p->subjtable[0]); i++) + for (s=p->subjtable[i]; s; s=s->nextsubj) + printf("subject(%s)=<%s>\n", s->subj, + s->msg->msgid ? s->msg->msgid:""); + printf("\n\n"); +} + +static void test6() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<message1>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message10>", NULL, + "subject 2", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 2); + + rfc822_threadmsg(mt, "<message3>", "<message2>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 3); + + rfc822_threadmsg(mt, "<message11>", NULL, + "Re: subject 4", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 4); + + rfc822_threadmsg(mt, "<message12>", NULL, + "subject 4", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 5); + + rfc822_threadmsg(mt, "<message13>", NULL, + "subject 5", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 6); + + rfc822_threadmsg(mt, "<message14>", NULL, + "re: subject 5", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 7); + + rfc822_threadprune(mt); + rfc822_threadsortsubj(rfc822_threadgetroot(mt)); + rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt)); + prpc(mt); + prsubj(mt); + rfc822_threadfree(mt); +} + +static void test7() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<message1>", "<message1-dummy>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message2>", "<message2-dummy>", + "subject 1", + "Thu, 29 Jun 2000 14:41:58 -0700", 0, 1); + rfc822_threadprune(mt); + rfc822_threadsortsubj(rfc822_threadgetroot(mt)); + rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt)); + prpc(mt); + prsubj(mt); + rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); + prpc(mt); + rfc822_threadfree(mt); +} + +static void test8() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<message4>", NULL, + "subject 2", + "Thu, 29 Jun 2000 14:41:51 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message2>", NULL, + "subject 1", + "Thu, 29 Jun 2000 14:41:52 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message1>", "<message1-dummy>", + "subject 1", + "Thu, 29 Jun 2000 14:41:53 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message3>", NULL, + "Re: subject 2", + "Thu, 29 Jun 2000 14:41:54 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message10>", NULL, + "subject 10", + "Thu, 29 Jun 2000 14:41:55 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message11>", NULL, + "subject 10", + "Thu, 29 Jun 2000 14:41:56 -0700", 0, 1); + + rfc822_threadprune(mt); + rfc822_threadsortsubj(rfc822_threadgetroot(mt)); + rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt)); + prpc(mt); + prsubj(mt); + rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); + prpc(mt); + rfc822_threadfree(mt); +} + +static void test9() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<message1>", NULL, + "subject 1", + "Thu, 20 Jun 2000 14:41:55 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message2>", NULL, + "subject 1", + "Thu, 19 Jun 2000 14:41:51 -0700", 0, 2); + + rfc822_threadmsg(mt, "<message3>", NULL, + "subject 1", + "Thu, 21 Jun 2000 14:41:56 -0700", 0, 3); + + rfc822_threadmsg(mt, "<message4>", "<message2>", + "subject 2", + "Thu, 21 Jun 2000 14:41:54 -0700", 0, 6); + + rfc822_threadmsg(mt, "<message5>", "<message2>", + "subject 2", + "Thu, 21 Jun 2000 14:41:53 -0700", 0, 5); + + rfc822_threadmsg(mt, "<message6>", "<message2>", + "subject 2", + "Thu, 20 Jun 2000 14:41:52 -0700", 0, 4); + + + rfc822_threadprune(mt); + rfc822_threadsortsubj(rfc822_threadgetroot(mt)); + rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt)); + rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); + rfc822_threadsortbydate(mt); + prpc(mt); + rfc822_threadfree(mt); +} + +static void test10() +{ + struct imap_refmsgtable *mt=rfc822_threadalloc(); + + rfc822_threadmsg(mt, "<message1>", NULL, + "subject 1", + "Thu, 20 Jun 2000 14:41:58 -0700", 0, 1); + + rfc822_threadmsg(mt, "<message4>", "<message1>", + "subject 2", + "Thu, 21 Jun 2000 14:41:58 -0700", 0, 6); + + rfc822_threadmsg(mt, "<message1>", NULL, + "subject 2", + "Thu, 21 Jun 2000 14:41:58 -0700", 0, 5); + + rfc822_threadmsg(mt, "<message4>", "<message1>", + "subject 2", + "Thu, 21 Jun 2000 14:41:58 -0700", 0, 6); + + rfc822_threadprune(mt); + rfc822_threadsortsubj(rfc822_threadgetroot(mt)); + rfc822_threadgathersubj(mt, rfc822_threadgetroot(mt)); + rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt)); + rfc822_threadsortbydate(mt); + prpc(mt); + rfc822_threadfree(mt); +} + +int main(int argc, char **argv) +{ + +#if HAVE_SETLOCALE + setlocale(LC_ALL, "C"); +#endif + + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + test7(); + test8(); + test9(); + test10(); + return (0); +} |
