root/maint/gnulib/tests/uniconv/test-u32-strconv-to-enc.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /* Test of conversion from UTF-32 to legacy encodings.
   2    Copyright (C) 2007-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
  18 
  19 #include <config.h>
  20 
  21 #include "uniconv.h"
  22 
  23 #include <errno.h>
  24 #include <stdlib.h>
  25 #include <string.h>
  26 #include "macros.h"
  27 
  28 int
  29 main ()
     /* [previous][next][first][last][top][bottom][index][help] */
  30 {
  31 #if HAVE_ICONV
  32   static enum iconv_ilseq_handler handlers[] =
  33     { iconveh_error, iconveh_question_mark, iconveh_escape_sequence };
  34   size_t h;
  35 
  36   /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1,
  37      ISO-8859-2, and UTF-8.  */
  38 
  39   /* Test conversion from UTF-32 to ISO-8859-1 with no errors.  */
  40   for (h = 0; h < SIZEOF (handlers); h++)
  41     {
  42       enum iconv_ilseq_handler handler = handlers[h];
  43       static const uint32_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */
  44         {
  45           0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's',
  46           'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h',
  47           'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0
  48         };
  49       static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
  50       char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler);
  51       ASSERT (result != NULL);
  52       ASSERT (strcmp (result, expected) == 0);
  53       free (result);
  54     }
  55 
  56   /* Test conversion from UTF-32 to ISO-8859-1 with EILSEQ.  */
  57   for (h = 0; h < SIZEOF (handlers); h++)
  58     {
  59       enum iconv_ilseq_handler handler = handlers[h];
  60       static const uint32_t input[] = /* Rafał Maszkowski */
  61         {
  62           'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w',
  63           's', 'k', 'i', 0
  64         };
  65       char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler);
  66       switch (handler)
  67         {
  68         case iconveh_error:
  69           ASSERT (result == NULL && errno == EILSEQ);
  70           break;
  71         case iconveh_question_mark:
  72           {
  73             static const char expected[] = "Rafa? Maszkowski";
  74             static const char expected_translit[] = "Rafal Maszkowski";
  75             ASSERT (result != NULL);
  76             ASSERT (strcmp (result, expected) == 0
  77                     || strcmp (result, expected_translit) == 0);
  78             free (result);
  79           }
  80           break;
  81         case iconveh_escape_sequence:
  82           {
  83             static const char expected[] = "Rafa\\u0142 Maszkowski";
  84             ASSERT (result != NULL);
  85             ASSERT (strcmp (result, expected) == 0);
  86             free (result);
  87           }
  88           break;
  89         }
  90     }
  91 
  92 #endif
  93 
  94   return 0;
  95 }

/* [previous][next][first][last][top][bottom][index][help] */