2 /* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */
11 #include "SDL_endian.h"
16 /* WARNING ! those 2 files will be destroyed by this test program */
17 #define FBASENAME1 "sdldata1" /* this file will be created during tests */
18 #define FBASENAME2 "sdldata2" /* this file should not exists before starting test */
22 #define NULL ((void *)0)
25 static void cleanup( void ) {
31 static void rwops_error_quit( unsigned line
, SDL_RWops
*rwops
) {
33 printf("testfile.c(%d): failed\n",line
);
35 rwops
->close(rwops
); /* This calls SDL_FreeRW(rwops); */
38 exit(1); /* quit with rwops error (test failed) */
41 #define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) )
45 int main(int argc
, char *argv
[])
47 SDL_RWops
*rwops
= NULL
;
52 /* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */
54 rwops
= SDL_RWFromFile(NULL
,NULL
);
55 if (rwops
) RWOP_ERR_QUIT(rwops
);
56 rwops
= SDL_RWFromFile(NULL
,"ab+");
57 if (rwops
) RWOP_ERR_QUIT(rwops
);
58 rwops
= SDL_RWFromFile(NULL
,"sldfkjsldkfj");
59 if (rwops
) RWOP_ERR_QUIT(rwops
);
60 rwops
= SDL_RWFromFile("something","");
61 if (rwops
) RWOP_ERR_QUIT(rwops
);
62 rwops
= SDL_RWFromFile("something",NULL
);
63 if (rwops
) RWOP_ERR_QUIT(rwops
);
66 /* test 2 : check that inexistant file is not successfully opened/created when required */
67 /* modes : r, r+ implie that file MUST exist
68 modes : a, a+, w, w+ checks that it succeeds (file may not exists)
71 rwops
= SDL_RWFromFile(FBASENAME2
,"rb"); /* this file doesn't exist that call must fail */
72 if (rwops
) RWOP_ERR_QUIT(rwops
);
73 rwops
= SDL_RWFromFile(FBASENAME2
,"rb+"); /* this file doesn't exist that call must fail */
74 if (rwops
) RWOP_ERR_QUIT(rwops
);
75 rwops
= SDL_RWFromFile(FBASENAME2
,"wb");
76 if (!rwops
) RWOP_ERR_QUIT(rwops
);
77 rwops
->close(rwops
); unlink(FBASENAME2
);
78 rwops
= SDL_RWFromFile(FBASENAME2
,"wb+");
79 if (!rwops
) RWOP_ERR_QUIT(rwops
);
80 rwops
->close(rwops
); unlink(FBASENAME2
);
81 rwops
= SDL_RWFromFile(FBASENAME2
,"ab");
82 if (!rwops
) RWOP_ERR_QUIT(rwops
);
83 rwops
->close(rwops
); unlink(FBASENAME2
);
84 rwops
= SDL_RWFromFile(FBASENAME2
,"ab+");
85 if (!rwops
) RWOP_ERR_QUIT(rwops
);
86 rwops
->close(rwops
); unlink(FBASENAME2
);
89 /* test 3 : creation, writing , reading, seeking,
90 test : w mode, r mode, w+ mode
92 rwops
= SDL_RWFromFile(FBASENAME1
,"wb"); /* write only */
93 if (!rwops
) RWOP_ERR_QUIT(rwops
);
94 if (1 != rwops
->write(rwops
,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops
);
95 if (10 != rwops
->write(rwops
,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops
);
96 if (7 != rwops
->write(rwops
,"1234567",1,7) ) RWOP_ERR_QUIT(rwops
);
97 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
98 if (0!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
); /* we are in write only mode */
101 rwops
= SDL_RWFromFile(FBASENAME1
,"rb"); /* read mode, file must exists */
102 if (!rwops
) RWOP_ERR_QUIT(rwops
);
103 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
104 if (20!=rwops
->seek(rwops
,-7,RW_SEEK_END
)) RWOP_ERR_QUIT(rwops
);
105 if (7!=rwops
->read(rwops
,test_buf
,1,7)) RWOP_ERR_QUIT(rwops
);
106 if (SDL_memcmp(test_buf
,"1234567",7)) RWOP_ERR_QUIT(rwops
);
107 if (0!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
);
108 if (0!=rwops
->read(rwops
,test_buf
,10,100)) RWOP_ERR_QUIT(rwops
);
109 if (0!=rwops
->seek(rwops
,-27,RW_SEEK_CUR
)) RWOP_ERR_QUIT(rwops
);
110 if (2!=rwops
->read(rwops
,test_buf
,10,3)) RWOP_ERR_QUIT(rwops
);
111 if (SDL_memcmp(test_buf
,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops
);
112 if (0!=rwops
->write(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
); /* readonly mode */
115 /* test 3: same with w+ mode */
116 rwops
= SDL_RWFromFile(FBASENAME1
,"wb+"); /* write + read + truncation */
117 if (!rwops
) RWOP_ERR_QUIT(rwops
);
118 if (1 != rwops
->write(rwops
,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops
);
119 if (10 != rwops
->write(rwops
,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops
);
120 if (7 != rwops
->write(rwops
,"1234567",1,7) ) RWOP_ERR_QUIT(rwops
);
121 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
122 if (1!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
); /* we are in read/write mode */
123 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
124 if (20!=rwops
->seek(rwops
,-7,RW_SEEK_END
)) RWOP_ERR_QUIT(rwops
);
125 if (7!=rwops
->read(rwops
,test_buf
,1,7)) RWOP_ERR_QUIT(rwops
);
126 if (SDL_memcmp(test_buf
,"1234567",7)) RWOP_ERR_QUIT(rwops
);
127 if (0!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
);
128 if (0!=rwops
->read(rwops
,test_buf
,10,100)) RWOP_ERR_QUIT(rwops
);
129 if (0!=rwops
->seek(rwops
,-27,RW_SEEK_CUR
)) RWOP_ERR_QUIT(rwops
);
130 if (2!=rwops
->read(rwops
,test_buf
,10,3)) RWOP_ERR_QUIT(rwops
);
131 if (SDL_memcmp(test_buf
,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops
);
133 printf("test3 OK\n");
135 /* test 4: same in r+ mode */
136 rwops
= SDL_RWFromFile(FBASENAME1
,"rb+"); /* write + read + file must exists, no truncation */
137 if (!rwops
) RWOP_ERR_QUIT(rwops
);
138 if (1 != rwops
->write(rwops
,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops
);
139 if (10 != rwops
->write(rwops
,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops
);
140 if (7 != rwops
->write(rwops
,"1234567",1,7) ) RWOP_ERR_QUIT(rwops
);
141 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
142 if (1!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
); /* we are in read/write mode */
143 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
144 if (20!=rwops
->seek(rwops
,-7,RW_SEEK_END
)) RWOP_ERR_QUIT(rwops
);
145 if (7!=rwops
->read(rwops
,test_buf
,1,7)) RWOP_ERR_QUIT(rwops
);
146 if (SDL_memcmp(test_buf
,"1234567",7)) RWOP_ERR_QUIT(rwops
);
147 if (0!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
);
148 if (0!=rwops
->read(rwops
,test_buf
,10,100)) RWOP_ERR_QUIT(rwops
);
149 if (0!=rwops
->seek(rwops
,-27,RW_SEEK_CUR
)) RWOP_ERR_QUIT(rwops
);
150 if (2!=rwops
->read(rwops
,test_buf
,10,3)) RWOP_ERR_QUIT(rwops
);
151 if (SDL_memcmp(test_buf
,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops
);
153 printf("test4 OK\n");
155 /* test5 : append mode */
156 rwops
= SDL_RWFromFile(FBASENAME1
,"ab+"); /* write + read + append */
157 if (!rwops
) RWOP_ERR_QUIT(rwops
);
158 if (1 != rwops
->write(rwops
,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops
);
159 if (10 != rwops
->write(rwops
,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops
);
160 if (7 != rwops
->write(rwops
,"1234567",1,7) ) RWOP_ERR_QUIT(rwops
);
161 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
163 if (1!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
);
164 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
166 if (20+27!=rwops
->seek(rwops
,-7,RW_SEEK_END
)) RWOP_ERR_QUIT(rwops
);
167 if (7!=rwops
->read(rwops
,test_buf
,1,7)) RWOP_ERR_QUIT(rwops
);
168 if (SDL_memcmp(test_buf
,"1234567",7)) RWOP_ERR_QUIT(rwops
);
169 if (0!=rwops
->read(rwops
,test_buf
,1,1)) RWOP_ERR_QUIT(rwops
);
170 if (0!=rwops
->read(rwops
,test_buf
,10,100)) RWOP_ERR_QUIT(rwops
);
172 if (27!=rwops
->seek(rwops
,-27,RW_SEEK_CUR
)) RWOP_ERR_QUIT(rwops
);
174 if (0!=rwops
->seek(rwops
,0L,RW_SEEK_SET
)) RWOP_ERR_QUIT(rwops
);
175 if (3!=rwops
->read(rwops
,test_buf
,10,3)) RWOP_ERR_QUIT(rwops
);
176 if (SDL_memcmp(test_buf
,"123456789012345678901234567123",30))
177 RWOP_ERR_QUIT(rwops
);
179 printf("test5 OK\n");
181 return 0; /* all ok */