352 lines
7.3 KiB
C
352 lines
7.3 KiB
C
/*
|
|
** Copyright 2000 Double Precision, Inc.
|
|
** See COPYING for distribution information.
|
|
*/
|
|
|
|
/*
|
|
** $Id$
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
#include "rfc822.h"
|
|
#include "imaprefs.h"
|
|
|
|
|
|
static void test1()
|
|
{
|
|
struct imap_refmsgtable *mt=rfc822_threadalloc();
|
|
char buf[20];
|
|
struct imap_refmsg *p;
|
|
|
|
strcpy(buf, "a@b");
|
|
p=rfc822_threadallocmsg(mt, buf);
|
|
strcpy(buf, "c@d");
|
|
p=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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<2>",
|
|
"<1>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<4>",
|
|
"<1> <2> <3>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<3>",
|
|
"<1> <2>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<2>",
|
|
"<1>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<1>", NULL,
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<2>", "<1>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<4>", "<1> <2> <3>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<3>", NULL,
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message10>", NULL,
|
|
"subject 2",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message3>", "<message2>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message11>", NULL,
|
|
"Re: subject 4",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message12>", NULL,
|
|
"subject 4",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message13>", NULL,
|
|
"subject 5",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message14>", NULL,
|
|
"re: subject 5",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadprune(mt);
|
|
rfc822_threadsortsubj(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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message2>", "<message2-dummy>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
rfc822_threadprune(mt);
|
|
rfc822_threadsortsubj(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:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message2>", NULL,
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message1>", "<message1-dummy>",
|
|
"subject 1",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message3>", NULL,
|
|
"Re: subject 2",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message10>", NULL,
|
|
"subject 10",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message11>", NULL,
|
|
"subject 10",
|
|
"Thu, 29 Jun 2000 14:41:58 -0700", 1);
|
|
|
|
rfc822_threadprune(mt);
|
|
rfc822_threadsortsubj(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:58 -0700", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message2>", NULL,
|
|
"subject 1",
|
|
"Thu, 19 Jun 2000 14:41:58 -0700", 2);
|
|
|
|
rfc822_threadmsg(mt, "<message3>", NULL,
|
|
"subject 1",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 3);
|
|
|
|
rfc822_threadmsg(mt, "<message4>", "<message2>",
|
|
"subject 2",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 6);
|
|
|
|
rfc822_threadmsg(mt, "<message5>", "<message2>",
|
|
"subject 2",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 5);
|
|
|
|
rfc822_threadmsg(mt, "<message6>", "<message2>",
|
|
"subject 2",
|
|
"Thu, 20 Jun 2000 14:41:58 -0700", 4);
|
|
|
|
|
|
rfc822_threadprune(mt);
|
|
rfc822_threadsortsubj(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", 1);
|
|
|
|
rfc822_threadmsg(mt, "<message4>", "<message1>",
|
|
"subject 2",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 6);
|
|
|
|
rfc822_threadmsg(mt, "<message1>", NULL,
|
|
"subject 2",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 5);
|
|
|
|
rfc822_threadmsg(mt, "<message4>", "<message1>",
|
|
"subject 2",
|
|
"Thu, 21 Jun 2000 14:41:58 -0700", 6);
|
|
|
|
rfc822_threadprune(mt);
|
|
rfc822_threadsortsubj(mt, rfc822_threadgetroot(mt));
|
|
rfc822_threadmergesubj(mt, rfc822_threadgetroot(mt));
|
|
rfc822_threadsortbydate(mt);
|
|
prpc(mt);
|
|
rfc822_threadfree(mt);
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
test1();
|
|
test2();
|
|
test3();
|
|
test4();
|
|
test5();
|
|
test6();
|
|
test7();
|
|
test8();
|
|
test9();
|
|
test10();
|
|
return (0);
|
|
}
|