From ace725989eef16efea050619597f5c7f71667e1d Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 2 Nov 2017 20:13:18 +0000 Subject: [PATCH] Add selftest for diagnostic_get_location_text gcc/ChangeLog: * diagnostic.c: Include "selftest-diagnostic.h". (selftest::assert_location_text): New function. (selftest::test_diagnostic_get_location_text): New function. (selftest::diagnostic_c_tests): Call it. From-SVN: r254355 --- gcc/ChangeLog | 7 +++++++ gcc/diagnostic.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ca51e711fc0..43df16a8933 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-11-02 David Malcolm + + * diagnostic.c: Include "selftest-diagnostic.h". + (selftest::assert_location_text): New function. + (selftest::test_diagnostic_get_location_text): New function. + (selftest::diagnostic_c_tests): Call it. + 2017-11-02 David Malcolm * Makefile.in (OBJS-libcommon): Add selftest-diagnostic.o. diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 9db4b46532d..813bca6f65d 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic-color.h" #include "edit-context.h" #include "selftest.h" +#include "selftest-diagnostic.h" #ifdef HAVE_TERMIOS_H # include @@ -1627,6 +1628,45 @@ test_print_parseable_fixits_replace () pp_formatted_text (&pp)); } +/* Verify that + diagnostic_get_location_text (..., SHOW_COLUMN) + generates EXPECTED_LOC_TEXT, given FILENAME, LINE, COLUMN, with + colorization disabled. */ + +static void +assert_location_text (const char *expected_loc_text, + const char *filename, int line, int column, + bool show_column) +{ + test_diagnostic_context dc; + dc.show_column = show_column; + + expanded_location xloc; + xloc.file = filename; + xloc.line = line; + xloc.column = column; + xloc.data = NULL; + xloc.sysp = false; + + char *actual_loc_text = diagnostic_get_location_text (&dc, xloc); + ASSERT_STREQ (expected_loc_text, actual_loc_text); + free (actual_loc_text); +} + +/* Verify that diagnostic_get_location_text works as expected. */ + +static void +test_diagnostic_get_location_text () +{ + const char *old_progname = progname; + progname = "PROGNAME"; + assert_location_text ("PROGNAME:", NULL, 0, 0, true); + assert_location_text (":", "", 42, 10, true); + assert_location_text ("foo.c:42:10:", "foo.c", 42, 10, true); + assert_location_text ("foo.c:42:", "foo.c", 42, 10, false); + progname = old_progname; +} + /* Run all of the selftests within this file. */ void @@ -1637,6 +1677,7 @@ diagnostic_c_tests () test_print_parseable_fixits_insert (); test_print_parseable_fixits_remove (); test_print_parseable_fixits_replace (); + test_diagnostic_get_location_text (); } } // namespace selftest -- 2.30.2