add simple iconv_open test
authorSzabolcs Nagy <nsz@port70.net>
Thu, 30 Jan 2014 20:10:02 +0000 (21:10 +0100)
committerSzabolcs Nagy <nsz@port70.net>
Thu, 30 Jan 2014 20:10:02 +0000 (21:10 +0100)
src/functional/iconv_open.c [new file with mode: 0644]

diff --git a/src/functional/iconv_open.c b/src/functional/iconv_open.c
new file mode 100644 (file)
index 0000000..ade3ae6
--- /dev/null
@@ -0,0 +1,48 @@
+#include <string.h>
+#include <errno.h>
+#include <iconv.h>
+#include "test.h"
+
+int main(void)
+{
+       iconv_t cd;
+       char buf[100];
+       char *inbuf = "test";
+       char *outbuf = buf;
+       size_t inlen = strlen(inbuf);
+       size_t outlen;
+       size_t r;
+
+       cd = iconv_open("", "");
+       if (cd != (iconv_t)-1)
+               t_error("iconv_open(\"\",\"\") didn't fail\n");
+       if (errno != EINVAL)
+               t_error("iconv_open(\"\",\"\") did not fail with EINVAL, got %s\n", strerror(errno));
+
+       errno = 0;
+       cd = iconv_open("UTF-8", "UTF-8");
+       if (cd == (iconv_t)-1)
+               t_error("iconv_open(\"\",\"\") failed: %s\n", strerror(errno));
+
+       errno = 0;
+       outlen = 0;
+       r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
+       if (r != -1)
+               t_error("iconv() did not fail with 0 output length\n");
+       if (errno != E2BIG)
+               t_error("iconv() did not fail with E2BIG, got %s\n", strerror(errno));
+
+       errno = 0;
+       outlen = sizeof buf;
+       r = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
+       if (r)
+               t_error("iconv() did not return 0 when converting utf8 to utf8, got %d\n", r);
+       if (errno)
+               t_error("iconv() failed: %s\n", strerror(errno));
+
+       r = iconv_close(cd);
+       if (r == -1)
+               t_error("iconv_close failed: %s\n", strerror(errno));
+
+       return t_status;
+}