Merge/shared string_printf and string_vprintf unit tests
authorPedro Alves <palves@redhat.com>
Mon, 30 Oct 2017 11:41:34 +0000 (11:41 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 30 Oct 2017 11:41:34 +0000 (11:41 +0000)
Merge the string_printf and string_vprintf tests, running them all
against both functions.

gdb/ChangeLog:
2017-10-30  Pedro Alves  <palves@redhat.com>

* unittests/common-utils-selftests.c (format_func): New typedef.
(string_printf_tests, string_vprintf_tests): Tests factored out
and merged to ...
(test_format_func): ... this new function.
(string_printf_tests, string_vprintf_tests): Reimplement on top of
test_format_func.

gdb/ChangeLog
gdb/unittests/common-utils-selftests.c

index 7417e14..20d78ba 100644 (file)
@@ -1,3 +1,12 @@
+2017-10-30  Pedro Alves  <palves@redhat.com>
+
+       * unittests/common-utils-selftests.c (format_func): New typedef.
+       (string_printf_tests, string_vprintf_tests): Tests factored out
+       and merged to ...
+       (test_format_func): ... this new function.
+       (string_printf_tests, string_vprintf_tests): Reimplement on top of
+       test_format_func.
+
 2017-10-29  Simon Marchi  <simon.marchi@ericsson.com>
 
        * darwin-nat.c: Remove include of gdb.h.
index c48904b..596406e 100644 (file)
 
 namespace selftests {
 
+/* Type of both 'string_printf' and the 'format' function below.  Used
+   to run the same tests against both string_printf and
+   string_vprintf.  */
+typedef std::string (format_func) (const char *fmt, ...)
+  ATTRIBUTE_PRINTF (1, 2);
+
 static void
-string_printf_tests ()
+test_format_func (format_func *func)
 {
-  SELF_CHECK (string_printf ("%s", "") == "");
-  SELF_CHECK (string_printf ("%d comes before 2", 1) == "1 comes before 2");
-  SELF_CHECK (string_printf ("hello %s", "world") == "hello world");
+  /* Basic smoke tests.  */
+  SELF_CHECK (func ("%s", "") == "");
+  SELF_CHECK (func ("%s", "test") == "test");
+  SELF_CHECK (func ("%d", 23) == "23");
+  SELF_CHECK (func ("%s %d %s", "test", 23, "done") == "test 23 done");
+  SELF_CHECK (func ("nothing") == "nothing");
+  SELF_CHECK (func ("%d comes before 2", 1) == "1 comes before 2");
+  SELF_CHECK (func ("hello %s", "world") == "hello world");
 
+  /* Check that we don't mishandle very large strings.  (An earlier
+     non-public implementation of string_printf mishandled this).  */
 #define X10 "0123456789"
 #define X100 X10 X10 X10 X10 X10 X10 X10 X10 X10 X10
 #define X1000 X100 X100 X100 X100 X100 X100 X100 X100 X100 X100
 #define X10000 X1000 X1000 X1000 X1000 X1000 X1000 X1000 X1000 X1000 X1000
 #define X100000 X10000 X10000 X10000 X10000 X10000 X10000 X10000 X10000 X10000 X10000
-  SELF_CHECK (string_printf ("%s", X10) == X10);
-  SELF_CHECK (string_printf ("%s", X100) == X100);
-  SELF_CHECK (string_printf ("%s", X1000) == X1000);
-  SELF_CHECK (string_printf ("%s", X10000) == X10000);
-  SELF_CHECK (string_printf ("%s", X100000) == X100000);
+  SELF_CHECK (func ("%s", X10) == X10);
+  SELF_CHECK (func ("%s", X100) == X100);
+  SELF_CHECK (func ("%s", X1000) == X1000);
+  SELF_CHECK (func ("%s", X10000) == X10000);
+  SELF_CHECK (func ("%s", X100000) == X100000);
+}
+
+static void
+string_printf_tests ()
+{
+  test_format_func (string_printf);
 }
 
 static std::string ATTRIBUTE_PRINTF (1, 2)
@@ -55,12 +74,7 @@ format (const char *fmt, ...)
 static void
 string_vprintf_tests ()
 {
-  /* Basic smoke tests.  */
-  SELF_CHECK (format ("%s", "test") == "test");
-  SELF_CHECK (format ("%d", 23) == "23");
-  SELF_CHECK (format ("%s %d %s", "test", 23, "done")
-             == "test 23 done");
-  SELF_CHECK (format ("nothing") == "nothing");
+  test_format_func (format);
 }
 
 } /* namespace selftests */