Home | History | Annotate | Download | only in test
      1 /*
      2   Copyright (C) 1997-2014 Sam Lantinga <slouken (at) libsdl.org>
      3 
      4   This software is provided 'as-is', without any express or implied
      5   warranty.  In no event will the authors be held liable for any damages
      6   arising from the use of this software.
      7 
      8   Permission is granted to anyone to use this software for any purpose,
      9   including commercial applications, and to alter it and redistribute it
     10   freely.
     11 */
     12 
     13 #include <stdio.h>
     14 
     15 #include "SDL.h"
     16 
     17 static size_t
     18 widelen(char *data)
     19 {
     20     size_t len = 0;
     21     Uint32 *p = (Uint32 *) data;
     22     while (*p++) {
     23         ++len;
     24     }
     25     return len;
     26 }
     27 
     28 int
     29 main(int argc, char *argv[])
     30 {
     31     const char *formats[] = {
     32         "UTF8",
     33         "UTF-8",
     34         "UTF16BE",
     35         "UTF-16BE",
     36         "UTF16LE",
     37         "UTF-16LE",
     38         "UTF32BE",
     39         "UTF-32BE",
     40         "UTF32LE",
     41         "UTF-32LE",
     42         "UCS4",
     43         "UCS-4",
     44     };
     45     char buffer[BUFSIZ];
     46     char *ucs4;
     47     char *test[2];
     48     int i;
     49     FILE *file;
     50     int errors = 0;
     51 
     52     /* Enable standard application logging */
     53     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
     54 
     55     if (!argv[1]) {
     56         argv[1] = "utf8.txt";
     57     }
     58     file = fopen(argv[1], "rb");
     59     if (!file) {
     60         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to open %s\n", argv[1]);
     61         return (1);
     62     }
     63 
     64     while (fgets(buffer, sizeof(buffer), file)) {
     65         /* Convert to UCS-4 */
     66         size_t len;
     67         ucs4 =
     68             SDL_iconv_string("UCS-4", "UTF-8", buffer,
     69                              SDL_strlen(buffer) + 1);
     70         len = (widelen(ucs4) + 1) * 4;
     71         for (i = 0; i < SDL_arraysize(formats); ++i) {
     72             test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len);
     73             test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len);
     74             if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) {
     75                 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s\n", formats[i]);
     76                 ++errors;
     77             }
     78             SDL_free(test[0]);
     79             SDL_free(test[1]);
     80         }
     81         test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len);
     82         SDL_free(ucs4);
     83         fputs(test[0], stdout);
     84         SDL_free(test[0]);
     85     }
     86     fclose(file);
     87     return (errors ? errors + 1 : 0);
     88 }
     89