Skip to content

Latest commit

 

History

History
182 lines (151 loc) · 7.52 KB

testfile.c

File metadata and controls

182 lines (151 loc) · 7.52 KB
 
1
2
3
/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */
Mar 8, 2006
Mar 8, 2006
4
#include <stdlib.h>
Mar 30, 2007
Mar 30, 2007
5
6
#ifndef _MSC_VER
May 17, 2006
May 17, 2006
7
#include <unistd.h>
Mar 30, 2007
Mar 30, 2007
8
#endif
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "SDL.h"
#include "SDL_endian.h"
#include <stdio.h>
/* 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);
Feb 27, 2006
Feb 27, 2006
56
rwops = SDL_RWFromFile(NULL,"ab+");
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
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 */
}