blob: 0befe0b09e2c6f656875819276412da9ffc5aa65 [file] [log] [blame]
/* Example of multiple locations, with labelling of ranges.
Intended output is similar to:
PATH/test-labelled-ranges.c:9:6: error: mismatching types: 'int' and 'const char *'
19 | 42 + "foo"
| ~~ ^ ~~~~~
| | |
| int const char *
along with the equivalent in SARIF. */
#include "libgdiagnostics.h"
#include "test-helpers.h"
/*
_________11111111112
12345678901234567890
42 + "foo"
*/
const int line_num = __LINE__ - 2;
int
main ()
{
begin_test ("test-labelled-ranges.c.exe",
"test-labelled-ranges.c.sarif",
__FILE__, "c");
const diagnostic_physical_location *loc_operator
= diagnostic_manager_new_location_from_file_line_column (diag_mgr,
main_file,
line_num,
6);
/* begin quoted source */
diagnostic *d = diagnostic_begin (diag_mgr,
DIAGNOSTIC_LEVEL_ERROR);
diagnostic_set_location (d, loc_operator);
diagnostic_add_location_with_label (d,
make_range (diag_mgr,
main_file,
line_num, 3, 4),
"int");
diagnostic_add_location_with_label (d,
make_range (diag_mgr,
main_file,
line_num, 8, 12),
"const char *");
diagnostic_finish (d, "mismatching types: %qs and %qs", "int", "const char *");
/* end quoted source */
return end_test ();
}
/* Check the output from the text sink. */
/* { dg-regexp "\[^\n\r\]+test-labelled-ranges.c:19:6: error: mismatching types: 'int' and 'const char \\*'" } */
/* { dg-begin-multiline-output "" }
19 | 42 + "foo"
| ~~ ^ ~~~~~
| | |
| int const char *
{ dg-end-multiline-output "" } */
/* Verify that some JSON was written to a file with the expected name:
{ dg-final { verify-sarif-file } } */
/* Use a Python script to verify various properties about the generated
.sarif file:
{ dg-final { run-sarif-pytest test-labelled-ranges.c "test-labelled-ranges.py" } } */