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 
17 int 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 
77 int test_gui(GWEN_UNUSED int test_with_interaction)
78 {
79 #if 0
80  char buffer[50];
81  int rv;
82  GWEN_GUI *gui = GWEN_Gui_CGui_new();
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);
94  GWEN_Gui_HideBox(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  }
146  GWEN_Directory_free(dir);
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 
190  ASSERT(GWEN_ListIterator_Previous(iter) == e1);
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);
233  ASSERT(GWEN_ConstListIterator_Data(iter) == e1);
234  ASSERT(GWEN_ConstListIterator_Next(iter) == e2);
235  ASSERT(GWEN_ConstListIterator_Data(iter) == e2);
236 
238 
239  GWEN_ConstList_Clear(list);
240  ASSERT(GWEN_ConstList_GetSize(list) == 0);
241 
242  GWEN_ConstList_free(list);
244  printf("check_constlist: All tests passed.\n");
245  return 0;
246 }
247 
248 void *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 
275 int check2()
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 
339  dt1=GWEN_Date_CurrentDate();
340  assert(dt1);
341  tt=GWEN_Date_toLocalTime(dt1);
342 
343  dt2=GWEN_Date_fromLocalTime(tt);
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 
358 int 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 check2()
Definition: testlib.c:275
#define ASSERT(expr)
Definition: testlib.c:150
void * GWEN_StringList_ForEach(const GWEN_STRINGLIST *l, void *(*func)(const char *s, void *u), void *user_data)
Definition: stringlist.c:551
int print_paths()
Definition: testlib.c:254
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
GWENHYWFAR_API void GWEN_Directory_free(GWEN_DIRECTORY *d)
const void * GWEN_ConstListIterator_Data(GWEN_CONSTLIST_ITERATOR *li)
int test_gui(GWEN_UNUSED int test_with_interaction)
Definition: testlib.c:77
void GWEN_ConstList_PushBack(GWEN_CONSTLIST *l, const void *p)
void GWEN_ConstList_PushFront(GWEN_CONSTLIST *l, const void *p)
struct GWEN_LIST_ITERATOR GWEN_LIST_ITERATOR
Definition: list.h:72
GWEN_CONSTLIST_ITERATOR * GWEN_ConstList_First(const GWEN_CONSTLIST *l)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
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
void GWEN_List_Erase(GWEN_LIST *l, GWEN_LIST_ITERATOR *it)
void GWEN_ConstList_Clear(GWEN_CONSTLIST *l)
#define GWEN_GUI_FLAGS_NONINTERACTIVE
Definition: gui.h:992
void GWEN_List_PopBack(GWEN_LIST *l)
void GWEN_ConstList_PopBack(GWEN_CONSTLIST *l)
GWEN_LIST_ITERATOR * GWEN_List_First(const GWEN_LIST *l)
#define NULL
Definition: binreloc.c:300
GWENHYWFAR_API int GWEN_Directory_Close(GWEN_DIRECTORY *d)
time_t GWEN_Date_toLocalTime(const GWEN_DATE *gd)
Definition: gwendate.c:202
void * GWEN_List_GetBack(const GWEN_LIST *l)
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
Definition: gui.c:211
GWEN_DATE * GWEN_Date_CurrentDate(void)
Definition: gwendate.c:245
int GWEN_Base64_Decode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst)
Definition: base64.c:133
int check_list()
Definition: testlib.c:153
int GWEN_Base64_Encode(const unsigned char *src, unsigned int size, GWEN_BUFFER *dst, unsigned int maxLineLength)
Definition: base64.c:44
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
unsigned int GWEN_ConstList_GetSize(const GWEN_CONSTLIST *l)
void * printfunc(const char *s, void *u)
Definition: testlib.c:248
void GWEN_ConstList_free(GWEN_CONSTLIST *l)
GWENHYWFAR_API GWEN_DIRECTORY * GWEN_Directory_new(void)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
void * GWEN_ListIterator_Previous(GWEN_LIST_ITERATOR *li)
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
Definition: buffer.c:586
int main(int argc, char **argv)
Definition: testlib.c:358
int check_constlist()
Definition: testlib.c:205
struct GWEN_DIRECTORY GWEN_DIRECTORY
Definition: directory.h:41
const void * GWEN_ConstListIterator_Next(GWEN_CONSTLIST_ITERATOR *li)
void * GWEN_List_GetFront(const GWEN_LIST *l)
GWEN_LIST * GWEN_List_new(void)
void GWEN_ListIterator_free(GWEN_LIST_ITERATOR *li)
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
int GWEN_Padd_UnpaddWithIso9796_2(GWEN_BUFFER *buf)
Definition: padd.c:196
int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition: buffer.c:507
#define MAX_PATH
Definition: testlib.c:124
GWENHYWFAR_API int GWEN_Directory_GetTmpDirectory(char *buffer, unsigned int size)
void GWEN_ConstListIterator_free(GWEN_CONSTLIST_ITERATOR *li)
struct GWEN_LIST GWEN_LIST
Doubly-linked list.
Definition: list.h:55
#define GWEN_PM_SYSCONFDIR
Definition: gwenhywfar.h:46
void GWEN_List_free(GWEN_LIST *l)
const void * GWEN_ConstList_GetFront(const GWEN_CONSTLIST *l)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
void GWEN_List_Clear(GWEN_LIST *l)
int GWEN_Padd_PaddWithIso9796_2(GWEN_BUFFER *buf, int dstSize)
Definition: padd.c:148
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
Definition: pathmanager.c:494
int check1()
Definition: testlib.c:17
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
int check_directory()
Definition: testlib.c:126
const void * GWEN_ConstListIterator_Previous(GWEN_CONSTLIST_ITERATOR *li)
const char * GWEN_Date_GetString(const GWEN_DATE *gd)
Definition: gwendate.c:425
GWEN_DATE * GWEN_Date_fromLocalTime(time_t t)
Definition: gwendate.c:185
GWENHYWFAR_API GWEN_DEPRECATED void GWEN_Gui_HideBox(uint32_t id)
Definition: gui_virtual.c:393
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:427
void GWEN_List_PushFront(GWEN_LIST *l, void *p)
struct GWEN_LIST_ITERATOR GWEN_CONSTLIST_ITERATOR
Definition: list.h:76
int test_date()
Definition: testlib.c:333
void * GWEN_ListIterator_Data(GWEN_LIST_ITERATOR *li)
#define GWEN_PM_PLUGINDIR
Definition: gwenhywfar.h:53
#define GWEN_PM_LOCALEDIR
Definition: gwenhywfar.h:49
#define GWEN_PM_DATADIR
Definition: gwenhywfar.h:56
#define GWEN_PM_LIBNAME
Definition: gwenhywfar.h:42
unsigned int GWEN_List_GetSize(const GWEN_LIST *l)
struct GWEN_GUI GWEN_GUI
Definition: gui.h:176
GWEN_CONSTLIST * GWEN_ConstList_new(void)
const void * GWEN_ConstList_GetBack(const GWEN_CONSTLIST *l)
void GWEN_List_Remove(GWEN_LIST *l, const void *p)
void GWEN_Gui_free(GWEN_GUI *gui)
Definition: gui.c:127
void GWEN_Gui_SetGui(GWEN_GUI *gui)
Definition: gui.c:170
GWEN_GUI * GWEN_Gui_CGui_new(void)
Definition: cgui.c:74
struct GWEN_LIST GWEN_CONSTLIST
Doubly-linked list with const objects.
Definition: list.h:64
int GWEN_Date_Compare(const GWEN_DATE *gd1, const GWEN_DATE *gd0)
Definition: gwendate.c:433
void GWEN_List_PushBack(GWEN_LIST *l, void *p)
void * GWEN_ListIterator_Next(GWEN_LIST_ITERATOR *li)
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
GWENHYWFAR_API int GWEN_Directory_Open(GWEN_DIRECTORY *d, const char *n)
struct GWEN_DATE GWEN_DATE
Definition: gwendate.h:34