symbian-qemu-0.9.1-12/libsdl-trunk/test/testfile.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */
       
     3 
       
     4 #include <stdlib.h>
       
     5 
       
     6 #ifndef _MSC_VER
       
     7 #include <unistd.h>
       
     8 #endif
       
     9 
       
    10 #include "SDL.h"
       
    11 #include "SDL_endian.h"
       
    12 
       
    13 
       
    14 #include <stdio.h>	
       
    15 
       
    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 */
       
    19 
       
    20 
       
    21 #ifndef NULL
       
    22 #define NULL ((void *)0)
       
    23 #endif 
       
    24 
       
    25 static void cleanup( void ) {
       
    26 
       
    27 	unlink(FBASENAME1);
       
    28 	unlink(FBASENAME2); 
       
    29 }
       
    30 
       
    31 static void rwops_error_quit( unsigned line, SDL_RWops *rwops) {
       
    32 	
       
    33 	printf("testfile.c(%d): failed\n",line);
       
    34 	if (rwops) {
       
    35 		rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */
       
    36 	}
       
    37 	cleanup();
       
    38 	exit(1); /* quit with rwops error (test failed) */
       
    39 }
       
    40 
       
    41 #define RWOP_ERR_QUIT(x)	rwops_error_quit( __LINE__, (x) )
       
    42 
       
    43 
       
    44 
       
    45 int main(int argc, char *argv[])
       
    46 {
       
    47 	SDL_RWops *rwops = NULL;
       
    48 	char test_buf[30];
       
    49 	
       
    50 	cleanup();
       
    51 
       
    52 /* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */
       
    53 	
       
    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);	
       
    64 	printf("test1 OK\n");
       
    65 
       
    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)
       
    69    
       
    70  */
       
    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);
       
    87 	printf("test2 OK\n");
       
    88 
       
    89 /* test 3 : creation, writing , reading, seeking, 
       
    90 	        test : w mode, r mode, w+ mode
       
    91  */
       
    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 */
       
    99 	rwops->close(rwops);
       
   100 
       
   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 */
       
   113 	rwops->close(rwops);
       
   114 
       
   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);
       
   132 	rwops->close(rwops);
       
   133 	printf("test3 OK\n");
       
   134 
       
   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);
       
   152 	rwops->close(rwops);
       
   153 	printf("test4 OK\n");
       
   154 
       
   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);					
       
   162 	
       
   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);					
       
   165 	
       
   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);		
       
   171 	
       
   172 	if (27!=rwops->seek(rwops,-27,RW_SEEK_CUR))			RWOP_ERR_QUIT(rwops);
       
   173 	
       
   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);
       
   178 	rwops->close(rwops);
       
   179 	printf("test5 OK\n");
       
   180 	cleanup();
       
   181 	return 0; /* all ok */
       
   182 }