Add tests for g_utf8_strlen().
authorMatthias Clasen <mclasen@redhat.com>
Fri, 24 Feb 2006 13:56:58 +0000 (13:56 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 24 Feb 2006 13:56:58 +0000 (13:56 +0000)
2006-02-24  Matthias Clasen  <mclasen@redhat.com>

        * tests/utf8-pointer.c: Add tests for g_utf8_strlen().

        * glib/gutf8.c: Fix boundary cases in g_utf8_strlen().
        (#332435)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
glib/gutf8.c
tests/utf8-pointer.c

index 5a3dc7d47347f6d926cd39c9635a7a5727c73da5..dfa4a23dc9a75b7650a58257f876903a60c0e5ec 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+       * tests/utf8-pointer.c: Add tests for g_utf8_strlen().
+
+       * glib/gutf8.c: Fix boundary cases in g_utf8_strlen().
+       (#332435)
+
 2006-02-23  Kjartan Maraas  <kmaraas@gnome.org>
 
        * tests/completion-test.c: (main): Plug leaks reported by
index 5a3dc7d47347f6d926cd39c9635a7a5727c73da5..dfa4a23dc9a75b7650a58257f876903a60c0e5ec 100644 (file)
@@ -1,3 +1,10 @@
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+       * tests/utf8-pointer.c: Add tests for g_utf8_strlen().
+
+       * glib/gutf8.c: Fix boundary cases in g_utf8_strlen().
+       (#332435)
+
 2006-02-23  Kjartan Maraas  <kmaraas@gnome.org>
 
        * tests/completion-test.c: (main): Plug leaks reported by
index 5a3dc7d47347f6d926cd39c9635a7a5727c73da5..dfa4a23dc9a75b7650a58257f876903a60c0e5ec 100644 (file)
@@ -1,3 +1,10 @@
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+       * tests/utf8-pointer.c: Add tests for g_utf8_strlen().
+
+       * glib/gutf8.c: Fix boundary cases in g_utf8_strlen().
+       (#332435)
+
 2006-02-23  Kjartan Maraas  <kmaraas@gnome.org>
 
        * tests/completion-test.c: (main): Plug leaks reported by
index 23f2a424d75c1f7e34196e3afdee49d70c556f5d..69105e235ad783b6f8767435ae99dd799ffe7b63 100644 (file)
@@ -242,7 +242,7 @@ g_utf8_strlen (const gchar *p,
       /* only do the last len increment if we got a complete
        * char (don't count partial chars)
        */
-      if (p - start == max)
+      if (p - start <= max)
         ++len;
     }
 
index 3072851a769970185b9b717b78769d4712593b78..00b03d14b48b77e16cad6ccc6d79ab86064305af 100644 (file)
@@ -64,9 +64,35 @@ gchar *longline = "asdasdas dsaf asfd as fdasdf asfd asdf as dfas dfasdf a"
 "asd fasdf asdf asdf asd fasfd as fdasfd asdf as fdas ffsd asfd as fdASASASAs D"
 "Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfg sdfg sdf gsdfg sdfg sd\n\nlalala\n";
 
+static void
+test_length (void)
+{
+  g_assert (g_utf8_strlen ("1234", -1) == 4);
+  g_assert (g_utf8_strlen ("1234", 0) == 0);
+  g_assert (g_utf8_strlen ("1234", 1) == 1);
+  g_assert (g_utf8_strlen ("1234", 2) == 2);
+  g_assert (g_utf8_strlen ("1234", 3) == 3);
+  g_assert (g_utf8_strlen ("1234", 4) == 4);
+  g_assert (g_utf8_strlen ("1234", 5) == 4);
+
+  g_assert (g_utf8_strlen (longline, -1) == 762);
+  g_assert (g_utf8_strlen (longline, strlen (longline)) == 762);
+  g_assert (g_utf8_strlen (longline, 1024) == 762);
+
+  g_assert (g_utf8_strlen (NULL, 0) == 0);
+
+  g_assert (g_utf8_strlen ("a\340\250\201c", -1) == 3);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 1) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 2) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 3) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 4) == 2);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 5) == 3);
+}
+
 int main (int argc, char *argv[])
 {
   test_utf8 (longline);
-  
+  test_length ();
+
   return 0;
 }