00001
00002
00003 #include <gwenhywfar/buffer.h>
00004 #include <gwenhywfar/base64.h>
00005 #include <gwenhywfar/debug.h>
00006 #include <gwenhywfar/padd.h>
00007 #include <gwenhywfar/cgui.h>
00008 #include <gwenhywfar/directory.h>
00009 #include <gwenhywfar/list.h>
00010 #include <gwenhywfar/pathmanager.h>
00011 #include <errno.h>
00012 #include "gwenhywfar.h"
00013
00014
00015
00016 int check1() {
00017 const char *testString="01234567890123456789";
00018 int rv;
00019 GWEN_BUFFER *buf1;
00020 GWEN_BUFFER *buf2;
00021 const char *p1, *p2;
00022 int i;
00023 int len;
00024
00025 fprintf(stderr, "Check 1 ...");
00026
00027 buf1=GWEN_Buffer_new(0, 256, 0, 1);
00028 rv=GWEN_Base64_Encode((const unsigned char*)testString,
00029 strlen(testString),
00030 buf1, 0);
00031 if (rv) {
00032 fprintf(stderr, "FAILED: Could not encode.\n");
00033 return 2;
00034 }
00035
00036 buf2=GWEN_Buffer_new(0, 256, 0, 1);
00037 rv=GWEN_Base64_Decode((const unsigned char*)GWEN_Buffer_GetStart(buf1), 0,
00038 buf2);
00039 if (rv) {
00040 fprintf(stderr, "FAILED: Could not decode.\n");
00041 return 2;
00042 }
00043
00044 p1=testString;
00045 len=strlen(testString);
00046 p2=GWEN_Buffer_GetStart(buf2);
00047 if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
00048 fprintf(stderr, "Data differs in size\n");
00049 return 3;
00050 }
00051 rv=0;
00052 for (i=0; i<len; i++) {
00053 if (p1[i]!=p2[i]) {
00054 fprintf(stderr, "Buffer1:\n%s\n", testString);
00055 fprintf(stderr, "Buffer2:\n");
00056 GWEN_Buffer_Dump(buf2, stderr, 2);
00057
00058 fprintf(stderr, "Differ at %d (%04x)\n", i, i);
00059 rv=-1;
00060 }
00061 }
00062
00063 if (rv) {
00064 fprintf(stderr, "Data differs in content\n");
00065 return 3;
00066 }
00067
00068 fprintf(stderr, "PASSED.\n");
00069
00070 return 0;
00071 }
00072
00073
00074
00075 int test_gui(int test_with_interaction) {
00076 char buffer[50];
00077 int rv;
00078 GWEN_GUI *gui = GWEN_Gui_CGui_new();
00079
00080
00081 assert(gui);
00082 GWEN_Gui_SetGui(gui);
00083 GWEN_Gui_CGui_SetIsNonInteractive(gui, 0);
00084
00085 rv = GWEN_Gui_ShowBox(0,
00086 "This is a ShowBox test title",
00087 "This is a ShowBox test.",
00088 0);
00089 printf("GWEN_Gui_ShowBox: rv=%d\n", rv);
00090 GWEN_Gui_HideBox(rv);
00091 printf("GWEN_Gui_HideBox called.\n\n");
00092
00093 if (test_with_interaction) {
00094 rv = GWEN_Gui_InputBox(0,
00095 "This is a InputBox test title",
00096 "Just enter something.",
00097 buffer,
00098 1, 40,
00099 0);
00100 printf("GWEN_Gui_InputBox: rv=%d, result=\"%s\"\n\n",
00101 rv, buffer);
00102
00103 rv = GWEN_Gui_MessageBox(0,
00104 "Third test title, this time MessageBox",
00105 "Just press the first or second button.",
00106 "First button.", "Second button", NULL,
00107 0);
00108 printf("GWEN_Gui_MessageBox: rv=%d; button=%s\n", rv,
00109 (rv == 1 ? "first" : (rv == 2 ? "second" : "unknown")));
00110 }
00111
00112 GWEN_Gui_free(gui);
00113 return 0;
00114 }
00115
00116
00117
00118 #ifndef MAX_PATH
00119 # define MAX_PATH 200
00120 #endif
00121 int check_directory()
00122 {
00123 char tmpdir[MAX_PATH];
00124 GWEN_DIRECTORY *dir;
00125 int rv;
00126
00127 GWEN_Directory_GetTmpDirectory(tmpdir, MAX_PATH);
00128 printf("GWEN_Directory_GetTmpDirectory returns \"%s\" as tmp directory\n",
00129 tmpdir);
00130
00131 dir = GWEN_Directory_new();
00132 rv = GWEN_Directory_Open(dir, tmpdir);
00133 if (rv) {
00134
00135 printf("Error on GWEN_Directory_Open(\"%s\"): errno=%d: %s\n",
00136 tmpdir, errno, strerror(errno));
00137 } else {
00138 rv = GWEN_Directory_Close(dir);
00139 }
00140 GWEN_Directory_free(dir);
00141 return rv;
00142 }
00143
00144 #define ASSERT(expr) if (!(expr)) \
00145 { printf("FAILED assertion in " __FILE__ ": %d: " #expr "\n", \
00146 __LINE__); return -1; }
00147 int check_list()
00148 {
00149 const char *e1 = "one", *e2 = "two", *e3 = "three";
00150 GWEN_LIST *list;
00151 GWEN_LIST_ITERATOR *iter;
00152
00153 list = GWEN_List_new();
00154 ASSERT(GWEN_List_GetSize(list) == 0);
00155 GWEN_List_PushBack(list, (void*) e2);
00156 ASSERT(GWEN_List_GetSize(list) == 1);
00157 GWEN_List_PushBack(list, (void*) e3);
00158 ASSERT(GWEN_List_GetSize(list) == 2);
00159 GWEN_List_PushFront(list, (void*) e1);
00160 ASSERT(GWEN_List_GetSize(list) == 3);
00161 ASSERT(GWEN_List_GetFront(list) == e1);
00162 ASSERT(GWEN_List_GetBack(list) == e3);
00163
00164 GWEN_List_Remove(list, e2);
00165 ASSERT(GWEN_List_GetSize(list) == 2);
00166 ASSERT(GWEN_List_GetFront(list) == e1);
00167 ASSERT(GWEN_List_GetBack(list) == e3);
00168
00169 GWEN_List_PopBack(list);
00170 ASSERT(GWEN_List_GetSize(list) == 1);
00171 ASSERT(GWEN_List_GetFront(list) == e1);
00172 ASSERT(GWEN_List_GetBack(list) == e1);
00173
00174 GWEN_List_PushBack(list, (void*) e2);
00175 ASSERT(GWEN_List_GetSize(list) == 2);
00176 ASSERT(GWEN_List_GetFront(list) == e1);
00177 ASSERT(GWEN_List_GetBack(list) == e2);
00178
00179 iter = GWEN_List_First(list);
00180 ASSERT(GWEN_ListIterator_Data(iter) == e1);
00181 ASSERT(GWEN_ListIterator_Next(iter) == e2);
00182 ASSERT(GWEN_ListIterator_Data(iter) == e2);
00183
00184 ASSERT(GWEN_ListIterator_Previous(iter) == e1);
00185 GWEN_List_Erase(list, iter);
00186 ASSERT(GWEN_List_GetSize(list) == 1);
00187 ASSERT(GWEN_List_GetFront(list) == e2);
00188 ASSERT(GWEN_List_GetBack(list) == e2);
00189
00190 GWEN_List_Clear(list);
00191 ASSERT(GWEN_List_GetSize(list) == 0);
00192
00193 GWEN_List_free(list);
00194 GWEN_ListIterator_free(iter);
00195 printf("check_list: All tests passed.\n");
00196 return 0;
00197 }
00198
00199 int check_constlist()
00200 {
00201 const char *e1 = "one", *e2 = "two", *e3 = "three";
00202 GWEN_CONSTLIST *list;
00203 GWEN_CONSTLIST_ITERATOR *iter;
00204
00205 list = GWEN_ConstList_new();
00206 ASSERT(GWEN_ConstList_GetSize(list) == 0);
00207 GWEN_ConstList_PushBack(list, e2);
00208 ASSERT(GWEN_ConstList_GetSize(list) == 1);
00209 GWEN_ConstList_PushBack(list, e3);
00210 ASSERT(GWEN_ConstList_GetSize(list) == 2);
00211 GWEN_ConstList_PushFront(list, e1);
00212 ASSERT(GWEN_ConstList_GetSize(list) == 3);
00213 ASSERT(GWEN_ConstList_GetFront(list) == e1);
00214 ASSERT(GWEN_ConstList_GetBack(list) == e3);
00215
00216 GWEN_ConstList_PopBack(list);
00217 ASSERT(GWEN_ConstList_GetSize(list) == 2);
00218 ASSERT(GWEN_ConstList_GetFront(list) == e1);
00219 ASSERT(GWEN_ConstList_GetBack(list) == e2);
00220
00221 GWEN_ConstList_PushBack(list, e3);
00222 ASSERT(GWEN_ConstList_GetSize(list) == 3);
00223 ASSERT(GWEN_ConstList_GetFront(list) == e1);
00224 ASSERT(GWEN_ConstList_GetBack(list) == e3);
00225
00226 iter = GWEN_ConstList_First(list);
00227 ASSERT(GWEN_ConstListIterator_Data(iter) == e1);
00228 ASSERT(GWEN_ConstListIterator_Next(iter) == e2);
00229 ASSERT(GWEN_ConstListIterator_Data(iter) == e2);
00230
00231 ASSERT(GWEN_ConstListIterator_Previous(iter) == e1);
00232
00233 GWEN_ConstList_Clear(list);
00234 ASSERT(GWEN_ConstList_GetSize(list) == 0);
00235
00236 GWEN_ConstList_free(list);
00237 GWEN_ConstListIterator_free(iter);
00238 printf("check_constlist: All tests passed.\n");
00239 return 0;
00240 }
00241
00242 void *printfunc(const char *s, void *u)
00243 {
00244 const char *pathname = u;
00245 printf("Path %s contains: %s\n", pathname, s);
00246 return 0;
00247 }
00248 int print_paths()
00249 {
00250 const char *paths[] = { GWEN_PM_SYSCONFDIR
00251 , GWEN_PM_LOCALEDIR
00252 , GWEN_PM_PLUGINDIR
00253 , GWEN_PM_DATADIR
00254 , 0 };
00255 const char **p = paths;
00256 for ( ; *p != 0; ++p) {
00257 const char *pathname = *p;
00258 GWEN_STRINGLIST *sl =
00259 GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, pathname);
00260 printf("Path %s has %d elements.\n", pathname, GWEN_StringList_Count(sl));
00261 GWEN_StringList_ForEach(sl, printfunc, (void*)pathname);
00262 }
00263 return 0;
00264 }
00265
00266
00267
00268 int check2() {
00269 const char *testString="01234567890123456789";
00270 int rv;
00271 GWEN_BUFFER *buf1;
00272 GWEN_BUFFER *buf2;
00273 const char *p1, *p2;
00274 int i;
00275 int len;
00276
00277 fprintf(stderr, "Check 2 ...");
00278
00279 buf1=GWEN_Buffer_new(0, 256, 0, 1);
00280 GWEN_Buffer_AppendString(buf1, testString);
00281 rv=GWEN_Padd_PaddWithIso9796_2(buf1, 256);
00282 if (rv) {
00283 fprintf(stderr, "FAILED: Could not padd.\n");
00284 return 2;
00285 }
00286
00287 buf2=GWEN_Buffer_new(0, 256, 0, 1);
00288 GWEN_Buffer_AppendBuffer(buf2, buf1);
00289 rv=GWEN_Padd_UnpaddWithIso9796_2(buf2);
00290 if (rv) {
00291 fprintf(stderr, "FAILED: Could not unpadd.\n");
00292 return 2;
00293 }
00294
00295 p1=testString;
00296 len=strlen(testString);
00297 p2=GWEN_Buffer_GetStart(buf2);
00298 if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
00299 fprintf(stderr, "Data differs in size\n");
00300 return 3;
00301 }
00302 rv=0;
00303 for (i=0; i<len; i++) {
00304 if (p1[i]!=p2[i]) {
00305 fprintf(stderr, "Buffer1:\n%s\n", testString);
00306 fprintf(stderr, "Buffer2:\n");
00307 GWEN_Buffer_Dump(buf2, stderr, 2);
00308
00309 fprintf(stderr, "Differ at %d (%04x)\n", i, i);
00310 rv=-1;
00311 }
00312 }
00313
00314 if (rv) {
00315 fprintf(stderr, "Data differs in content\n");
00316 return 3;
00317 }
00318
00319 fprintf(stderr, "PASSED.\n");
00320
00321 return 0;
00322 }
00323
00324
00325 int main(int argc, char **argv) {
00326 int rv;
00327 const char *cmd;
00328
00329 if (argc>1)
00330 cmd=argv[1];
00331 else
00332 cmd="check";
00333
00334 if (strcasecmp(cmd, "check")==0) {
00335 rv=check1() ||
00336 check2() ||
00337 test_gui(0) ||
00338 check_directory() ||
00339 check_list() ||
00340 check_constlist()
00341 || print_paths()
00342 ;
00343 }
00344 else if (strcasecmp(cmd, "gui")==0) {
00345 rv=test_gui(1);
00346 }
00347 else {
00348 fprintf(stderr, "Unknown command \"%s\"\n", cmd);
00349 return 1;
00350 }
00351 return rv;
00352 }
00353
00354