Home | History | Annotate | Download | only in test
      1 
      2 #include <stdio.h>
      3 
      4 #include "SDL.h"
      5 
      6 static size_t widelen(char *data)
      7 {
      8 	size_t len = 0;
      9 	Uint32 *p = (Uint32 *)data;
     10 	while(*p++) {
     11 		++len;
     12 	}
     13 	return len;
     14 }
     15 
     16 int main(int argc, char *argv[])
     17 {
     18 	const char * formats[] = {
     19 		"UTF8",
     20 		"UTF-8",
     21 		"UTF16BE",
     22 		"UTF-16BE",
     23 		"UTF16LE",
     24 		"UTF-16LE",
     25 		"UTF32BE",
     26 		"UTF-32BE",
     27 		"UTF32LE",
     28 		"UTF-32LE",
     29 		"UCS4",
     30 		"UCS-4",
     31 	};
     32 	char buffer[BUFSIZ];
     33 	char *ucs4;
     34 	char *test[2];
     35 	int i, index = 0;
     36 	FILE *file;
     37 	int errors = 0;
     38 
     39 	if ( !argv[1] ) {
     40 		argv[1] = "utf8.txt";
     41 	}
     42 	file = fopen(argv[1], "rb");
     43 	if ( !file ) {
     44 		fprintf(stderr, "Unable to open %s\n", argv[1]);
     45 		return (1);
     46 	}
     47 
     48 	while ( fgets(buffer, sizeof(buffer), file) ) {
     49 		/* Convert to UCS-4 */
     50 		size_t len;
     51 		ucs4 = SDL_iconv_string("UCS-4", "UTF-8", buffer, SDL_strlen(buffer)+1);
     52 		len = (widelen(ucs4)+1)*4;
     53 		for ( i = 0; i < SDL_arraysize(formats); ++i ) {
     54 			test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len);
     55 			test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len);
     56 			if ( !test[1] || SDL_memcmp(test[1], ucs4, len) != 0 ) {
     57 				fprintf(stderr, "FAIL: %s\n", formats[i]);
     58 				++errors;
     59 			}
     60 			if ( test[0] ) {
     61 				SDL_free(test[0]);
     62 			}
     63 			if ( test[1] ) {
     64 				SDL_free(test[1]);
     65 			}
     66 		}
     67 		test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len);
     68 		SDL_free(ucs4);
     69 		fputs(test[0], stdout);
     70 		SDL_free(test[0]);
     71 	}
     72 	return (errors ? errors + 1 : 0);
     73 }
     74