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 ca51e71..43df16a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 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. * diagnostic-show-locus.c: Include "selftest-diagnostic.h". (class selftest::test_diagnostic_context): Move to... diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 9db4b46..813bca6 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.7.4