* found new bug in the RFC822 Decoder
[citadel.git] / libcitadel / tests / stringbuf_conversion.c
1
2 /*
3  *  CUnit - A Unit testing framework library for C.
4  *  Copyright (C) 2001  Anil Kumar
5  *  
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Library General Public
8  *  License as published by the Free Software Foundation; either
9  *  version 2 of the License, or (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  *  Library General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Library General Public
17  *  License along with this library; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <stdio.h>
25 #include <unistd.h>
26
27 #include "stringbuf_test.h"
28 #include "../lib/libcitadel.h"
29
30
31 int fromstdin = 0;
32
33 static void TestRevalidateStrBuf(StrBuf *Buf)
34 {
35         CU_ASSERT(strlen(ChrPtr(Buf)) == StrLength(Buf));
36 }
37
38
39
40 /*
41 Some samples from the original...
42         CU_ASSERT_EQUAL(10, 10);
43         CU_ASSERT_EQUAL(0, -0);
44         CU_ASSERT_EQUAL(-12, -12);
45         CU_ASSERT_NOT_EQUAL(10, 11);
46         CU_ASSERT_NOT_EQUAL(0, -1);
47         CU_ASSERT_NOT_EQUAL(-12, -11);
48         CU_ASSERT_PTR_EQUAL((void*)0x100, (void*)0x100);
49         CU_ASSERT_PTR_NOT_EQUAL((void*)0x100, (void*)0x101);
50         CU_ASSERT_PTR_NULL(NULL);
51         CU_ASSERT_PTR_NULL(0x0);
52         CU_ASSERT_PTR_NOT_NULL((void*)0x23);
53         CU_ASSERT_STRING_EQUAL(str1, str2);
54         CU_ASSERT_STRING_NOT_EQUAL(str1, str2);
55         CU_ASSERT_NSTRING_EQUAL(str1, str2, strlen(str1));
56         CU_ASSERT_NSTRING_EQUAL(str1, str1, strlen(str1));
57         CU_ASSERT_NSTRING_EQUAL(str1, str1, strlen(str1) + 1);
58         CU_ASSERT_NSTRING_NOT_EQUAL(str1, str2, 3);
59         CU_ASSERT_NSTRING_NOT_EQUAL(str1, str3, strlen(str1) + 1);
60         CU_ASSERT_DOUBLE_EQUAL(10, 10.0001, 0.0001);
61         CU_ASSERT_DOUBLE_EQUAL(10, 10.0001, -0.0001);
62         CU_ASSERT_DOUBLE_EQUAL(-10, -10.0001, 0.0001);
63         CU_ASSERT_DOUBLE_EQUAL(-10, -10.0001, -0.0001);
64         CU_ASSERT_DOUBLE_NOT_EQUAL(10, 10.001, 0.0001);
65         CU_ASSERT_DOUBLE_NOT_EQUAL(10, 10.001, -0.0001);
66         CU_ASSERT_DOUBLE_NOT_EQUAL(-10, -10.001, 0.0001);
67         CU_ASSERT_DOUBLE_NOT_EQUAL(-10, -10.001, -0.0001);
68 */
69
70 static void TestRFC822Decode(void)
71 {
72         StrBuf *Target;
73         StrBuf *Source;
74         StrBuf *DefaultCharset;
75         StrBuf *FoundCharset;
76         
77         DefaultCharset = NewStrBufPlain(HKEY("iso-8859-1"));
78         FoundCharset = NewStrBuf();
79         Source = NewStrBufPlain(HKEY("=?koi8-r?B?78bP0s3Mxc7JxSDXz9rE1dvO2c3JINvB0sHNySDP?="));
80         Target = NewStrBuf();
81
82         StrBuf_RFC822_to_Utf8(Target, Source, DefaultCharset, FoundCharset);
83
84
85         TestRevalidateStrBuf(Target);
86         printf("the ugly multi:>%s<\n", ChrPtr(Target));
87         FreeStrBuf(&Source);
88         FreeStrBuf(&Target);
89         FreeStrBuf(&FoundCharset);
90         FreeStrBuf(&DefaultCharset);
91
92
93         DefaultCharset = NewStrBufPlain(HKEY("iso-8859-1"));
94         FoundCharset = NewStrBuf();
95         Source = NewStrBufPlain(HKEY("\"w.goesgens\" <w.goesgens@aoeuaoeuaoeu.org>, =?ISO-8859-15?Q?Walter_?= =?ISO-8859-15?Q?G=F6aoeus?= <aoeuaoeu@aoe.de>, =?ISO-8859-15?Q?aoeuaoeuh?= =?ISO-8859-15?Q?_G=F6aoeus?= <aoeuoeuaoeu@oeu.de>, aoeuao aoeuaoeu <aoeuaoeuaoeaoe@aoe.de"));
96         Target = NewStrBufPlain(NULL, 256);
97
98         StrBuf_RFC822_to_Utf8(Target, Source, DefaultCharset, FoundCharset);
99         TestRevalidateStrBuf(Target);
100         printf("the ugly multi:>%s<\n", ChrPtr(Target));
101         FreeStrBuf(&Source);
102         FreeStrBuf(&Target);
103         FreeStrBuf(&FoundCharset);
104         FreeStrBuf(&DefaultCharset);
105
106 }
107
108
109 static void TestRFC822DecodeStdin(void)
110 {
111         int fdin = 0;// STDIN
112         const char *Err;
113         StrBuf *Target;
114         StrBuf *Source;
115         StrBuf *DefaultCharset;
116         StrBuf *FoundCharset;
117         
118         DefaultCharset = NewStrBufPlain(HKEY("iso-8859-1"));
119         FoundCharset = NewStrBuf();
120         Source = NewStrBuf();
121
122         while (fdin == 0) {
123
124                 StrBufTCP_read_line(Source, &fdin, 0, &Err);
125                 Target = NewStrBuf();
126                 
127                 StrBuf_RFC822_to_Utf8(Target, Source, DefaultCharset, FoundCharset);
128                 
129                 TestRevalidateStrBuf(Target);
130                 printf("the ugly multi:>%s<\n", ChrPtr(Target));
131                 FreeStrBuf(&Target);
132         }
133         FreeStrBuf(&Source);
134         FreeStrBuf(&FoundCharset);
135         FreeStrBuf(&DefaultCharset);
136 }
137
138
139
140 static void AddStrBufSimlpeTests(void)
141 {
142         CU_pSuite pGroup = NULL;
143         CU_pTest pTest = NULL;
144
145         pGroup = CU_add_suite("TestStringBufConversions", NULL, NULL);
146         if (!fromstdin) {
147                 pTest = CU_add_test(pGroup, "testRFC822Decode", TestRFC822Decode);
148                 pTest = CU_add_test(pGroup, "testRFC822Decode1", TestRFC822Decode);
149                 pTest = CU_add_test(pGroup, "testRFC822Decode2", TestRFC822Decode);
150                 pTest = CU_add_test(pGroup, "testRFC822Decode3", TestRFC822Decode);
151         }
152         else
153                 pTest = CU_add_test(pGroup, "testRFC822Decode3", TestRFC822DecodeStdin);
154
155 }
156
157
158 int main(int argc, char* argv[])
159 {
160         int a;
161
162         while ((a = getopt(argc, argv, "i")) != EOF)
163                 switch (a) {
164                 case 'i':
165                         fromstdin = 1;
166                         
167                         break;
168                 }
169
170
171         setvbuf(stdout, NULL, _IONBF, 0);
172
173         StartLibCitadel(8);
174         CU_BOOL Run = CU_FALSE ;
175         
176         CU_set_output_filename("TestAutomated");
177         if (CU_initialize_registry()) {
178                 printf("\nInitialize of test Registry failed.");
179         }
180         
181         Run = CU_TRUE ;
182         AddStrBufSimlpeTests();
183         
184         if (CU_TRUE == Run) {
185                 //CU_console_run_tests();
186     printf("\nTests completed with return value %d.\n", CU_basic_run_tests());
187     
188     ///CU_automated_run_tests();
189         }
190         
191         CU_cleanup_registry();
192
193         return 0;
194 }