Mercurial > sdl-ios-xcode
comparison test/testfile.c @ 1453:2eb75f8a32ca
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.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 27 Feb 2006 19:19:22 +0000 |
parents | |
children | 07d2b0085ecd |
comparison
equal
deleted
inserted
replaced
1452:b7184889c1cb | 1453:2eb75f8a32ca |
---|---|
1 | |
2 /* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */ | |
3 | |
4 | |
5 | |
6 #include "SDL.h" | |
7 #include "SDL_endian.h" | |
8 | |
9 | |
10 #include <stdio.h> | |
11 | |
12 /* WARNING ! those 2 files will be destroyed by this test program */ | |
13 #define FBASENAME1 "sdldata1" /* this file will be created during tests */ | |
14 #define FBASENAME2 "sdldata2" /* this file should not exists before starting test */ | |
15 | |
16 | |
17 #ifndef NULL | |
18 #define NULL ((void *)0) | |
19 #endif | |
20 | |
21 static void cleanup( void ) { | |
22 | |
23 unlink(FBASENAME1); | |
24 unlink(FBASENAME2); | |
25 } | |
26 | |
27 static void rwops_error_quit( unsigned line, SDL_RWops *rwops) { | |
28 | |
29 printf("testfile.c(%d): failed\n",line); | |
30 if (rwops) { | |
31 rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */ | |
32 } | |
33 cleanup(); | |
34 exit(1); /* quit with rwops error (test failed) */ | |
35 } | |
36 | |
37 #define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) ) | |
38 | |
39 | |
40 | |
41 int main(int argc, char *argv[]) | |
42 { | |
43 SDL_RWops *rwops = NULL; | |
44 char test_buf[30]; | |
45 | |
46 cleanup(); | |
47 | |
48 /* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ | |
49 | |
50 rwops = SDL_RWFromFile(NULL,NULL); | |
51 if (rwops) RWOP_ERR_QUIT(rwops); | |
52 rwops = SDL_RWFromFile(NULL,"a+" WIN32_FILE_MODE); | |
53 if (rwops) RWOP_ERR_QUIT(rwops); | |
54 rwops = SDL_RWFromFile(NULL,"sldfkjsldkfj"); | |
55 if (rwops) RWOP_ERR_QUIT(rwops); | |
56 rwops = SDL_RWFromFile("something",""); | |
57 if (rwops) RWOP_ERR_QUIT(rwops); | |
58 rwops = SDL_RWFromFile("something",NULL); | |
59 if (rwops) RWOP_ERR_QUIT(rwops); | |
60 printf("test1 OK\n"); | |
61 | |
62 /* test 2 : check that inexistant file is not successfully opened/created when required */ | |
63 /* modes : r, r+ implie that file MUST exist | |
64 modes : a, a+, w, w+ checks that it succeeds (file may not exists) | |
65 | |
66 */ | |
67 rwops = SDL_RWFromFile(FBASENAME2,"rb"); /* this file doesn't exist that call must fail */ | |
68 if (rwops) RWOP_ERR_QUIT(rwops); | |
69 rwops = SDL_RWFromFile(FBASENAME2,"rb+"); /* this file doesn't exist that call must fail */ | |
70 if (rwops) RWOP_ERR_QUIT(rwops); | |
71 rwops = SDL_RWFromFile(FBASENAME2,"wb"); | |
72 if (!rwops) RWOP_ERR_QUIT(rwops); | |
73 rwops->close(rwops); unlink(FBASENAME2); | |
74 rwops = SDL_RWFromFile(FBASENAME2,"wb+"); | |
75 if (!rwops) RWOP_ERR_QUIT(rwops); | |
76 rwops->close(rwops); unlink(FBASENAME2); | |
77 rwops = SDL_RWFromFile(FBASENAME2,"ab"); | |
78 if (!rwops) RWOP_ERR_QUIT(rwops); | |
79 rwops->close(rwops); unlink(FBASENAME2); | |
80 rwops = SDL_RWFromFile(FBASENAME2,"ab+"); | |
81 if (!rwops) RWOP_ERR_QUIT(rwops); | |
82 rwops->close(rwops); unlink(FBASENAME2); | |
83 printf("test2 OK\n"); | |
84 | |
85 /* test 3 : creation, writing , reading, seeking, | |
86 test : w mode, r mode, w+ mode | |
87 */ | |
88 rwops = SDL_RWFromFile(FBASENAME1,"wb"); /* write only */ | |
89 if (!rwops) RWOP_ERR_QUIT(rwops); | |
90 if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); | |
91 if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); | |
92 if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); | |
93 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
94 if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in write only mode */ | |
95 rwops->close(rwops); | |
96 | |
97 rwops = SDL_RWFromFile(FBASENAME1,"rb"); /* read mode, file must exists */ | |
98 if (!rwops) RWOP_ERR_QUIT(rwops); | |
99 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
100 if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); | |
101 if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); | |
102 if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); | |
103 if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); | |
104 if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); | |
105 if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); | |
106 if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); | |
107 if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); | |
108 if (0!=rwops->write(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* readonly mode */ | |
109 rwops->close(rwops); | |
110 | |
111 /* test 3: same with w+ mode */ | |
112 rwops = SDL_RWFromFile(FBASENAME1,"wb+"); /* write + read + truncation */ | |
113 if (!rwops) RWOP_ERR_QUIT(rwops); | |
114 if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); | |
115 if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); | |
116 if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); | |
117 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
118 if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ | |
119 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
120 if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); | |
121 if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); | |
122 if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); | |
123 if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); | |
124 if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); | |
125 if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); | |
126 if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); | |
127 if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); | |
128 rwops->close(rwops); | |
129 printf("test3 OK\n"); | |
130 | |
131 /* test 4: same in r+ mode */ | |
132 rwops = SDL_RWFromFile(FBASENAME1,"rb+"); /* write + read + file must exists, no truncation */ | |
133 if (!rwops) RWOP_ERR_QUIT(rwops); | |
134 if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); | |
135 if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); | |
136 if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); | |
137 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
138 if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ | |
139 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
140 if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); | |
141 if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); | |
142 if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); | |
143 if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); | |
144 if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); | |
145 if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); | |
146 if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); | |
147 if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); | |
148 rwops->close(rwops); | |
149 printf("test4 OK\n"); | |
150 | |
151 /* test5 : append mode */ | |
152 rwops = SDL_RWFromFile(FBASENAME1,"ab+"); /* write + read + append */ | |
153 if (!rwops) RWOP_ERR_QUIT(rwops); | |
154 if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); | |
155 if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); | |
156 if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); | |
157 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
158 | |
159 if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); | |
160 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
161 | |
162 if (20+27!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); | |
163 if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); | |
164 if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); | |
165 if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); | |
166 if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); | |
167 | |
168 if (27!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); | |
169 | |
170 if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); | |
171 if (3!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); | |
172 if (SDL_memcmp(test_buf,"123456789012345678901234567123",30)) | |
173 RWOP_ERR_QUIT(rwops); | |
174 rwops->close(rwops); | |
175 printf("test5 OK\n"); | |
176 cleanup(); | |
177 return 0; /* all ok */ | |
178 } |