summaryrefslogtreecommitdiffstats
path: root/rfc822/testsuite.c
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /rfc822/testsuite.c
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'rfc822/testsuite.c')
-rw-r--r--rfc822/testsuite.c134
1 files changed, 134 insertions, 0 deletions
diff --git a/rfc822/testsuite.c b/rfc822/testsuite.c
new file mode 100644
index 0000000..7064c42
--- /dev/null
+++ b/rfc822/testsuite.c
@@ -0,0 +1,134 @@
+/*
+** Copyright 1998 - 2006 Double Precision, Inc.
+** See COPYING for distribution information.
+*/
+
+#include "rfc822.h"
+#include "rfc2047.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+
+static void print_func(char c, void *p)
+{
+ p=p;
+ putchar(c);
+}
+
+static void print_separator(const char *s, void *p)
+{
+ p=p;
+ printf("%s", s);
+}
+
+static struct rfc822t *tokenize(const char *p)
+{
+struct rfc822t *tp;
+int i;
+char buf[2];
+
+ printf("Tokenize: %s\n", p);
+ tp=rfc822t_alloc_new(p, NULL, NULL);
+ if (!tp) exit(0);
+ buf[1]=0;
+ for (i=0; i<tp->ntokens; i++)
+ {
+ buf[0]=tp->tokens[i].token;
+ if (buf[0] == '\0' || buf[0] == '"' || buf[0] == '(')
+ {
+ printf("%s: ", buf[0] == '"' ? "Quote":
+ buf[0] == '(' ? "Comment":"Atom");
+ if (fwrite(tp->tokens[i].ptr, tp->tokens[i].len, 1,
+ stdout) != 1)
+ exit(1);
+
+ printf("\n");
+ }
+ else printf("Token: %s\n", buf[0] ? buf:"atom");
+ }
+ return (tp);
+}
+
+static struct rfc822a *doaddr(struct rfc822t *t)
+{
+struct rfc822a *a=rfc822a_alloc(t);
+
+ if (!a) exit(0);
+ printf("----\n");
+ rfc822_print(a, print_func, print_separator, NULL);
+ printf("\n");
+ return (a);
+}
+
+int main()
+{
+ struct rfc822t *t1, *t2, *t3, *t4, *t5;
+ struct rfc822a *a1, *a2, *a3, *a4, *a5;
+
+ t1=tokenize("nobody@example.com (Nobody (is) here\\) right)");
+ t2=tokenize("Distribution list: nobody@example.com daemon@example.com");
+ t3=tokenize("Mr Nobody <nobody@example.com>, Mr. Nobody <nobody@example.com>");
+ t4=tokenize("nobody@example.com, <nobody@example.com>, Mr. Nobody <nobody@example.com>");
+
+ t5=tokenize("=?UTF-8?Q?Test?= <nobody@example.com>, foo=bar <nobody@example.com>");
+
+ a1=doaddr(t1);
+ a2=doaddr(t2);
+ a3=doaddr(t3);
+ a4=doaddr(t4);
+ a5=doaddr(t5);
+
+ rfc822a_free(a5);
+ rfc822a_free(a4);
+ rfc822a_free(a3);
+ rfc822a_free(a2);
+ rfc822a_free(a1);
+ rfc822t_free(t5);
+ rfc822t_free(t4);
+ rfc822t_free(t3);
+ rfc822t_free(t2);
+ rfc822t_free(t1);
+
+#define FIVEUTF8 "\xe2\x85\xa4"
+
+#define FIVETIMES4 FIVEUTF8 FIVEUTF8 FIVEUTF8 FIVEUTF8
+
+#define FIVETIMES16 FIVETIMES4 FIVETIMES4 FIVETIMES4 FIVETIMES4
+
+#define FIVEMAX FIVETIMES16 FIVETIMES4 FIVETIMES4
+
+ {
+ char *p=rfc2047_encode_str(FIVEMAX, "utf-8",
+ rfc2047_qp_allow_any);
+
+ if (p)
+ {
+ printf("%s\n", p);
+ free(p);
+ }
+ }
+
+ {
+ char *p=rfc2047_encode_str(FIVEMAX FIVEUTF8, "utf-8",
+ rfc2047_qp_allow_any);
+
+ if (p)
+ {
+ printf("%s\n", p);
+ free(p);
+ }
+ }
+
+ {
+ char *p=rfc2047_encode_str(FIVEMAX "\xcc\x80", "utf-8",
+ rfc2047_qp_allow_any);
+
+ if (p)
+ {
+ printf("%s\n", p);
+ free(p);
+ }
+ }
+
+ return (0);
+}