From 680be243724dd1e14bfce9d8c35240902a19d188 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 27 Feb 2006 19:19:22 +0000 Subject: [PATCH] Date: Mon, 27 Feb 2006 17:01:43 +0100 From: "William Petiot [exoide]" Subject: Re: [SDL] cvs version: standard win32 SDL.DLL file test [patch] I found a bug or two in previous patch, so here is a patch to correct this. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401457 --- VisualC.zip | Bin 39792 -> 42437 bytes include/SDL_rwops.h | 1 - src/file/SDL_rwops.c | 8 +- test/Makefile.in | 5 +- test/testfile.c | 178 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 187 insertions(+), 5 deletions(-) create mode 100644 test/testfile.c diff --git a/VisualC.zip b/VisualC.zip index bb977c2db939cb36df3a01c7ffbea5f3d0565eee..a9db1f643144d1936b6256e4baf96fd1e28afa7c 100644 GIT binary patch delta 3626 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 K0Ke@0$NCSwHsH$u delta 1084 zcmX?ln(4zfrU~XOZ0z3gr&!M1oep75wlWHVm~hQHbMtSb`%tUz znazPJsI!JB*nG{}4XRtgVJ1{^uZthVXnxmFsAPucR;Z++Ulc^L-Y)6DIS!N=>#a;N0w(s0~$AklN0|=gkmd zV!>~5*Nc&XL4#}Z!fdI@@>v}9eS7~o-#zfp85UGmr}}0eau8^H-}FCmR$R2;Dse;B z%tgFg-At}{>)*Dxb=5cRW)82?zwcRR+P__KZhaT`tTz2-qTIBbwNDo=Y7vu?xwAl_ zlWW

~oxHORjaMC_2sO-qUQivLmy?d1^t|!n+w}ueV0e_^PIyZ}Os{{_)`x{0B<+ zF#O@Pcz1y}hGX7d%`<;ao-VmlU9|8$@7>u|Zwo%;U*Gs7;v$#xUB>K{H_V=HOpWgS z9wWZd(0>W*cZ0NtvvdXjn7E~uNB2jz248x&jlXRB?W@_p|Ncu_{5ARUDv2hKWjW1~ z?ulNBLY>E4j1}!8+k$p^&16$%z1*E}*kOu|>!U+6+_t6!hQtOw(@K@;S>fR#=aU?9 z(d?p4%ybp7tm;gMwHs&6oos)7nPTpbImfxRCKlDN^L5s;yAUIO(W2*7uis*uKlN>m z3;5Nn_P>7q@YmlOW^lyGFO-Z#c6yOD6IUgeDYMv($*&g5hidden.win32io.h = INVALID_HANDLE_VALUE; if (win32_file_open(rwops,file,mode)) { SDL_FreeRW(rwops); diff --git a/test/Makefile.in b/test/Makefile.in index 2824797ef..c88e461b9 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -7,7 +7,7 @@ EXE = @EXE@ CFLAGS = @CFLAGS@ LIBS = @LIBS@ -TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testdyngl$(EXE) testerror$(EXE) testgamma$(EXE) testgl$(EXE) testhread$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE) +TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl$(EXE) testhread$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE) all: $(TARGETS) @@ -38,6 +38,9 @@ testdyngl$(EXE): $(srcdir)/testdyngl.c testerror$(EXE): $(srcdir)/testerror.c $(CC) -o $@ $? $(CFLAGS) $(LIBS) +testfile$(EXE): $(srcdir)/testfile.c + $(CC) -o $@ $? $(CFLAGS) $(LIBS) + testgamma$(EXE): $(srcdir)/testgamma.c $(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@ diff --git a/test/testfile.c b/test/testfile.c new file mode 100644 index 000000000..99fe5e512 --- /dev/null +++ b/test/testfile.c @@ -0,0 +1,178 @@ + +/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */ + + + +#include "SDL.h" +#include "SDL_endian.h" + + +#include + +/* WARNING ! those 2 files will be destroyed by this test program */ +#define FBASENAME1 "sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "sdldata2" /* this file should not exists before starting test */ + + +#ifndef NULL +#define NULL ((void *)0) +#endif + +static void cleanup( void ) { + + unlink(FBASENAME1); + unlink(FBASENAME2); +} + +static void rwops_error_quit( unsigned line, SDL_RWops *rwops) { + + printf("testfile.c(%d): failed\n",line); + if (rwops) { + rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */ + } + cleanup(); + exit(1); /* quit with rwops error (test failed) */ +} + +#define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) ) + + + +int main(int argc, char *argv[]) +{ + SDL_RWops *rwops = NULL; + char test_buf[30]; + + cleanup(); + +/* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ + + rwops = SDL_RWFromFile(NULL,NULL); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL,"a+" WIN32_FILE_MODE); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL,"sldfkjsldkfj"); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something",""); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something",NULL); + if (rwops) RWOP_ERR_QUIT(rwops); + printf("test1 OK\n"); + +/* test 2 : check that inexistant file is not successfully opened/created when required */ +/* modes : r, r+ implie that file MUST exist + modes : a, a+, w, w+ checks that it succeeds (file may not exists) + + */ + rwops = SDL_RWFromFile(FBASENAME2,"rb"); /* this file doesn't exist that call must fail */ + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2,"rb+"); /* this file doesn't exist that call must fail */ + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2,"wb"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"wb+"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"ab"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"ab+"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + printf("test2 OK\n"); + +/* test 3 : creation, writing , reading, seeking, + test : w mode, r mode, w+ mode + */ + rwops = SDL_RWFromFile(FBASENAME1,"wb"); /* write only */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in write only mode */ + rwops->close(rwops); + + rwops = SDL_RWFromFile(FBASENAME1,"rb"); /* read mode, file must exists */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->write(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* readonly mode */ + rwops->close(rwops); + +/* test 3: same with w+ mode */ + rwops = SDL_RWFromFile(FBASENAME1,"wb+"); /* write + read + truncation */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test3 OK\n"); + +/* test 4: same in r+ mode */ + rwops = SDL_RWFromFile(FBASENAME1,"rb+"); /* write + read + file must exists, no truncation */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test4 OK\n"); + +/* test5 : append mode */ + rwops = SDL_RWFromFile(FBASENAME1,"ab+"); /* write + read + append */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + + if (20+27!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + + if (27!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (3!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"123456789012345678901234567123",30)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test5 OK\n"); + cleanup(); + return 0; /* all ok */ +}