[rtems commit] libtests: Add new test: utf8proc01

Sebastian Huber sebh at rtems.org
Mon Jun 3 15:23:54 UTC 2013


Module:    rtems
Branch:    master
Commit:    2ee8b15863a6718042252640ef8434787749553f
Changeset: http://git.rtems.org/rtems/commit/?id=2ee8b15863a6718042252640ef8434787749553f

Author:    Ralf Kirchner <ralf.kirchner at embedded-brains.de>
Date:      Tue Feb 26 13:25:46 2013 +0100

libtests: Add new test: utf8proc01

utf8proc is a library for processing UTF-8 encoded Unicode strings.
Some features are Unicode normalization, stripping of default ignorable characters, case folding and detection of grapheme cluster boundaries.
For now utf8proc is intended for normalizing and folding strings for comparison purposes within the UTF-8 support of the FAT file system.
This test will 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.

---

 testsuites/libtests/Makefile.am               |    1 +
 testsuites/libtests/configure.ac              |    1 +
 testsuites/libtests/utf8proc01/Makefile.am    |   19 ++
 testsuites/libtests/utf8proc01/init.c         |  271 +++++++++++++++++++++++++
 testsuites/libtests/utf8proc01/utf8proc01.doc |   23 ++
 testsuites/libtests/utf8proc01/utf8proc01.scn |    2 +
 6 files changed, 317 insertions(+), 0 deletions(-)

diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am
index c30e857..d1ffabc 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 c2e1d9c..741c603 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 0000000..6884c07
--- /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 at .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 0000000..e55a1d6
--- /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 at 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 0000000..f8b6990
--- /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 0000000..62155a4
--- /dev/null
+++ b/testsuites/libtests/utf8proc01/utf8proc01.scn
@@ -0,0 +1,2 @@
+*** TEST utf8proc01 ***
+*** END OF TEST utf8proc01 ***
\ No newline at end of file




More information about the vc mailing list