From 4a25033455f1e4e0325fdd249e30a79efc856689 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 30 Oct 2017 11:41:34 +0000 Subject: [PATCH] Merge/shared string_printf and string_vprintf unit tests Merge the string_printf and string_vprintf tests, running them all against both functions. gdb/ChangeLog: 2017-10-30 Pedro Alves * 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 | 9 ++++++ gdb/unittests/common-utils-selftests.c | 44 +++++++++++++++++--------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7417e14478a..20d78baa83c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2017-10-30 Pedro Alves + + * 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 * darwin-nat.c: Remove include of gdb.h. diff --git a/gdb/unittests/common-utils-selftests.c b/gdb/unittests/common-utils-selftests.c index c48904ba0fc..596406e84ea 100644 --- a/gdb/unittests/common-utils-selftests.c +++ b/gdb/unittests/common-utils-selftests.c @@ -22,23 +22,42 @@ 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 */ -- 2.30.2