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); +} | 
