Commit 0204694e authored by Bruno Haible's avatar Bruno Haible

Tests for module 'mbschr'.

parent 35553ad8
# locale-zh.m4 serial 1
dnl Copyright (C) 2003, 2005-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Determine the name of a chinese locale with GB18030 encoding.
AC_DEFUN([gt_LOCALE_ZH_CN],
[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AM_LANGINFO_CODESET])
AC_CACHE_CHECK([for a transitional chinese locale], gt_cv_locale_zh_CN, [
macosx=
case "$host_os" in
darwin[56]*) ;;
darwin*) macosx=yes;;
esac
if test -n "$macosx"; then
# On Darwin 7 (MacOS X), the libc supports some locales in non-UTF-8
# encodings, but the kernel does not support them. The documentation
# says:
# "... all code that calls BSD system routines should ensure
# that the const *char parameters of these routines are in UTF-8
# encoding. All BSD system functions expect their string
# parameters to be in UTF-8 encoding and nothing else."
# See the comments in config.charset. Therefore we bypass the test.
gt_cv_locale_zh_CN=none
else
AC_LANG_CONFTEST([AC_LANG_SOURCE([
changequote(,)dnl
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#if HAVE_LANGINFO_CODESET
# include <langinfo.h>
#endif
struct tm t;
char buf[16];
int main ()
{
const char *p;
/* Check whether the given locale name is recognized by the system. */
if (setlocale (LC_ALL, "") == NULL) return 1;
/* Check whether nl_langinfo(CODESET) is nonempty.
On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
is empty, and the behaviour of Tcl 8.4 in this locale is not useful. */
#if HAVE_LANGINFO_CODESET
if (nl_langinfo (CODESET) [0] == '\0') return 1;
#endif
/* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
This excludes the UTF-8 encoding. */
t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
for (p = buf; *p != '\0'; p++)
if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
return 1;
/* Check whether a typical GB18030 multibyte sequence is recognized as a
single wide character. This excludes the GB2312 and GBK encodings. */
if (mblen ("\203\062\332\066", 5) != 4)
return 1;
return 0;
}
changequote([,])dnl
])])
if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
# Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
# otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
# configure script would override the LC_ALL setting. Likewise for
# LC_CTYPE, which is also set at the beginning of the configure script.
# Test for the locale name without encoding suffix.
if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_zh_CN=zh_CN
else
# Test for the locale name with explicit encoding suffix.
if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_zh_CN=zh_CN.GB18030
else
# None found.
gt_cv_locale_zh_CN=none
fi
fi
else
# If there was a link error, due to mblen(), the system is so old that
# it certainly doesn't have a chinese locale.
gt_cv_locale_zh_CN=none
fi
rm -fr conftest*
fi
])
LOCALE_ZH_CN=$gt_cv_locale_zh_CN
AC_SUBST([LOCALE_ZH_CN])
])
Files:
tests/test-mbschr.sh
tests/test-mbschr.c
m4/locale-zh.m4
m4/codeset.m4
Depends-on:
configure.ac:
gt_LOCALE_ZH_CN
Makefile.am:
TESTS += test-mbschr.sh
TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_ZH_CN='@LOCALE_ZH_CN@'
EXTRA_DIST += test-mbschr.sh
check_PROGRAMS += test-mbschr
/* Test of searching a string for a character.
Copyright (C) 2007 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <string.h>
#include <locale.h>
#include <stdlib.h>
#define ASSERT(expr) if (!(expr)) abort ();
int
main ()
{
/* configure should already have checked that the locale is supported. */
if (setlocale (LC_ALL, "") == NULL)
return 1;
/* Tests with a character < 0x30. */
{
const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */
const char *result = mbschr (input, ' ');
ASSERT (result == input + 4);
}
{
const char input[] = "\312\276\300\375"; /* "示例" */
const char *result = mbschr (input, ' ');
ASSERT (result == NULL);
}
/* Tests with a character >= 0x30. */
{
const char input[] = "\272\305123\324\313\320\320\241\243"; /* "号123运行。" */
const char *result = mbschr (input, '2');
ASSERT (result == input + 3);
}
/* This test shows how mbschr() is different from strchr(). */
{
const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123运行。" */
const char *result = mbschr (input, '2');
ASSERT (result == input + 5);
}
{
const char input[] = "\312\300\275\347\304\343\272\303\243\241"; /* "世界你好!" */
const char *result = mbschr (input, '!');
ASSERT (result == NULL);
}
return 0;
}
#!/bin/sh
# Test whether a specific GB18030 locale is installed.
: ${LOCALE_ZH_CN=zh_CN.GB18030}
if test $LOCALE_ZH_CN = none; then
if test -f /usr/bin/localedef; then
echo "Skipping test: no chinese GB18030 locale is installed"
else
echo "Skipping test: no chinese GB18030 locale is supported"
fi
exit 77
fi
LC_ALL=$LOCALE_ZH_CN \
./test-mbschr${EXEEXT}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment