* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: tsticonv.c,v 1.32 2007-10-15 20:45:05 adam Exp $
+ * $Id: tsticonv.c,v 1.35 2008-03-12 08:53:28 adam Exp $
*/
#if HAVE_CONFIG_H
#include <yaz/yaz-util.h>
#include <yaz/test.h>
+#define ESC "\x1b"
+
static int compare_buffers(char *msg, int no,
int expect_len, const char *expect_buf,
int got_len, const char *got_buf)
outbuf - outbuf0, outbuf0);
}
-static int tst_convert(yaz_iconv_t cd, const char *buf, const char *cmpbuf)
+static int tst_convert_x(yaz_iconv_t cd, const char *buf, const char *cmpbuf,
+ int expect_error)
{
- int ret = 0;
+ int ret = 1;
WRBUF b = wrbuf_alloc();
char outbuf[12];
size_t inbytesleft = strlen(buf);
{
int e = yaz_iconv_error(cd);
if (e != YAZ_ICONV_E2BIG)
+ {
+ if (expect_error != -1)
+ if (e != expect_error)
+ ret = 0;
break;
+ }
}
else
{
char *outp = outbuf;
r = yaz_iconv(cd, 0, 0, &outp, &outbytesleft);
wrbuf_write(b, outbuf, outp - outbuf);
+ if (expect_error != -1)
+ if (expect_error)
+ ret = 0;
break;
}
}
if (wrbuf_len(b) == strlen(cmpbuf)
&& !memcmp(cmpbuf, wrbuf_buf(b), wrbuf_len(b)))
- ret = 1;
+ ;
else
{
WRBUF w = wrbuf_alloc();
+ ret = 0;
wrbuf_rewind(w);
- wrbuf_verbose_str(w, buf, strlen(buf));
+ wrbuf_puts_escaped(w, buf);
yaz_log(YLOG_LOG, "input %s", wrbuf_cstr(w));
wrbuf_rewind(w);
- wrbuf_verbose_str(w, wrbuf_buf(b), wrbuf_len(b));
+ wrbuf_write_escaped(w, wrbuf_buf(b), wrbuf_len(b));
yaz_log(YLOG_LOG, "got %s", wrbuf_cstr(w));
wrbuf_rewind(w);
- wrbuf_verbose_str(w, cmpbuf, strlen(cmpbuf));
+ wrbuf_puts_escaped(w, cmpbuf);
yaz_log(YLOG_LOG, "exp %s", wrbuf_cstr(w));
wrbuf_destroy(w);
return ret;
}
+static int tst_convert(yaz_iconv_t cd, const char *buf, const char *cmpbuf)
+{
+ return tst_convert_x(cd, buf, cmpbuf, 0);
+}
/* some test strings in ISO-8859-1 format */
static const char *iso_8859_1_a[] = {
YAZ_CHECK(tst_convert(cd, "Cours de mathâe",
"Cours de mathe\xcc\x81"));
+ YAZ_CHECK(tst_convert(cd, "\xea" "a", "a\xcc\x8a"));
+ YAZ_CHECK(tst_convert(cd, "a" "\xea" "\x1e", "a" "\x1e\xcc\x8a"));
+ YAZ_CHECK(tst_convert(cd, "a" "\xea" "p", "a" "p\xcc\x8a"));
- YAZ_CHECK(tst_convert(cd, "a\xea\x1e", "a\x1e\xcc\x8a"));
+ YAZ_CHECK(tst_convert_x(cd, "a\xea", "a", YAZ_ICONV_EINVAL));
+ YAZ_CHECK(tst_convert(cd, "p", "\xcc\x8a")); /* note: missing p */
+ yaz_iconv(cd, 0, 0, 0, 0); /* incomplete. so we have to reset */
+
+ /* bug #2115 */
+ YAZ_CHECK(tst_convert(cd, ESC "(N" ESC ")Qp" ESC "(B", "\xd0\x9f"));
+
+ YAZ_CHECK(tst_convert_x(cd, ESC , "", YAZ_ICONV_EINVAL));
+ YAZ_CHECK(tst_convert_x(cd, ESC "(", "", YAZ_ICONV_EINVAL));
+ YAZ_CHECK(tst_convert_x(cd, ESC "(B", "", 0));
- YAZ_CHECK(tst_convert(cd, "a\xea", "a"));
yaz_iconv_close(cd);
}
"\x1B\x28\x42" "\xE5\xE5" "\x1B\x24\x31"
"\x69\x25\x3F"
"\x69\x21\x3C" "\x1B\x28\x42"));
+
+
+ /** bug #2120 */
+ YAZ_CHECK(tst_convert(cd,
+ "\xCE\x94\xCE\xB5\xCF\x84"
+ "\xCE\xBF\xCF\x81\xCE\xB1"
+ "\xCE\xBA\xCE\xB7\xCF\x82\x2C",
+
+ "\x1B\x28\x53\x45\x66\x78\x72\x75"
+ "\x61\x6D\x6A\x77"
+ "\x1B\x28\x42\x2C"
+ ));
{
char *inbuf0 = "\xe2\x81\xb0";