gwenhywfar/src/testlib.c @ dfefcc0f
454b687a | aquamaniac | ||
#include <gwenhywfar/buffer.h>
|
|||
#include <gwenhywfar/base64.h>
|
|||
52ba1d9b | aquamaniac | #include <gwenhywfar/debug.h>
|
|
#include <gwenhywfar/padd.h>
|
|||
da13b417 | martin | #include <gwenhywfar/cgui.h>
|
|
8b223fd5 | christian | #include <gwenhywfar/directory.h>
|
|
3722f006 | christian | #include <gwenhywfar/list.h>
|
|
da13b417 | martin | #include <gwenhywfar/pathmanager.h>
|
|
8b223fd5 | christian | #include <errno.h>
|
|
da13b417 | martin | #include "gwenhywfar.h"
|
|
454b687a | aquamaniac | ||
int check1() {
|
|||
const char *testString="01234567890123456789";
|
|||
int rv;
|
|||
GWEN_BUFFER *buf1;
|
|||
GWEN_BUFFER *buf2;
|
|||
const char *p1, *p2;
|
|||
int i;
|
|||
int len;
|
|||
52ba1d9b | aquamaniac | fprintf(stderr, "Check 1 ...");
|
|
454b687a | aquamaniac | buf1=GWEN_Buffer_new(0, 256, 0, 1);
|
|
rv=GWEN_Base64_Encode((const unsigned char*)testString,
|
|||
strlen(testString),
|
|||
buf1, 0);
|
|||
if (rv) {
|
|||
fprintf(stderr, "FAILED: Could not encode.\n");
|
|||
return 2;
|
|||
}
|
|||
buf2=GWEN_Buffer_new(0, 256, 0, 1);
|
|||
rv=GWEN_Base64_Decode((const unsigned char*)GWEN_Buffer_GetStart(buf1), 0,
|
|||
buf2);
|
|||
if (rv) {
|
|||
fprintf(stderr, "FAILED: Could not decode.\n");
|
|||
return 2;
|
|||
}
|
|||
p1=testString;
|
|||
len=strlen(testString);
|
|||
p2=GWEN_Buffer_GetStart(buf2);
|
|||
if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
|
|||
fprintf(stderr, "Data differs in size\n");
|
|||
return 3;
|
|||
}
|
|||
rv=0;
|
|||
for (i=0; i<len; i++) {
|
|||
if (p1[i]!=p2[i]) {
|
|||
fprintf(stderr, "Buffer1:\n%s\n", testString);
|
|||
fprintf(stderr, "Buffer2:\n");
|
|||
15b24f02 | martin | GWEN_Buffer_Dump(buf2, 2);
|
|
454b687a | aquamaniac | ||
fprintf(stderr, "Differ at %d (%04x)\n", i, i);
|
|||
rv=-1;
|
|||
}
|
|||
}
|
|||
if (rv) {
|
|||
fprintf(stderr, "Data differs in content\n");
|
|||
return 3;
|
|||
}
|
|||
52ba1d9b | aquamaniac | fprintf(stderr, "PASSED.\n");
|
|
return 0;
|
|||
}
|
|||
da13b417 | martin | int test_gui(int test_with_interaction) {
|
|
char buffer[50];
|
|||
52ba1d9b | aquamaniac | int rv;
|
|
da13b417 | martin | GWEN_GUI *gui = GWEN_Gui_CGui_new();
|
|
/* Set the static GUI object */
|
|||
assert(gui);
|
|||
GWEN_Gui_SetGui(gui);
|
|||
02eb3a63 | martin | GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
|
|
da13b417 | martin | ||
rv = GWEN_Gui_ShowBox(0,
|
|||
"This is a ShowBox test title",
|
|||
"This is a ShowBox test.",
|
|||
0);
|
|||
printf("GWEN_Gui_ShowBox: rv=%d\n", rv);
|
|||
GWEN_Gui_HideBox(rv);
|
|||
printf("GWEN_Gui_HideBox called.\n\n");
|
|||
if (test_with_interaction) {
|
|||
rv = GWEN_Gui_InputBox(0,
|
|||
"This is a InputBox test title",
|
|||
"Just enter something.",
|
|||
buffer,
|
|||
1, 40,
|
|||
0);
|
|||
printf("GWEN_Gui_InputBox: rv=%d, result=\"%s\"\n\n",
|
|||
rv, buffer);
|
|||
rv = GWEN_Gui_MessageBox(0,
|
|||
"Third test title, this time MessageBox",
|
|||
"Just press the first or second button.",
|
|||
"First button.", "Second button", NULL,
|
|||
0);
|
|||
printf("GWEN_Gui_MessageBox: rv=%d; button=%s\n", rv,
|
|||
(rv == 1 ? "first" : (rv == 2 ? "second" : "unknown")));
|
|||
52ba1d9b | aquamaniac | }
|
|
da13b417 | martin | GWEN_Gui_free(gui);
|
|
52ba1d9b | aquamaniac | return 0;
|
|
}
|
|||
8b223fd5 | christian | #ifndef MAX_PATH
|
|
# define MAX_PATH 200
|
|||
#endif
|
|||
int check_directory()
|
|||
{
|
|||
char tmpdir[MAX_PATH];
|
|||
da13b417 | martin | GWEN_DIRECTORY *dir;
|
|
8b223fd5 | christian | int rv;
|
|
GWEN_Directory_GetTmpDirectory(tmpdir, MAX_PATH);
|
|||
printf("GWEN_Directory_GetTmpDirectory returns \"%s\" as tmp directory\n",
|
|||
tmpdir);
|
|||
dir = GWEN_Directory_new();
|
|||
rv = GWEN_Directory_Open(dir, tmpdir);
|
|||
if (rv) {
|
|||
/* error */
|
|||
printf("Error on GWEN_Directory_Open(\"%s\"): errno=%d: %s\n",
|
|||
tmpdir, errno, strerror(errno));
|
|||
} else {
|
|||
rv = GWEN_Directory_Close(dir);
|
|||
}
|
|||
GWEN_Directory_free(dir);
|
|||
return rv;
|
|||
}
|
|||
3722f006 | christian | #define ASSERT(expr) if (!(expr)) \
|
|
{ printf("FAILED assertion in " __FILE__ ": %d: " #expr "\n", \
|
|||
__LINE__); return -1; }
|
|||
int check_list()
|
|||
{
|
|||
const char *e1 = "one", *e2 = "two", *e3 = "three";
|
|||
GWEN_LIST *list;
|
|||
GWEN_LIST_ITERATOR *iter;
|
|||
list = GWEN_List_new();
|
|||
ASSERT(GWEN_List_GetSize(list) == 0);
|
|||
GWEN_List_PushBack(list, (void*) e2);
|
|||
ASSERT(GWEN_List_GetSize(list) == 1);
|
|||
GWEN_List_PushBack(list, (void*) e3);
|
|||
ASSERT(GWEN_List_GetSize(list) == 2);
|
|||
GWEN_List_PushFront(list, (void*) e1);
|
|||
ASSERT(GWEN_List_GetSize(list) == 3);
|
|||
ASSERT(GWEN_List_GetFront(list) == e1);
|
|||
ASSERT(GWEN_List_GetBack(list) == e3);
|
|||
GWEN_List_Remove(list, e2);
|
|||
ASSERT(GWEN_List_GetSize(list) == 2);
|
|||
ASSERT(GWEN_List_GetFront(list) == e1);
|
|||
ASSERT(GWEN_List_GetBack(list) == e3);
|
|||
GWEN_List_PopBack(list);
|
|||
ASSERT(GWEN_List_GetSize(list) == 1);
|
|||
ASSERT(GWEN_List_GetFront(list) == e1);
|
|||
ASSERT(GWEN_List_GetBack(list) == e1);
|
|||
GWEN_List_PushBack(list, (void*) e2);
|
|||
ASSERT(GWEN_List_GetSize(list) == 2);
|
|||
ASSERT(GWEN_List_GetFront(list) == e1);
|
|||
ASSERT(GWEN_List_GetBack(list) == e2);
|
|||
iter = GWEN_List_First(list);
|
|||
ASSERT(GWEN_ListIterator_Data(iter) == e1);
|
|||
ASSERT(GWEN_ListIterator_Next(iter) == e2);
|
|||
ASSERT(GWEN_ListIterator_Data(iter) == e2);
|
|||
ASSERT(GWEN_ListIterator_Previous(iter) == e1);
|
|||
GWEN_List_Erase(list, iter);
|
|||
ASSERT(GWEN_List_GetSize(list) == 1);
|
|||
ASSERT(GWEN_List_GetFront(list) == e2);
|
|||
ASSERT(GWEN_List_GetBack(list) == e2);
|
|||
GWEN_List_Clear(list);
|
|||
ASSERT(GWEN_List_GetSize(list) == 0);
|
|||
GWEN_List_free(list);
|
|||
GWEN_ListIterator_free(iter);
|
|||
printf("check_list: All tests passed.\n");
|
|||
return 0;
|
|||
}
|
|||
int check_constlist()
|
|||
{
|
|||
const char *e1 = "one", *e2 = "two", *e3 = "three";
|
|||
GWEN_CONSTLIST *list;
|
|||
GWEN_CONSTLIST_ITERATOR *iter;
|
|||
list = GWEN_ConstList_new();
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 0);
|
|||
GWEN_ConstList_PushBack(list, e2);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 1);
|
|||
GWEN_ConstList_PushBack(list, e3);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 2);
|
|||
GWEN_ConstList_PushFront(list, e1);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 3);
|
|||
ASSERT(GWEN_ConstList_GetFront(list) == e1);
|
|||
ASSERT(GWEN_ConstList_GetBack(list) == e3);
|
|||
GWEN_ConstList_PopBack(list);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 2);
|
|||
ASSERT(GWEN_ConstList_GetFront(list) == e1);
|
|||
ASSERT(GWEN_ConstList_GetBack(list) == e2);
|
|||
GWEN_ConstList_PushBack(list, e3);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 3);
|
|||
ASSERT(GWEN_ConstList_GetFront(list) == e1);
|
|||
ASSERT(GWEN_ConstList_GetBack(list) == e3);
|
|||
iter = GWEN_ConstList_First(list);
|
|||
ASSERT(GWEN_ConstListIterator_Data(iter) == e1);
|
|||
ASSERT(GWEN_ConstListIterator_Next(iter) == e2);
|
|||
ASSERT(GWEN_ConstListIterator_Data(iter) == e2);
|
|||
ASSERT(GWEN_ConstListIterator_Previous(iter) == e1);
|
|||
GWEN_ConstList_Clear(list);
|
|||
ASSERT(GWEN_ConstList_GetSize(list) == 0);
|
|||
GWEN_ConstList_free(list);
|
|||
GWEN_ConstListIterator_free(iter);
|
|||
printf("check_constlist: All tests passed.\n");
|
|||
return 0;
|
|||
}
|
|||
454b687a | aquamaniac | ||
da13b417 | martin | void *printfunc(const char *s, void *u)
|
|
{
|
|||
const char *pathname = u;
|
|||
printf("Path %s contains: %s\n", pathname, s);
|
|||
return 0;
|
|||
}
|
|||
int print_paths()
|
|||
{
|
|||
const char *paths[] = { GWEN_PM_SYSCONFDIR
|
|||
, GWEN_PM_LOCALEDIR
|
|||
, GWEN_PM_PLUGINDIR
|
|||
, GWEN_PM_DATADIR
|
|||
, 0 };
|
|||
const char **p = paths;
|
|||
for ( ; *p != 0; ++p) {
|
|||
const char *pathname = *p;
|
|||
GWEN_STRINGLIST *sl =
|
|||
GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, pathname);
|
|||
printf("Path %s has %d elements.\n", pathname, GWEN_StringList_Count(sl));
|
|||
GWEN_StringList_ForEach(sl, printfunc, (void*)pathname);
|
|||
}
|
|||
return 0;
|
|||
}
|
|||
77faec2d | martin | ||
int check2() {
|
|||
const char *testString="01234567890123456789";
|
|||
int rv;
|
|||
GWEN_BUFFER *buf1;
|
|||
GWEN_BUFFER *buf2;
|
|||
const char *p1, *p2;
|
|||
int i;
|
|||
int len;
|
|||
fprintf(stderr, "Check 2 ...");
|
|||
buf1=GWEN_Buffer_new(0, 256, 0, 1);
|
|||
GWEN_Buffer_AppendString(buf1, testString);
|
|||
rv=GWEN_Padd_PaddWithIso9796_2(buf1, 256);
|
|||
if (rv) {
|
|||
fprintf(stderr, "FAILED: Could not padd.\n");
|
|||
return 2;
|
|||
}
|
|||
buf2=GWEN_Buffer_new(0, 256, 0, 1);
|
|||
GWEN_Buffer_AppendBuffer(buf2, buf1);
|
|||
rv=GWEN_Padd_UnpaddWithIso9796_2(buf2);
|
|||
if (rv) {
|
|||
fprintf(stderr, "FAILED: Could not unpadd.\n");
|
|||
return 2;
|
|||
}
|
|||
p1=testString;
|
|||
len=strlen(testString);
|
|||
p2=GWEN_Buffer_GetStart(buf2);
|
|||
if (GWEN_Buffer_GetUsedBytes(buf2)!=len) {
|
|||
fprintf(stderr, "Data differs in size\n");
|
|||
return 3;
|
|||
}
|
|||
rv=0;
|
|||
for (i=0; i<len; i++) {
|
|||
if (p1[i]!=p2[i]) {
|
|||
fprintf(stderr, "Buffer1:\n%s\n", testString);
|
|||
fprintf(stderr, "Buffer2:\n");
|
|||
15b24f02 | martin | GWEN_Buffer_Dump(buf2, 2);
|
|
77faec2d | martin | ||
fprintf(stderr, "Differ at %d (%04x)\n", i, i);
|
|||
rv=-1;
|
|||
}
|
|||
}
|
|||
if (rv) {
|
|||
fprintf(stderr, "Data differs in content\n");
|
|||
return 3;
|
|||
}
|
|||
fprintf(stderr, "PASSED.\n");
|
|||
return 0;
|
|||
}
|
|||
454b687a | aquamaniac | int main(int argc, char **argv) {
|
|
int rv;
|
|||
52ba1d9b | aquamaniac | const char *cmd;
|
|
454b687a | aquamaniac | ||
52ba1d9b | aquamaniac | if (argc>1)
|
|
cmd=argv[1];
|
|||
else
|
|||
cmd="check";
|
|||
454b687a | aquamaniac | ||
52ba1d9b | aquamaniac | if (strcasecmp(cmd, "check")==0) {
|
|
da13b417 | martin | rv=check1() ||
|
|
77faec2d | martin | check2() ||
|
|
da13b417 | martin | test_gui(0) ||
|
|
3722f006 | christian | check_directory() ||
|
|
check_list() ||
|
|||
da13b417 | martin | check_constlist()
|
|
|| print_paths()
|
|||
;
|
|||
52ba1d9b | aquamaniac | }
|
|
da13b417 | martin | else if (strcasecmp(cmd, "gui")==0) {
|
|
rv=test_gui(1);
|
|||
52ba1d9b | aquamaniac | }
|
|
else {
|
|||
fprintf(stderr, "Unknown command \"%s\"\n", cmd);
|
|||
return 1;
|
|||
}
|
|||
8b223fd5 | christian | return rv;
|
|
454b687a | aquamaniac | }
|
|