~ubuntu-branches/ubuntu/intrepid/parted/intrepid

« back to all changes in this revision

Viewing changes to gnulib/tests/uniconv/test-u32-strconv-from-enc.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2008-06-24 14:31:05 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080624143105-rd7yw67a9qnvh51i
Tags: 1.8.8.git.2008.03.24-7ubuntu1
* Resynchronise with Debian (LP: #237568). Remaining changes:
  - swap-uuid.dpatch: Create UUIDs on new swap partitions.
  - gptsync.dpatch: On Intel Mac systems, write a synced MBR rather than a
    protective MBR.
  - Add -fno-stack-protector on sparc.
  - sparc-new-label.dpatch: Fix sparc disk label generation. This is
    required for LDOM and parallel installations with Solaris 10.
  - loop-partitions.dpatch: Loop devices can only have one partition, so
    don't generate device names such as "/dev/loop0p1".
  - unpartitioned-disks.dpatch: Don't try to call BLKPG ioctls on
    unpartitionable disks (only implemented for loop devices at the
    moment), as they will always fail.
  - When building with gcc-4.3, add -Wno-array-bounds to CFLAGS.
  - Cell partition tables are misdetected as pc98, so disable pc98 support
    on powerpc.
  - array-bounds.dpatch: Backport patch from git to allow building with
    gcc-4.3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test of conversion to UTF-32 from legacy encodings.
 
2
   Copyright (C) 2007 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 2, or (at your option)
 
7
   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, write to the Free Software Foundation,
 
16
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
17
 
 
18
/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
19
 
 
20
#include <config.h>
 
21
 
 
22
#include "uniconv.h"
 
23
 
 
24
#include <stdio.h>
 
25
#include <stdlib.h>
 
26
 
 
27
#include "unistr.h"
 
28
 
 
29
#define SIZEOF(array) (sizeof (array) / sizeof (array[0]))
 
30
#define ASSERT(expr) \
 
31
  do                                                                         \
 
32
    {                                                                        \
 
33
      if (!(expr))                                                           \
 
34
        {                                                                    \
 
35
          fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
 
36
          abort ();                                                          \
 
37
        }                                                                    \
 
38
    }                                                                        \
 
39
  while (0)
 
40
 
 
41
int
 
42
main ()
 
43
{
 
44
  static enum iconv_ilseq_handler handlers[] =
 
45
    { iconveh_error, iconveh_question_mark, iconveh_escape_sequence };
 
46
  size_t h;
 
47
 
 
48
#if HAVE_ICONV
 
49
  /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1,
 
50
     ISO-8859-2, and UTF-8.  */
 
51
 
 
52
  /* Test conversion from ISO-8859-1 to UTF-16 with no errors.  */
 
53
  for (h = 0; h < SIZEOF (handlers); h++)
 
54
    {
 
55
      enum iconv_ilseq_handler handler = handlers[h];
 
56
      static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 
57
      static const uint32_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */
 
58
        {
 
59
          0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's',
 
60
          'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h',
 
61
          'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0
 
62
        };
 
63
      uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-1", handler);
 
64
      ASSERT (result != NULL);
 
65
      ASSERT (u32_strcmp (result, expected) == 0);
 
66
      free (result);
 
67
    }
 
68
 
 
69
  /* Test conversion from ISO-8859-2 to UTF-16 with no errors.  */
 
70
  for (h = 0; h < SIZEOF (handlers); h++)
 
71
    {
 
72
      enum iconv_ilseq_handler handler = handlers[h];
 
73
      static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */
 
74
      static const uint32_t expected[] =
 
75
        {
 
76
          'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w',
 
77
          's', 'k', 'i', 0
 
78
        };
 
79
      uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-2", handler);
 
80
      ASSERT (result != NULL);
 
81
      ASSERT (u32_strcmp (result, expected) == 0);
 
82
      free (result);
 
83
    }
 
84
 
 
85
  /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */
 
86
# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__)
 
87
  /* Test conversions from autodetect_jp to UTF-16.  */
 
88
  for (h = 0; h < SIZEOF (handlers); h++)
 
89
    {
 
90
      enum iconv_ilseq_handler handler = handlers[h];
 
91
      static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */
 
92
      static const uint32_t expected[] = /* こんにちは */
 
93
        {
 
94
          0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0
 
95
        };
 
96
      uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler);
 
97
      ASSERT (result != NULL);
 
98
      ASSERT (u32_strcmp (result, expected) == 0);
 
99
      free (result);
 
100
    }
 
101
  for (h = 0; h < SIZEOF (handlers); h++)
 
102
    {
 
103
      enum iconv_ilseq_handler handler = handlers[h];
 
104
      static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */
 
105
      static const uint32_t expected[] = /* こんにちは */
 
106
        {
 
107
          0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0
 
108
        };
 
109
      uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler);
 
110
      ASSERT (result != NULL);
 
111
      ASSERT (u32_strcmp (result, expected) == 0);
 
112
      free (result);
 
113
    }
 
114
  for (h = 0; h < SIZEOF (handlers); h++)
 
115
    {
 
116
      enum iconv_ilseq_handler handler = handlers[h];
 
117
      static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */
 
118
      static const uint32_t expected[] = /* こんにちは */
 
119
        {
 
120
          0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0
 
121
        };
 
122
      uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler);
 
123
      ASSERT (result != NULL);
 
124
      ASSERT (u32_strcmp (result, expected) == 0);
 
125
      free (result);
 
126
    }
 
127
# endif
 
128
 
 
129
#endif
 
130
 
 
131
  return 0;
 
132
}