gwenhywfar 5.10.1
testlib.c
Go to the documentation of this file.
1
2
3#include <gwenhywfar/buffer.h>
4#include <gwenhywfar/base64.h>
5#include <gwenhywfar/debug.h>
6#include <gwenhywfar/padd.h>
7#include <gwenhywfar/cgui.h>
8#include <gwenhywfar/directory.h>
9#include <gwenhywfar/list.h>
10#include <gwenhywfar/pathmanager.h>
11#include <gwenhywfar/gwendate.h>
12#include <errno.h>
13#include "gwenhywfar.h"
14
15
16
17int check1()
18{
19 const char *testString="01234567890123456789";
20 int rv;
21 GWEN_BUFFER *buf1;
22 GWEN_BUFFER *buf2;
23 const char *p1, *p2;
24 int i;
25 int len;
26
27 fprintf(stderr, "Check 1 ...");
28
29 buf1=GWEN_Buffer_new(0, 256, 0, 1);
30 rv=GWEN_Base64_Encode((const unsigned char *)testString,
31 strlen(testString),
32 buf1, 0);
33 if (rv) {
34 fprintf(stderr, "FAILED: Could not encode.\n");
35 return 2;
36 }
37
38 buf2=GWEN_Buffer_new(0, 256, 0, 1);
39 rv=GWEN_Base64_Decode((const unsigned char *)GWEN_Buffer_GetStart(buf1), 0,
40 buf2);
41 if (rv) {
42 fprintf(stderr, "FAILED: Could not decode.\n");
43 return 2;
44 }
45
46 p1=testString;
47 len=strlen(testString);
48 p2=GWEN_Buffer_GetStart(buf2);
49 if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
50 fprintf(stderr, "Data differs in size\n");
51 return 3;
52 }
53 rv=0;
54 for (i=0; i<len; i++) {
55 if (p1[i]!=p2[i]) {
56 fprintf(stderr, "Buffer1:\n%s\n", testString);
57 fprintf(stderr, "Buffer2:\n");
58 GWEN_Buffer_Dump(buf2, 2);
59
60 fprintf(stderr, "Differ at %d (%04x)\n", i, i);
61 rv=-1;
62 }
63 }
64
65 if (rv) {
66 fprintf(stderr, "Data differs in content\n");
67 return 3;
68 }
69
70 fprintf(stderr, "PASSED.\n");
71
72 return 0;
73}
74
75
76
77int test_gui(GWEN_UNUSED int test_with_interaction)
78{
79#if 0
80 char buffer[50];
81 int rv;
83
84 /* Set the static GUI object */
85 assert(gui);
86 GWEN_Gui_SetGui(gui);
88
89 rv = GWEN_Gui_ShowBox(0,
90 "This is a ShowBox test title",
91 "This is a ShowBox test.",
92 0);
93 printf("GWEN_Gui_ShowBox: rv=%d\n", rv);
95 printf("GWEN_Gui_HideBox called.\n\n");
96
97 if (test_with_interaction) {
98 rv = GWEN_Gui_InputBox(0,
99 "This is a InputBox test title",
100 "Just enter something.",
101 buffer,
102 1, 40,
103 0);
104 printf("GWEN_Gui_InputBox: rv=%d, result=\"%s\"\n\n",
105 rv, buffer);
106
107 rv = GWEN_Gui_MessageBox(0,
108 "Third test title, this time MessageBox",
109 "Just press the first or second button.",
110 "First button.", "Second button", NULL,
111 0);
112 printf("GWEN_Gui_MessageBox: rv=%d; button=%s\n", rv,
113 (rv == 1 ? "first" : (rv == 2 ? "second" : "unknown")));
114 }
115
116 GWEN_Gui_free(gui);
117#endif
118 return 0;
119}
120
121
122
123#ifndef MAX_PATH
124# define MAX_PATH 200
125#endif
127{
128 char tmpdir[MAX_PATH];
129 GWEN_DIRECTORY *dir;
130 int rv;
131
133 printf("GWEN_Directory_GetTmpDirectory returns \"%s\" as tmp directory\n",
134 tmpdir);
135
136 dir = GWEN_Directory_new();
137 rv = GWEN_Directory_Open(dir, tmpdir);
138 if (rv) {
139 /* error */
140 printf("Error on GWEN_Directory_Open(\"%s\"): errno=%d: %s\n",
141 tmpdir, errno, strerror(errno));
142 }
143 else {
144 rv = GWEN_Directory_Close(dir);
145 }
147 return rv;
148}
149
150#define ASSERT(expr) if (!(expr)) \
151 { printf("FAILED assertion in " __FILE__ ": %d: " #expr "\n", \
152 __LINE__); return -1; }
154{
155 const char *e1 = "one", *e2 = "two", *e3 = "three";
156 GWEN_LIST *list;
157 GWEN_LIST_ITERATOR *iter;
158
159 list = GWEN_List_new();
160 ASSERT(GWEN_List_GetSize(list) == 0);
161 GWEN_List_PushBack(list, (void *) e2);
162 ASSERT(GWEN_List_GetSize(list) == 1);
163 GWEN_List_PushBack(list, (void *) e3);
164 ASSERT(GWEN_List_GetSize(list) == 2);
165 GWEN_List_PushFront(list, (void *) e1);
166 ASSERT(GWEN_List_GetSize(list) == 3);
167 ASSERT(GWEN_List_GetFront(list) == e1);
168 ASSERT(GWEN_List_GetBack(list) == e3);
169
170 GWEN_List_Remove(list, e2);
171 ASSERT(GWEN_List_GetSize(list) == 2);
172 ASSERT(GWEN_List_GetFront(list) == e1);
173 ASSERT(GWEN_List_GetBack(list) == e3);
174
175 GWEN_List_PopBack(list);
176 ASSERT(GWEN_List_GetSize(list) == 1);
177 ASSERT(GWEN_List_GetFront(list) == e1);
178 ASSERT(GWEN_List_GetBack(list) == e1);
179
180 GWEN_List_PushBack(list, (void *) e2);
181 ASSERT(GWEN_List_GetSize(list) == 2);
182 ASSERT(GWEN_List_GetFront(list) == e1);
183 ASSERT(GWEN_List_GetBack(list) == e2);
184
185 iter = GWEN_List_First(list);
186 ASSERT(GWEN_ListIterator_Data(iter) == e1);
187 ASSERT(GWEN_ListIterator_Next(iter) == e2);
188 ASSERT(GWEN_ListIterator_Data(iter) == e2);
189
191 GWEN_List_Erase(list, iter);
192 ASSERT(GWEN_List_GetSize(list) == 1);
193 ASSERT(GWEN_List_GetFront(list) == e2);
194 ASSERT(GWEN_List_GetBack(list) == e2);
195
196 GWEN_List_Clear(list);
197 ASSERT(GWEN_List_GetSize(list) == 0);
198
199 GWEN_List_free(list);
201 printf("check_list: All tests passed.\n");
202 return 0;
203}
204
206{
207 const char *e1 = "one", *e2 = "two", *e3 = "three";
208 GWEN_CONSTLIST *list;
210
211 list = GWEN_ConstList_new();
212 ASSERT(GWEN_ConstList_GetSize(list) == 0);
213 GWEN_ConstList_PushBack(list, e2);
214 ASSERT(GWEN_ConstList_GetSize(list) == 1);
215 GWEN_ConstList_PushBack(list, e3);
216 ASSERT(GWEN_ConstList_GetSize(list) == 2);
217 GWEN_ConstList_PushFront(list, e1);
218 ASSERT(GWEN_ConstList_GetSize(list) == 3);
219 ASSERT(GWEN_ConstList_GetFront(list) == e1);
220 ASSERT(GWEN_ConstList_GetBack(list) == e3);
221
223 ASSERT(GWEN_ConstList_GetSize(list) == 2);
224 ASSERT(GWEN_ConstList_GetFront(list) == e1);
225 ASSERT(GWEN_ConstList_GetBack(list) == e2);
226
227 GWEN_ConstList_PushBack(list, e3);
228 ASSERT(GWEN_ConstList_GetSize(list) == 3);
229 ASSERT(GWEN_ConstList_GetFront(list) == e1);
230 ASSERT(GWEN_ConstList_GetBack(list) == e3);
231
232 iter = GWEN_ConstList_First(list);
236
238
240 ASSERT(GWEN_ConstList_GetSize(list) == 0);
241
244 printf("check_constlist: All tests passed.\n");
245 return 0;
246}
247
248void *printfunc(const char *s, void *u)
249{
250 const char *pathname = u;
251 printf("Path %s contains: %s\n", pathname, s);
252 return 0;
253}
255{
256 const char *paths[] = { GWEN_PM_SYSCONFDIR
260 , 0
261 };
262 const char **p = paths;
263 for (; *p != 0; ++p) {
264 const char *pathname = *p;
265 GWEN_STRINGLIST *sl =
267 printf("Path %s has %d elements.\n", pathname, GWEN_StringList_Count(sl));
268 GWEN_StringList_ForEach(sl, printfunc, (void *)pathname);
269 }
270 return 0;
271}
272
273
274
276{
277 const char *testString="01234567890123456789";
278 int rv;
279 GWEN_BUFFER *buf1;
280 GWEN_BUFFER *buf2;
281 const char *p1, *p2;
282 int i;
283 int len;
284
285 fprintf(stderr, "Check 2 ...");
286
287 buf1=GWEN_Buffer_new(0, 256, 0, 1);
288 GWEN_Buffer_AppendString(buf1, testString);
289 rv=GWEN_Padd_PaddWithIso9796_2(buf1, 256);
290 if (rv) {
291 fprintf(stderr, "FAILED: Could not padd.\n");
292 return 2;
293 }
294
295 buf2=GWEN_Buffer_new(0, 256, 0, 1);
296 GWEN_Buffer_AppendBuffer(buf2, buf1);
298 if (rv) {
299 fprintf(stderr, "FAILED: Could not unpadd.\n");
300 return 2;
301 }
302
303 p1=testString;
304 len=strlen(testString);
305 p2=GWEN_Buffer_GetStart(buf2);
306 if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
307 fprintf(stderr, "Data differs in size\n");
308 return 3;
309 }
310 rv=0;
311 for (i=0; i<len; i++) {
312 if (p1[i]!=p2[i]) {
313 fprintf(stderr, "Buffer1:\n%s\n", testString);
314 fprintf(stderr, "Buffer2:\n");
315 GWEN_Buffer_Dump(buf2, 2);
316
317 fprintf(stderr, "Differ at %d (%04x)\n", i, i);
318 rv=-1;
319 }
320 }
321
322 if (rv) {
323 fprintf(stderr, "Data differs in content\n");
324 return 3;
325 }
326
327 fprintf(stderr, "PASSED.\n");
328
329 return 0;
330}
331
332
334{
335 GWEN_DATE *dt1;
336 GWEN_DATE *dt2;
337 time_t tt;
338
340 assert(dt1);
341 tt=GWEN_Date_toLocalTime(dt1);
342
344 if (GWEN_Date_Compare(dt1, dt2)!=0) {
345 fprintf(stderr, "Error: Date doesn't match: dt1: %s dt2: %s\n",
347 return 3;
348 }
349 else {
350 fprintf(stderr, "Date is okay (%s)\n", GWEN_Date_GetString(dt2));
351 }
352
353 return 0;
354}
355
356
357
358int main(int argc, char **argv)
359{
360 int rv;
361 const char *cmd;
362
363 if (argc>1)
364 cmd=argv[1];
365 else
366 cmd="check";
367
368 if (strcasecmp(cmd, "check")==0) {
369 rv=check1() ||
370 check2() ||
371 test_gui(0) ||
372 check_directory() ||
373 check_list() ||
375 || print_paths()
376 ;
377 }
378 else if (strcasecmp(cmd, "gui")==0) {
379 rv=test_gui(1);
380 }
381 else if (strcasecmp(cmd, "date")==0) {
382 rv=test_date();
383 }
384 else {
385 fprintf(stderr, "Unknown command \"%s\"\n", cmd);
386 return 1;
387 }
388 return rv;
389}
390
391
int GWEN_Base64_Encode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst, unsigned int maxLineLength)
Definition: base64.c:44
int GWEN_Base64_Decode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst)
Definition: base64.c:133
#define NULL
Definition: binreloc.c:300
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
Definition: buffer.c:586
int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition: buffer.c:507
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
GWEN_GUI * GWEN_Gui_CGui_new(void)
Definition: cgui.c:74
struct GWEN_DIRECTORY GWEN_DIRECTORY
Definition: directory.h:41
GWENHYWFAR_API int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n)
GWENHYWFAR_API GWEN_DIRECTORY * GWEN_Directory_new(void)
GWENHYWFAR_API void GWEN_Directory_free(GWEN_DIRECTORY *d)
GWENHYWFAR_API int GWEN_Directory_Close(GWEN_DIRECTORY *d)
GWENHYWFAR_API int GWEN_Directory_GetTmpDirectory(char *buffer, unsigned int size)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
void GWEN_Gui_SetGui(GWEN_GUI *gui)
Definition: gui.c:170
void GWEN_Gui_free(GWEN_GUI *gui)
Definition: gui.c:127
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
Definition: gui.c:211
GWENHYWFAR_API int GWEN_Gui_InputBox(uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid)
Definition: gui_virtual.c:360
GWENHYWFAR_API GWEN_DEPRECATED uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid)
Definition: gui_virtual.c:378
GWENHYWFAR_API int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
Definition: gui_virtual.c:342
#define GWEN_GUI_FLAGS_NONINTERACTIVE
Definition: gui.h:992
GWENHYWFAR_API GWEN_DEPRECATED void GWEN_Gui_HideBox(uint32_t id)
Definition: gui_virtual.c:393
struct GWEN_GUI GWEN_GUI
Definition: gui.h:176
const char * GWEN_Date_GetString(const GWEN_DATE *gd)
Definition: gwendate.c:425
int GWEN_Date_Compare(const GWEN_DATE *gd1, const GWEN_DATE *gd0)
Definition: gwendate.c:433
GWEN_DATE * GWEN_Date_CurrentDate(void)
Definition: gwendate.c:245
time_t GWEN_Date_toLocalTime(const GWEN_DATE *gd)
Definition: gwendate.c:202
GWEN_DATE * GWEN_Date_fromLocalTime(time_t t)
Definition: gwendate.c:185
struct GWEN_DATE GWEN_DATE
Definition: gwendate.h:34
#define GWEN_PM_SYSCONFDIR
Definition: gwenhywfar.h:46
#define GWEN_PM_PLUGINDIR
Definition: gwenhywfar.h:53
#define GWEN_PM_LIBNAME
Definition: gwenhywfar.h:42
#define GWEN_PM_LOCALEDIR
Definition: gwenhywfar.h:49
#define GWEN_PM_DATADIR
Definition: gwenhywfar.h:56
#define GWEN_UNUSED
struct GWEN_LIST GWEN_CONSTLIST
Doubly-linked list with const objects.
Definition: list.h:64
struct GWEN_LIST GWEN_LIST
Doubly-linked list.
Definition: list.h:55
struct GWEN_LIST_ITERATOR GWEN_LIST_ITERATOR
Definition: list.h:72
struct GWEN_LIST_ITERATOR GWEN_CONSTLIST_ITERATOR
Definition: list.h:76
int GWEN_Padd_PaddWithIso9796_2(GWEN_BUFFER *buf, int dstSize)
Definition: padd.c:148
int GWEN_Padd_UnpaddWithIso9796_2(GWEN_BUFFER *buf)
Definition: padd.c:196
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
Definition: pathmanager.c:494
const void * GWEN_ConstListIterator_Data(GWEN_CONSTLIST_ITERATOR *li)
void GWEN_ConstList_PushFront(GWEN_CONSTLIST *l, const void *p)
void GWEN_ConstList_Clear(GWEN_CONSTLIST *l)
void GWEN_ConstList_free(GWEN_CONSTLIST *l)
GWEN_LIST * GWEN_List_new(void)
const void * GWEN_ConstListIterator_Next(GWEN_CONSTLIST_ITERATOR *li)
void GWEN_ConstListIterator_free(GWEN_CONSTLIST_ITERATOR *li)
GWEN_CONSTLIST * GWEN_ConstList_new(void)
const void * GWEN_ConstListIterator_Previous(GWEN_CONSTLIST_ITERATOR *li)
GWEN_LIST_ITERATOR * GWEN_List_First(const GWEN_LIST *l)
const void * GWEN_ConstList_GetFront(const GWEN_CONSTLIST *l)
void GWEN_List_Clear(GWEN_LIST *l)
void GWEN_ListIterator_free(GWEN_LIST_ITERATOR *li)
GWEN_CONSTLIST_ITERATOR * GWEN_ConstList_First(const GWEN_CONSTLIST *l)
void * GWEN_List_GetFront(const GWEN_LIST *l)
void * GWEN_List_GetBack(const GWEN_LIST *l)
void GWEN_List_free(GWEN_LIST *l)
void * GWEN_ListIterator_Next(GWEN_LIST_ITERATOR *li)
void GWEN_ConstList_PopBack(GWEN_CONSTLIST *l)
void GWEN_List_Erase(GWEN_LIST *l, GWEN_LIST_ITERATOR *it)
void * GWEN_ListIterator_Previous(GWEN_LIST_ITERATOR *li)
void GWEN_List_PushFront(GWEN_LIST *l, void *p)
void GWEN_List_Remove(GWEN_LIST *l, const void *p)
void * GWEN_ListIterator_Data(GWEN_LIST_ITERATOR *li)
const void * GWEN_ConstList_GetBack(const GWEN_CONSTLIST *l)
unsigned int GWEN_List_GetSize(const GWEN_LIST *l)
unsigned int GWEN_ConstList_GetSize(const GWEN_CONSTLIST *l)
void GWEN_List_PopBack(GWEN_LIST *l)
void GWEN_ConstList_PushBack(GWEN_CONSTLIST *l, const void *p)
void GWEN_List_PushBack(GWEN_LIST *l, void *p)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:427
void * GWEN_StringList_ForEach(const GWEN_STRINGLIST *l, void *(*func)(const char *s, void *u), void *user_data)
Definition: stringlist.c:551
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
int print_paths()
Definition: testlib.c:254
#define ASSERT(expr)
Definition: testlib.c:150
int check_constlist()
Definition: testlib.c:205
int test_gui(GWEN_UNUSED int test_with_interaction)
Definition: testlib.c:77
int main(int argc, char **argv)
Definition: testlib.c:358
int check2()
Definition: testlib.c:275
int check1()
Definition: testlib.c:17
int test_date()
Definition: testlib.c:333
#define MAX_PATH
Definition: testlib.c:124
int check_list()
Definition: testlib.c:153
int check_directory()
Definition: testlib.c:126
void * printfunc(const char *s, void *u)
Definition: testlib.c:248