* add stdin for decoding tests
[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
94 static void TestRFC822DecodeStdin(void)
95 {
96         int fdin = 0;// STDIN
97         const char *Err;
98         StrBuf *Target;
99         StrBuf *Source;
100         StrBuf *DefaultCharset;
101         StrBuf *FoundCharset;
102         
103         DefaultCharset = NewStrBufPlain(HKEY("iso-8859-1"));
104         FoundCharset = NewStrBuf();
105         Source = NewStrBuf();
106
107         while (fdin == 0) {
108
109                 StrBufTCP_read_line(Source, &fdin, 0, &Err);
110                 Target = NewStrBuf();
111                 
112                 StrBuf_RFC822_to_Utf8(Target, Source, DefaultCharset, FoundCharset);
113                 
114                 TestRevalidateStrBuf(Target);
115                 printf("the ugly multi:>%s<\n", ChrPtr(Target));
116                 FreeStrBuf(&Target);
117         }
118         FreeStrBuf(&Source);
119         FreeStrBuf(&FoundCharset);
120         FreeStrBuf(&DefaultCharset);
121 }
122
123
124
125 static void AddStrBufSimlpeTests(void)
126 {
127         CU_pSuite pGroup = NULL;
128         CU_pTest pTest = NULL;
129
130         pGroup = CU_add_suite("TestStringBufConversions", NULL, NULL);
131         if (!fromstdin) {
132                 pTest = CU_add_test(pGroup, "testRFC822Decode", TestRFC822Decode);
133                 pTest = CU_add_test(pGroup, "testRFC822Decode1", TestRFC822Decode);
134                 pTest = CU_add_test(pGroup, "testRFC822Decode2", TestRFC822Decode);
135                 pTest = CU_add_test(pGroup, "testRFC822Decode3", TestRFC822Decode);
136         }
137         else
138                 pTest = CU_add_test(pGroup, "testRFC822Decode3", TestRFC822DecodeStdin);
139
140 }
141
142
143 int main(int argc, char* argv[])
144 {
145         int a;
146
147         while ((a = getopt(argc, argv, "i")) != EOF)
148                 switch (a) {
149                 case 'i':
150                         fromstdin = 1;
151                         
152                         break;
153                 }
154
155
156         setvbuf(stdout, NULL, _IONBF, 0);
157
158         StartLibCitadel(8);
159         CU_BOOL Run = CU_FALSE ;
160         
161         CU_set_output_filename("TestAutomated");
162         if (CU_initialize_registry()) {
163                 printf("\nInitialize of test Registry failed.");
164         }
165         
166         Run = CU_TRUE ;
167         AddStrBufSimlpeTests();
168         
169         if (CU_TRUE == Run) {
170                 //CU_console_run_tests();
171     printf("\nTests completed with return value %d.\n", CU_basic_run_tests());
172     
173     ///CU_automated_run_tests();
174         }
175         
176         CU_cleanup_registry();
177
178         return 0;
179 }