1 /* unicode.c libgsasl self tests for unicode related functions
2 * Copyright (C) 2002 Simon Josefsson
4 * This file is part of libgsasl.
6 * Libgsasl is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Libgsasl is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with libgsasl; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 static int error_count
= 0;
35 static int break_on_error
= 0;
38 fail ( const char *format
, ... )
42 va_start( arg_ptr
, format
) ;
43 vfprintf (stderr
, format
, arg_ptr
);
51 escapeprint (char *str
,
57 for (i
= 0; i
< len
; i
++)
58 if ((str
[i
] >= 'A' && str
[i
] <= 'Z') ||
59 (str
[i
] >= 'a' && str
[i
] <= 'z') ||
60 (str
[i
] >= '0' && str
[i
] <= '9') ||
64 printf("\\x%02x", str
[i
]);
65 printf("' (length %d bytes)\n", len
);
75 for (i
= 0; i
< len
; i
++)
77 printf("%02x ", str
[i
]);
78 if ((i
+1)%8 == 0) printf(" ");
79 if ((i
+1)%16 == 0 && i
+1 < len
) printf("\n\t ;; ");
90 for (i
= 0; i
< len
; i
++)
92 printf("%d%d%d%d%d%d%d%d ",
93 str
[i
] & 0x80 ? 1 : 0,
94 str
[i
] & 0x40 ? 1 : 0,
95 str
[i
] & 0x20 ? 1 : 0,
96 str
[i
] & 0x10 ? 1 : 0,
97 str
[i
] & 0x08 ? 1 : 0,
98 str
[i
] & 0x04 ? 1 : 0,
99 str
[i
] & 0x02 ? 1 : 0,
100 str
[i
] & 0x01 ? 1 : 0);
101 if ((i
+1)%3 == 0) printf(" ");
102 if ((i
+1)%6 == 0 && i
+1 < len
) printf("\n\t ;; ");
110 { "\xC2\xB5", "\xCE\xBC" },
111 { "\xC2\xAA", "\x61" }
115 main (int argc
, char *argv
[])
121 if (strcmp (argv
[argc
-1], "-v") == 0 ||
122 strcmp (argv
[argc
-1], "--verbose") == 0)
124 else if (strcmp (argv
[argc
-1], "-b") == 0 ||
125 strcmp (argv
[argc
-1], "--break-on-error") == 0)
127 else if (strcmp (argv
[argc
-1], "-h") == 0 ||
128 strcmp (argv
[argc
-1], "-?") == 0 ||
129 strcmp (argv
[argc
-1], "--help") == 0)
131 printf("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n",
137 for (i
= 0; i
< sizeof(nfkc
) / sizeof(nfkc
[0]); i
++)
140 printf("NFKC entry %d\n", i
);
142 out
= gsasl_utf8_nfkc_normalize (nfkc
[i
].in
, strlen(nfkc
[i
].in
));
145 fail("gsasl_utf8_nfkc_normalize() entry %d failed fatally\n", i
);
152 escapeprint(nfkc
[i
].in
, strlen(nfkc
[i
].in
));
153 hexprint(nfkc
[i
].in
, strlen(nfkc
[i
].in
)); puts("");
154 binprint(nfkc
[i
].in
, strlen(nfkc
[i
].in
)); puts("");
157 escapeprint(out
, strlen(out
));
158 hexprint(out
, strlen(out
)); puts("");
159 binprint(out
, strlen(out
)); puts("");
161 printf("expected out:\n");
162 escapeprint(nfkc
[i
].out
, strlen(nfkc
[i
].out
));
163 hexprint(nfkc
[i
].out
, strlen(nfkc
[i
].out
)); puts("");
164 binprint(nfkc
[i
].out
, strlen(nfkc
[i
].out
)); puts("");
167 if (strlen(nfkc
[i
].out
) != strlen(out
) ||
168 memcmp (nfkc
[i
].out
, out
, strlen(out
)) != 0)
170 fail("gsasl_utf8_nfkc_normalize() entry %d failed\n", i
);
179 printf("Libgsasl unicode self tests done with %d errors\n", error_count
);
181 return error_count
? 1 : 0;