summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testsuites/libtests/Makefile.am1
-rw-r--r--testsuites/libtests/configure.ac1
-rw-r--r--testsuites/libtests/utf8proc01/Makefile.am19
-rw-r--r--testsuites/libtests/utf8proc01/init.c271
-rw-r--r--testsuites/libtests/utf8proc01/utf8proc01.doc23
-rw-r--r--testsuites/libtests/utf8proc01/utf8proc01.scn2
6 files changed, 317 insertions, 0 deletions
diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am
index c30e857aaa..d1ffabc980 100644
--- a/testsuites/libtests/Makefile.am
+++ b/testsuites/libtests/Makefile.am
@@ -3,6 +3,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
SUBDIRS = POSIX
SUBDIRS += exit02
SUBDIRS += exit01
+SUBDIRS += utf8proc01
SUBDIRS += md501
SUBDIRS += sparsedisk01
SUBDIRS += block16
diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac
index c2e1d9c0ea..741c6034df 100644
--- a/testsuites/libtests/configure.ac
+++ b/testsuites/libtests/configure.ac
@@ -45,6 +45,7 @@ AM_CONDITIONAL(HAS_POSIX,test x"${rtems_cv_RTEMS_POSIX_API}" = x"yes")
AC_CONFIG_FILES([Makefile
exit02/Makefile
exit01/Makefile
+utf8proc01/Makefile
md501/Makefile
sparsedisk01/Makefile
block16/Makefile
diff --git a/testsuites/libtests/utf8proc01/Makefile.am b/testsuites/libtests/utf8proc01/Makefile.am
new file mode 100644
index 0000000000..6884c072ff
--- /dev/null
+++ b/testsuites/libtests/utf8proc01/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = utf8proc01
+utf8proc01_SOURCES = init.c
+
+dist_rtems_tests_DATA = utf8proc01.scn utf8proc01.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(utf8proc01_OBJECTS)
+LINK_LIBS = $(utf8proc01_LDLIBS)
+
+utf8proc01$(EXEEXT): $(utf8proc01_OBJECTS) $(utf8proc01_DEPENDENCIES)
+ @rm -f utf8proc01$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/libtests/utf8proc01/init.c b/testsuites/libtests/utf8proc01/init.c
new file mode 100644
index 0000000000..e55a1d60b1
--- /dev/null
+++ b/testsuites/libtests/utf8proc01/init.c
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <string.h>
+#include <utf8proc/utf8proc.h>
+
+static void
+test_utf8proc_errmsg ( void )
+{
+ int error;
+ size_t string_length;
+ const char* err_msg;
+
+ for ( error = 0; error >= UTF8PROC_ERROR_INVALIDOPTS - 1; --error ) {
+ err_msg = utf8proc_errmsg ( error );
+ rtems_test_assert ( err_msg != NULL );
+
+ string_length = strlen (err_msg );
+ rtems_test_assert ( string_length > 0 );
+ }
+}
+
+static void
+test_utf8proc_version ( void )
+{
+ const char* version;
+ size_t string_length;
+
+ version = utf8proc_version ( );
+ rtems_test_assert ( version != NULL );
+
+ string_length = strlen ( version );
+ rtems_test_assert ( string_length > 0 );
+
+ rtems_test_assert (0 == strcmp ( version, "1.1.5" ) );
+}
+
+static void
+test_utf8proc_iterate ( void )
+{
+ char utf8_str_simple[] = "The quick brown.fox";
+ uint8_t *utf8_str_simple_ptr = (uint8_t*)(&utf8_str_simple[0]);
+ size_t length_simple_string = strlen ( utf8_str_simple );
+ int32_t unicode_char;
+ unsigned int index;
+ ssize_t bytes_read;
+
+ for (index = 0; index < length_simple_string; ++index) {
+ bytes_read = utf8proc_iterate (
+ &utf8_str_simple_ptr[index],
+ length_simple_string - index,
+ &unicode_char );
+ rtems_test_assert ( bytes_read == 1 );
+ rtems_test_assert ( (uint8_t)unicode_char == utf8_str_simple_ptr[index]);
+ }
+}
+
+static void
+test_utf8proc_encode_char ( void )
+{
+ uint8_t utf8_str[4];
+ int32_t unicode_char;
+ ssize_t bytes_written;
+
+ for ( unicode_char = 0; unicode_char < 128; ++unicode_char ) {
+ bytes_written = utf8proc_encode_char ( unicode_char, utf8_str );
+
+ rtems_test_assert ( bytes_written == 1 );
+ rtems_test_assert ( utf8_str[0] == (uint8_t)unicode_char );
+ }
+}
+
+static void
+test_utf8proc_get_property ( void )
+{
+ int32_t unicode_char;
+ const utf8proc_property_t* properties;
+
+ for ( unicode_char = 0x0000; unicode_char <= 0x10FFFF; ++unicode_char ) {
+ properties = utf8proc_get_property ( unicode_char );
+ rtems_test_assert ( NULL != properties );
+ }
+}
+
+static void
+test_utf8proc_decompose_char ( void )
+{
+ int32_t unicode_char;
+ int32_t unicode_char_decomposed[4];
+ ssize_t chars_written;
+
+ for ( unicode_char = 0x0000; unicode_char <= 0x10FFFF; ++unicode_char ) {
+ chars_written = utf8proc_decompose_char (
+ unicode_char,
+ unicode_char_decomposed,
+ sizeof ( unicode_char_decomposed ) / sizeof ( unicode_char_decomposed[0] ),
+ UTF8PROC_STABLE | UTF8PROC_DECOMPOSE,
+ 0);
+ if ( unicode_char < 0x80 ) {
+ rtems_test_assert ( chars_written == 1 );
+ rtems_test_assert ( unicode_char_decomposed[0] == unicode_char);
+ }
+ else
+ rtems_test_assert ( chars_written > 0 );
+ }
+}
+
+static void
+test_utf8proc_decompose ( void )
+{
+ char string_simple[] = "The quick brown.fox";
+ uint8_t *string_simple_utf8 = (uint8_t*)(&string_simple[0]);
+ int32_t string_decomposed[sizeof ( string_simple ) * 4];
+ ssize_t chars_written;
+ unsigned int index;
+
+ memset (&string_decomposed[0], 0, sizeof ( string_decomposed ) );
+
+ chars_written = utf8proc_decompose (
+ string_simple_utf8,
+ sizeof ( string_simple ),
+ &string_decomposed[0],
+ sizeof ( string_decomposed ),
+ UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE );
+ rtems_test_assert ( chars_written == strlen ( string_simple ) );
+ /* Our source string contains only very simple characters. Thus the above
+ * decomposition should result in exactly the same string
+ */
+ for ( index = 0; index < sizeof ( string_simple ); ++index ) {
+ rtems_test_assert ( string_simple_utf8[index] == (uint8_t)string_decomposed[index] );
+ }
+}
+
+static void
+test_utf8proc_reencode ( void )
+{
+ char string_simple[] = "The quick brown.fox";
+ uint8_t *string_simple_utf8 = (uint8_t*)(&string_simple[0]);
+ int32_t string_decomposed[sizeof ( string_simple ) * 4];
+ uint8_t *string_reencoded = (uint8_t*)(&string_decomposed[0]);
+ ssize_t chars_written;
+ unsigned int index;
+
+ memset (&string_decomposed[0], 0, sizeof ( string_decomposed ) );
+
+ chars_written = utf8proc_decompose (
+ string_simple_utf8,
+ sizeof ( string_simple ),
+ &string_decomposed[0],
+ sizeof ( string_decomposed ),
+ UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE );
+ rtems_test_assert ( chars_written == strlen ( string_simple ) );
+
+ chars_written = utf8proc_reencode (
+ &string_decomposed[0],
+ chars_written,
+ UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE );
+ rtems_test_assert ( chars_written == strlen ( string_simple ) );
+ /* Our source string contains only very simple characters. Thus the above
+ * decomposition should result in exactly the same string
+ */
+ for ( index = 0; index < sizeof ( string_simple ); ++index ) {
+ rtems_test_assert ( string_simple_utf8[index] == string_reencoded[index] );
+ }
+}
+
+static void
+test_utf8proc_map ( void )
+{
+ char string_simple[] = "The quick brown.fox";
+ uint8_t *string_simple_utf8 = (uint8_t*)(&string_simple[0]);
+ uint8_t *dest = NULL;
+ ssize_t chars_written;
+ unsigned int index;
+
+ chars_written = utf8proc_map(
+ string_simple_utf8,
+ sizeof ( string_simple ),
+ &dest,
+ UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_DECOMPOSE );
+ rtems_test_assert ( chars_written == strlen ( string_simple ) );
+ rtems_test_assert ( dest != NULL);
+
+ /* Our source string contains only very simple characters. Thus the above
+ * decomposition should result in exactly the same string
+ */
+ for ( index = 0; index < chars_written; ++index ) {
+ rtems_test_assert ( string_simple_utf8[index] == dest[index] );
+ }
+ free ( dest );
+}
+
+typedef uint8_t* (*normalization_method)(const uint8_t* str);
+
+static void
+test_utf8proc_normalize ( const normalization_method test_sample )
+{
+ char string_simple[] = "The quick brown.fox";
+ uint8_t *string_simple_utf8 = (uint8_t*)(&string_simple[0]);
+ uint8_t *dest = NULL;
+ unsigned int index;
+
+ dest = test_sample ( string_simple_utf8 );
+ rtems_test_assert ( dest != NULL);
+
+ /* Our source string contains only very simple characters. Thus the above
+ * decomposition should result in exactly the same string
+ */
+ for ( index = 0; index < sizeof ( string_simple ); ++index ) {
+ rtems_test_assert ( string_simple_utf8[index] == dest[index] );
+ }
+ free ( dest );
+}
+
+static void test ( void )
+{
+ test_utf8proc_errmsg ( );
+ test_utf8proc_version ( );
+ test_utf8proc_iterate ( );
+ test_utf8proc_encode_char ( );
+ test_utf8proc_get_property ( );
+ test_utf8proc_decompose_char ( );
+ test_utf8proc_decompose ( );
+ test_utf8proc_reencode ( );
+ test_utf8proc_map ( );
+ test_utf8proc_normalize ( utf8proc_NFD );
+ test_utf8proc_normalize ( utf8proc_NFC );
+ test_utf8proc_normalize ( utf8proc_NFKD );
+ test_utf8proc_normalize ( utf8proc_NFKC );
+}
+
+static void Init ( rtems_task_argument arg )
+{
+ puts ( "\n\n*** TEST utf8proc01 ***" );
+
+ test ( );
+
+ puts ( "*** END OF TEST utf8proc01 ***" );
+
+ rtems_test_exit ( 0 );
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/utf8proc01/utf8proc01.doc b/testsuites/libtests/utf8proc01/utf8proc01.doc
new file mode 100644
index 0000000000..f8b6990909
--- /dev/null
+++ b/testsuites/libtests/utf8proc01/utf8proc01.doc
@@ -0,0 +1,23 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: utf8proc01
+
+directives:
+- utf8proc_errmsg ( )
+- utf8proc_version ( )
+- utf8proc_iterate ( )
+- utf8proc_encode_char ( )
+- utf8proc_get_property ( )
+- utf8proc_decompose_char ( )
+- utf8proc_decompose ( )
+- utf8proc_reencode ( )
+- utf8proc_map ( )
+- utf8proc_NFD ( )
+- utf8proc_NFC ( )
+- utf8proc_NFKD ( )
+- utf8proc_NFKC ( )
+
+concepts:
+- Call interface methods of library utf8proc in order to make sure they compiled and linked ok.
+- The library is third party, thus it should be sufficient for us to make sure we can build it correctly.
+
diff --git a/testsuites/libtests/utf8proc01/utf8proc01.scn b/testsuites/libtests/utf8proc01/utf8proc01.scn
new file mode 100644
index 0000000000..62155a4f0c
--- /dev/null
+++ b/testsuites/libtests/utf8proc01/utf8proc01.scn
@@ -0,0 +1,2 @@
+*** TEST utf8proc01 ***
+*** END OF TEST utf8proc01 *** \ No newline at end of file