/* * recenteditor_data.c * * A programmers editor * * Tests (ensure correct functionality of modules) * * Author: Dario Rodriguez dario@softhome.net * This program is licensed under the terms of GNU GPL v2.1+ */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <limits.h> #include <fcntl.h> #include "recenteditor_data.h" #define PREFIX "retest_" #define TEST_OK "OK" typedef struct test_t { char *name; char *(*fn)(redata_t *,char *,char *, int, int); char *param1; char *param2; int int1; int int2; } test_t; char *test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2); int main(int argc, char *argv[]) { test_t tests[]={ {"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, {"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, {"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, {"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, }; redata_t *redata; int i; int nerrors; char *res; for(i=0,nerrors=0;i<(sizeof(tests)/sizeof(tests[0]));i++) { if((redata=redata_init())==NULL) { fprintf(stderr,"ERROR: problem initializing redata module\n"); return(1); } fprintf(stderr,"%s...",tests[i].name); res=tests[i].fn(redata,tests[i].param1,tests[i].param2,tests[i].int1,tests[i].int2); if(strcmp(res,TEST_OK)==0) { fprintf(stderr," ok.\n"); } else { fprintf(stderr," ERROR: %s\n",res); nerrors++; } redata_free(redata),redata=NULL; } fprintf(stderr,"\n"); if(nerrors==0) fprintf(stderr,"All tests passed OK\n"); else fprintf(stderr,"%i tests failed of %i total tests.\n",nerrors,i); redata_free(redata),redata=NULL; return((nerrors==0)?0:1); } char * test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2) { char *mem; char hash129_pre[129]; char hash129_post[129]; int fd,i; fprintf(stderr,"\ntest_newfile(%s%s%s,%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(dummy!=NULL)?dummy:"NULL",filesize,dummy2); /* prepare file for loading */ if((mem=malloc(filesize))==NULL) return("insuf. mem. for temp. buffer"); memset(mem,0,filesize); for(i=0;i<filesize;i++) ((unsigned char *)mem)[i]=(filesize%256); if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) { free(mem),mem=NULL; return("couldn't create temporary file"); } write(fd,mem,filesize); close(fd),fd=-1; redata_filehash(redata,filename,hash129_pre); free(mem),mem=NULL; /* load file */ if(redata_load(redata,filename,0)!=0) { unlink(filename); return("couldn't load file"); } unlink(filename); redata_hash(redata,hash129_post); if(strcmp(hash129_pre,hash129_post)!=0) return("loaded file is corrupted"); /* save file */ redata_save(redata,filename); hash129_post[0]='\0'; redata_filehash(redata,filename,hash129_post); if(strcmp(hash129_pre,hash129_post)!=0) return("saved file is corrupted"); unlink(filename); return(TEST_OK); }