diff --git a/internal/integrationtest/compile_3/compile_test.go b/internal/integrationtest/compile_3/compile_test.go index 2f9ba8e5306..3bb23369266 100644 --- a/internal/integrationtest/compile_3/compile_test.go +++ b/internal/integrationtest/compile_3/compile_test.go @@ -117,7 +117,7 @@ func TestCompilerErrOutput(t *testing.T) { require.Error(t, err) outJson := requirejson.Parse(t, out) outJson.Query(`.compiler_err`).MustContain(`"error"`) - outJson.Query(`.diagnostics`).MustContain(` + outJson.Query(`.builder_result.diagnostics`).MustContain(` [ { "severity": "ERROR", @@ -128,6 +128,54 @@ func TestCompilerErrOutput(t *testing.T) { ]`) } + // Test the preprocessor errors are present in the diagnostics + { + // prepare sketch + sketch, err := paths.New("testdata", "blink_with_wrong_include").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--format", "json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "ERROR", + "line": 1, + "column": 2, + "message": "invalid preprocessing directive #wrong\n #wrong\n ^~~~~", + } + ]`) + } + + // Test the preprocessor errors are present in the diagnostics. + // In case we have 2 libraries: + // 1. one is missing + // 2. the other one is missing only from the first GCC run + // The diagnostics should report only 1 missing library. + { + // prepare sketch + sketch, err := paths.New("testdata", "using_Wire_with_missing_lib").Abs() + require.NoError(t, err) + + // Run compile and catch err stream + out, _, err := cli.Run("compile", "-b", "arduino:avr:uno", "-v", "--format", "json", sketch.String()) + require.Error(t, err) + outJson := requirejson.Parse(t, out) + outJson.Query(`.success`).MustContain(`false`) + outJson.Query(`.builder_result.diagnostics`).MustContain(` + [ + { + "severity": "FATAL", + "line": 2, + "column": 10, + "message": "MissingWire.h: No such file or directory\n #include \u003cMissingWire.h\u003e\n ^~~~~~~~~~~~~~~", + } + ]`) + } + // Check that library discover do not generate false errors // https://github.com/arduino/arduino-cli/issues/2263 { diff --git a/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino new file mode 100644 index 00000000000..35887d391c9 --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/blink_with_wrong_include/blink_with_wrong_include.ino @@ -0,0 +1,3 @@ +#wrong +void setup() {} +void loop() {} diff --git a/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino new file mode 100644 index 00000000000..a461189885d --- /dev/null +++ b/internal/integrationtest/compile_3/testdata/using_Wire_with_missing_lib/using_Wire_with_missing_lib.ino @@ -0,0 +1,5 @@ +#include +#include + +void setup() {} +void loop() {}