From 7ae2e2ddd30f233d31d06856681866354c7f1e0a Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 1 Sep 2022 12:02:48 +0200 Subject: [PATCH 01/11] Migrate TestCompileWithoutFqbn from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 40 +++++++++++++++++++ test/test_compile_part_1.py | 12 ------ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 internal/integrationtest/compile/compile_part_1_test.go diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go new file mode 100644 index 00000000000..db74c5a8c26 --- /dev/null +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -0,0 +1,40 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package compile_part_1_test + +import ( + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/stretchr/testify/require" +) + +func TestCompileWithoutFqbn(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + // Build sketch without FQBN + _, _, err = cli.Run("compile") + require.Error(t, err) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index c6d6604bad2..8bafc943e83 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,18 +25,6 @@ from .common import running_on_ci -def test_compile_without_fqbn(run_command): - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - run_command(["core", "install", "arduino:avr@1.8.3"]) - - # Build sketch without FQBN - result = run_command(["compile"]) - assert result.failed - - def test_compile_error_message(run_command, working_dir): # Init the environment explicitly run_command(["core", "update-index"]) From 8e32390df12364b69a764863d3ab88fc049d83c6 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 1 Sep 2022 13:03:28 +0200 Subject: [PATCH 02/11] Migrate TestCompileErrorMessage from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 46 +++++++++++++++++++ test/test_compile_part_1.py | 36 --------------- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index db74c5a8c26..0bc73950712 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" ) @@ -38,3 +39,48 @@ func TestCompileWithoutFqbn(t *testing.T) { _, _, err = cli.Run("compile") require.Error(t, err) } + +func TestCompileErrorMessage(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Download latest AVR + _, _, err = cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) + + // Run a batch of bogus compile in a temp dir to check the error messages + tmp, err := paths.MkTempDir("", "tmp_dir") + require.NoError(t, err) + defer tmp.RemoveAll() + abcdef := tmp.Join("ABCDEF") + _, stderr, err := cli.Run("compile", "-b", "arduino:avr:uno", abcdef.String()) + require.Error(t, err) + require.Contains(t, string(stderr), "no such file or directory:") + _, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("ABCDEF.ino").String()) + require.Error(t, err) + require.Contains(t, string(stderr), "no such file or directory:") + _, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("QWERTY").String()) + require.Error(t, err) + require.Contains(t, string(stderr), "no such file or directory:") + + err = abcdef.Mkdir() + require.NoError(t, err) + _, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.String()) + require.Error(t, err) + require.Contains(t, string(stderr), "main file missing from sketch:") + _, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", abcdef.Join("ABCDEF.ino").String()) + require.Error(t, err) + require.Contains(t, string(stderr), "no such file or directory:") + + qwertyIno := abcdef.Join("QWERTY.ino") + f, err := qwertyIno.Create() + require.NoError(t, err) + defer f.Close() + _, stderr, err = cli.Run("compile", "-b", "arduino:avr:uno", qwertyIno.String()) + require.Error(t, err) + require.Contains(t, string(stderr), "main file missing from sketch:") +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 8bafc943e83..9581a126093 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,42 +25,6 @@ from .common import running_on_ci -def test_compile_error_message(run_command, working_dir): - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Download latest AVR - run_command(["core", "install", "arduino:avr"]) - - # Run a batch of bogus compile in a temp dir to check the error messages - with tempfile.TemporaryDirectory() as tmp_dir: - tmp = Path(tmp_dir) - abcdef = tmp / "ABCDEF" - res = run_command(["compile", "-b", "arduino:avr:uno", abcdef]) - assert res.failed - assert "no such file or directory:" in res.stderr - res = run_command(["compile", "-b", "arduino:avr:uno", abcdef / "ABCDEF.ino"]) - assert res.failed - assert "no such file or directory:" in res.stderr - res = run_command(["compile", "-b", "arduino:avr:uno", abcdef / "QWERTY"]) - assert res.failed - assert "no such file or directory:" in res.stderr - - abcdef.mkdir() - res = run_command(["compile", "-b", "arduino:avr:uno", abcdef]) - assert res.failed - assert "main file missing from sketch:" in res.stderr - res = run_command(["compile", "-b", "arduino:avr:uno", abcdef / "ABCDEF.ino"]) - assert res.failed - assert "no such file or directory:" in res.stderr - - qwerty_ino = abcdef / "QWERTY.ino" - qwerty_ino.touch() - res = run_command(["compile", "-b", "arduino:avr:uno", qwerty_ino]) - assert res.failed - assert "main file missing from sketch:" in res.stderr - - def test_compile_with_simple_sketch(run_command, data_dir, working_dir): # Init the environment explicitly run_command(["core", "update-index"]) From 90fc6cd208c852c6290b1cd01fbfbb55897bc80a Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 1 Sep 2022 15:37:40 +0200 Subject: [PATCH 03/11] Migrate TestCompileWithSimpleSketch from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 59 +++++++++++++++++++ test/test_compile_part_1.py | 46 --------------- 2 files changed, 59 insertions(+), 46 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index 0bc73950712..bfb1be13c9f 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -16,6 +16,10 @@ package compile_part_1_test import ( + "crypto/md5" + "encoding/hex" + "encoding/json" + "strings" "testing" "github.com/arduino/arduino-cli/internal/integrationtest" @@ -84,3 +88,58 @@ func TestCompileErrorMessage(t *testing.T) { require.Error(t, err) require.Contains(t, string(stderr), "main file missing from sketch:") } + +func TestCompileWithSimpleSketch(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Download latest AVR + _, _, err = cli.Run("core", "install", "arduino:avr") + require.NoError(t, err) + + sketchName := "CompileIntegrationTest" + sketchPath := cli.SketchbookDir().Join(sketchName) + fqbn := "arduino:avr:uno" + + // Create a test sketch + stdout, _, err := cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) + + // Build sketch for arduino:avr:uno + _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) + require.NoError(t, err) + + // Build sketch for arduino:avr:uno with json output + stdout, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--format", "json") + require.NoError(t, err) + // check is a valid json and contains requested data + var compileOutput map[string]interface{} + err = json.Unmarshal(stdout, &compileOutput) + require.NoError(t, err) + require.NotEmpty(t, compileOutput["compiler_out"]) + require.Empty(t, compileOutput["compiler_err"]) + + // Verifies expected binaries have been built + md5 := md5.Sum(([]byte(sketchPath.String()))) + sketchPathMd5 := strings.ToUpper(hex.EncodeToString(md5[:])) + require.NotEmpty(t, sketchPathMd5) + buildDir := paths.TempDir().Join("arduino-sketch-" + sketchPathMd5) + require.FileExists(t, buildDir.Join(sketchName+".ino.eep").String()) + require.FileExists(t, buildDir.Join(sketchName+".ino.elf").String()) + require.FileExists(t, buildDir.Join(sketchName+".ino.hex").String()) + require.FileExists(t, buildDir.Join(sketchName+".ino.with_bootloader.bin").String()) + require.FileExists(t, buildDir.Join(sketchName+".ino.with_bootloader.hex").String()) + + // Verifies binaries are not exported by default to Sketch folder + sketchBuildDir := sketchPath.Join("build" + strings.ReplaceAll(fqbn, ":", ".")) + require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.eep").String()) + require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.elf").String()) + require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.hex").String()) + require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.with_bootloader.bin").String()) + require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.with_bootloader.hex").String()) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 9581a126093..639d2cf4d7f 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,52 +25,6 @@ from .common import running_on_ci -def test_compile_with_simple_sketch(run_command, data_dir, working_dir): - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Download latest AVR - run_command(["core", "install", "arduino:avr"]) - - sketch_name = "CompileIntegrationTest" - sketch_path = Path(data_dir, sketch_name) - fqbn = "arduino:avr:uno" - - # Create a test sketch - result = run_command(["sketch", "new", sketch_path]) - assert result.ok - assert f"Sketch created in: {sketch_path}" in result.stdout - - # Build sketch for arduino:avr:uno - result = run_command(["compile", "-b", fqbn, sketch_path]) - assert result.ok - - # Build sketch for arduino:avr:uno with json output - result = run_command(["compile", "-b", fqbn, sketch_path, "--format", "json"]) - assert result.ok - # check is a valid json and contains requested data - compile_output = json.loads(result.stdout) - assert compile_output["compiler_out"] != "" - assert compile_output["compiler_err"] == "" - - # Verifies expected binaries have been built - sketch_path_md5 = hashlib.md5(bytes(sketch_path)).hexdigest().upper() - build_dir = Path(tempfile.gettempdir(), f"arduino-sketch-{sketch_path_md5}") - assert (build_dir / f"{sketch_name}.ino.eep").exists() - assert (build_dir / f"{sketch_name}.ino.elf").exists() - assert (build_dir / f"{sketch_name}.ino.hex").exists() - assert (build_dir / f"{sketch_name}.ino.with_bootloader.bin").exists() - assert (build_dir / f"{sketch_name}.ino.with_bootloader.hex").exists() - - # Verifies binaries are not exported by default to Sketch folder - sketch_build_dir = Path(sketch_path, "build", fqbn.replace(":", ".")) - assert not (sketch_build_dir / f"{sketch_name}.ino.eep").exists() - assert not (sketch_build_dir / f"{sketch_name}.ino.elf").exists() - assert not (sketch_build_dir / f"{sketch_name}.ino.hex").exists() - assert not (sketch_build_dir / f"{sketch_name}.ino.with_bootloader.bin").exists() - assert not (sketch_build_dir / f"{sketch_name}.ino.with_bootloader.hex").exists() - - @pytest.mark.skipif( running_on_ci() and platform.system() == "Windows", reason="Test disabled on Github Actions Win VM until tmpdir inconsistent behavior bug is fixed", From 63e6be19e118fd2fa18465b57d742cd1ae2fe12c Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 1 Sep 2022 16:33:32 +0200 Subject: [PATCH 04/11] Migrate TestOutputFlagDefaultPath from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 28 +++++++++++++++++++ test/test_compile_part_1.py | 24 ---------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index bfb1be13c9f..1a66138aa31 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -143,3 +143,31 @@ func TestCompileWithSimpleSketch(t *testing.T) { require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.with_bootloader.bin").String()) require.NoFileExists(t, sketchBuildDir.Join(sketchName+".ino.with_bootloader.hex").String()) } + +func TestOutputFlagDefaultPath(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + // Create a test sketch + sketchPath := cli.SketchbookDir().Join("test_output_flag_default_path") + fqbn := "arduino:avr:uno" + _, _, err = cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + + // Test the --output-dir flag defaulting to current working dir + workingDir, err := paths.Getwd() + require.NoError(t, err) + target := workingDir.Join("test") + defer target.RemoveAll() + _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String(), "--output-dir", "test") + require.NoError(t, err) + require.DirExists(t, target.String()) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 639d2cf4d7f..b3a72cc067b 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,30 +25,6 @@ from .common import running_on_ci -@pytest.mark.skipif( - running_on_ci() and platform.system() == "Windows", - reason="Test disabled on Github Actions Win VM until tmpdir inconsistent behavior bug is fixed", -) -def test_output_flag_default_path(run_command, data_dir, working_dir): - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - run_command(["core", "install", "arduino:avr@1.8.3"]) - - # Create a test sketch - sketch_path = os.path.join(data_dir, "test_output_flag_default_path") - fqbn = "arduino:avr:uno" - result = run_command(["sketch", "new", sketch_path]) - assert result.ok - - # Test the --output-dir flag defaulting to current working dir - result = run_command(["compile", "-b", fqbn, sketch_path, "--output-dir", "test"]) - assert result.ok - target = os.path.join(working_dir, "test") - assert os.path.exists(target) and os.path.isdir(target) - - def test_compile_with_sketch_with_symlink_selfloop(run_command, data_dir): # Init the environment explicitly run_command(["core", "update-index"]) From 876deb6e845195f2c87116336ee3930ff38f8217 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 2 Sep 2022 10:25:21 +0200 Subject: [PATCH 05/11] Migrate TestCompileWithSketchWithSymlinkSelfloop from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 58 +++++++++++++++++++ test/test_compile_part_1.py | 50 ---------------- 2 files changed, 58 insertions(+), 50 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index 1a66138aa31..ba9b35c9e0e 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -19,6 +19,7 @@ import ( "crypto/md5" "encoding/hex" "encoding/json" + "os" "strings" "testing" @@ -171,3 +172,60 @@ func TestOutputFlagDefaultPath(t *testing.T) { require.NoError(t, err) require.DirExists(t, target.String()) } + +func TestCompileWithSketchWithSymlinkSelfloop(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + sketchName := "CompileIntegrationTestSymlinkSelfLoop" + sketchPath := cli.SketchbookDir().Join(sketchName) + fqbn := "arduino:avr:uno" + + // Create a test sketch + stdout, _, err := cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) + + // create a symlink that loops on himself + loopFilePath := sketchPath.Join("loop") + err = os.Symlink(loopFilePath.String(), loopFilePath.String()) + require.NoError(t, err) + + // Build sketch for arduino:avr:uno + _, stderr, err := cli.Run("compile", "-b", fqbn, sketchPath.String()) + // The assertion is a bit relaxed in this case because win behaves differently from macOs and linux + // returning a different error detailed message + require.Contains(t, string(stderr), "Error opening sketch:") + require.Error(t, err) + + sketchName = "CompileIntegrationTestSymlinkDirLoop" + sketchPath = cli.SketchbookDir().Join(sketchName) + + // Create a test sketch + stdout, _, err = cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) + + // create a symlink that loops on the upper level + loopDirPath := sketchPath.Join("loop_dir") + err = loopDirPath.Mkdir() + require.NoError(t, err) + loopDirSymlinkPath := loopDirPath.Join("loop_dir_symlink") + err = os.Symlink(loopDirPath.String(), loopDirSymlinkPath.String()) + require.NoError(t, err) + + // Build sketch for arduino:avr:uno + _, stderr, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) + // The assertion is a bit relaxed in this case because win behaves differently from macOs and linux + // returning a different error detailed message + require.Contains(t, string(stderr), "Error opening sketch:") + require.Error(t, err) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index b3a72cc067b..98ffa1f976e 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,56 +25,6 @@ from .common import running_on_ci -def test_compile_with_sketch_with_symlink_selfloop(run_command, data_dir): - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - run_command(["core", "install", "arduino:avr@1.8.3"]) - - sketch_name = "CompileIntegrationTestSymlinkSelfLoop" - sketch_path = os.path.join(data_dir, sketch_name) - fqbn = "arduino:avr:uno" - - # Create a test sketch - result = run_command(["sketch", "new", sketch_path]) - assert result.ok - assert "Sketch created in: {}".format(sketch_path) in result.stdout - - # create a symlink that loops on himself - loop_file_path = os.path.join(sketch_path, "loop") - os.symlink(loop_file_path, loop_file_path) - - # Build sketch for arduino:avr:uno - result = run_command(["compile", "-b", fqbn, sketch_path]) - # The assertion is a bit relaxed in this case because win behaves differently from macOs and linux - # returning a different error detailed message - assert "Error opening sketch:" in result.stderr - assert not result.ok - - sketch_name = "CompileIntegrationTestSymlinkDirLoop" - sketch_path = os.path.join(data_dir, sketch_name) - fqbn = "arduino:avr:uno" - - # Create a test sketch - result = run_command(["sketch", "new", sketch_path]) - assert result.ok - assert "Sketch created in: {}".format(sketch_path) in result.stdout - - # create a symlink that loops on the upper level - loop_dir_path = os.path.join(sketch_path, "loop_dir") - os.mkdir(loop_dir_path) - loop_dir_symlink_path = os.path.join(loop_dir_path, "loop_dir_symlink") - os.symlink(loop_dir_path, loop_dir_symlink_path) - - # Build sketch for arduino:avr:uno - result = run_command(["compile", "-b", fqbn, sketch_path]) - # The assertion is a bit relaxed in this case because win behaves differently from macOs and linux - # returning a different error detailed message - assert "Error opening sketch:" in result.stderr - assert not result.ok - - def test_compile_blacklisted_sketchname(run_command, data_dir): """ Compile should ignore folders named `RCS`, `.git` and the likes, but From c1115d2a53d619a640e0fc5d146ff8dedd2c4d0c Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 2 Sep 2022 10:37:30 +0200 Subject: [PATCH 06/11] Migrate TestCompileBlacklistedSketchname from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 29 +++++++++++++++++++ test/test_compile_part_1.py | 25 ---------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index ba9b35c9e0e..a9f1c7ad893 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -229,3 +229,32 @@ func TestCompileWithSketchWithSymlinkSelfloop(t *testing.T) { require.Contains(t, string(stderr), "Error opening sketch:") require.Error(t, err) } + +func TestCompileBlacklistedSketchname(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Compile should ignore folders named `RCS`, `.git` and the likes, but + // it should be ok for a sketch to be named like RCS.ino + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + sketchName := "RCS" + sketchPath := cli.SketchbookDir().Join(sketchName) + fqbn := "arduino:avr:uno" + + // Create a test sketch + stdout, _, err := cli.Run("sketch", "new", sketchPath.String()) + require.NoError(t, err) + require.Contains(t, string(stdout), "Sketch created in: "+sketchPath.String()) + + // Build sketch for arduino:avr:uno + _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) + require.NoError(t, err) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 98ffa1f976e..c76230ef5f3 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,31 +25,6 @@ from .common import running_on_ci -def test_compile_blacklisted_sketchname(run_command, data_dir): - """ - Compile should ignore folders named `RCS`, `.git` and the likes, but - it should be ok for a sketch to be named like RCS.ino - """ - # Init the environment explicitly - run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - run_command(["core", "install", "arduino:avr@1.8.3"]) - - sketch_name = "RCS" - sketch_path = os.path.join(data_dir, sketch_name) - fqbn = "arduino:avr:uno" - - # Create a test sketch - result = run_command(["sketch", "new", sketch_path]) - assert result.ok - assert "Sketch created in: {}".format(sketch_path) in result.stdout - - # Build sketch for arduino:avr:uno - result = run_command(["compile", "-b", fqbn, sketch_path]) - assert result.ok - - def test_compile_without_precompiled_libraries(run_command, data_dir): # Init the environment explicitly url = "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json" From 7560739219d285448e776982a64cde97042cfee4 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 2 Sep 2022 11:27:02 +0200 Subject: [PATCH 07/11] Migrate TestCompileWithoutPrecompiledLibraries from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 54 +++++++++++++++++++ test/test_compile_part_1.py | 35 ------------ 2 files changed, 54 insertions(+), 35 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index a9f1c7ad893..90b6595bbed 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -258,3 +258,57 @@ func TestCompileBlacklistedSketchname(t *testing.T) { _, _, err = cli.Run("compile", "-b", fqbn, sketchPath.String()) require.NoError(t, err) } + +func TestCompileWithoutPrecompiledLibraries(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + url := "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json" + _, _, err := cli.Run("core", "update-index", "--additional-urls="+url) + require.NoError(t, err) + _, _, err = cli.Run("core", "install", "arduino:mbed@1.3.1", "--additional-urls="+url) + require.NoError(t, err) + + // // Precompiled version of Arduino_TensorflowLite + // _, _, err = cli.Run("lib", "install", "Arduino_LSM9DS1") + // require.NoError(t, err) + // _, _, err = cli.Run("lib", "install", "Arduino_TensorflowLite@2.1.1-ALPHA-precompiled") + // require.NoError(t, err) + + // sketchPath := cli.SketchbookDir().Join("libraries", "Arduino_TensorFlowLite", "examples", "hello_world") + // _, _, err = cli.Run("compile", "-b", "arduino:mbed:nano33ble", sketchPath.String()) + // require.NoError(t, err) + + _, _, err = cli.Run("core", "install", "arduino:samd@1.8.7", "--additional-urls="+url) + require.NoError(t, err) + // _, _, err = cli.Run("core", "install", "adafruit:samd@1.6.4", "--additional-urls="+url) + // require.NoError(t, err) + // // should work on adafruit too after https://github.com/arduino/arduino-cli/pull/1134 + // _, _, err = cli.Run("compile", "-b", "adafruit:samd:adafruit_feather_m4", sketchPath.String()) + // require.NoError(t, err) + + // // Non-precompiled version of Arduino_TensorflowLite + // _, _, err = cli.Run("lib", "install", "Arduino_TensorflowLite@2.1.0-ALPHA") + // require.NoError(t, err) + // _, _, err = cli.Run("compile", "-b", "arduino:mbed:nano33ble", sketchPath.String()) + // require.NoError(t, err) + // _, _, err = cli.Run("compile", "-b", "adafruit:samd:adafruit_feather_m4", sketchPath.String()) + // require.NoError(t, err) + + // Bosch sensor library + _, _, err = cli.Run("lib", "install", "BSEC Software Library@1.5.1474") + require.NoError(t, err) + sketchPath := cli.SketchbookDir().Join("libraries", "BSEC_Software_Library", "examples", "basic") + _, _, err = cli.Run("compile", "-b", "arduino:samd:mkr1000", sketchPath.String()) + require.NoError(t, err) + _, _, err = cli.Run("compile", "-b", "arduino:mbed:nano33ble", sketchPath.String()) + require.NoError(t, err) + + // USBBlaster library + _, _, err = cli.Run("lib", "install", "USBBlaster@1.0.0") + require.NoError(t, err) + sketchPath = cli.SketchbookDir().Join("libraries", "USBBlaster", "examples", "USB_Blaster") + _, _, err = cli.Run("compile", "-b", "arduino:samd:mkrvidor4000", sketchPath.String()) + require.NoError(t, err) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index c76230ef5f3..36a2a51abcf 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,41 +25,6 @@ from .common import running_on_ci -def test_compile_without_precompiled_libraries(run_command, data_dir): - # Init the environment explicitly - url = "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json" - assert run_command(["core", "update-index", f"--additional-urls={url}"]) - assert run_command(["core", "install", "arduino:mbed@1.3.1", f"--additional-urls={url}"]) - - # # Precompiled version of Arduino_TensorflowLite - # assert run_command(["lib", "install", "Arduino_LSM9DS1"]) - # assert run_command(["lib", "install", "Arduino_TensorflowLite@2.1.1-ALPHA-precompiled"]) - # - # sketch_path = Path(data_dir, "libraries", "Arduino_TensorFlowLite", "examples", "hello_world") - # assert run_command(["compile", "-b", "arduino:mbed:nano33ble", sketch_path]) - - assert run_command(["core", "install", "arduino:samd@1.8.7", f"--additional-urls={url}"]) - # assert run_command(["core", "install", "adafruit:samd@1.6.4", f"--additional-urls={url}"]) - # # should work on adafruit too after https://github.com/arduino/arduino-cli/pull/1134 - # assert run_command(["compile", "-b", "adafruit:samd:adafruit_feather_m4", sketch_path]) - # - # # Non-precompiled version of Arduino_TensorflowLite - # assert run_command(["lib", "install", "Arduino_TensorflowLite@2.1.0-ALPHA"]) - # assert run_command(["compile", "-b", "arduino:mbed:nano33ble", sketch_path]) - # assert run_command(["compile", "-b", "adafruit:samd:adafruit_feather_m4", sketch_path]) - - # Bosch sensor library - assert run_command(["lib", "install", "BSEC Software Library@1.5.1474"]) - sketch_path = Path(data_dir, "libraries", "BSEC_Software_Library", "examples", "basic") - assert run_command(["compile", "-b", "arduino:samd:mkr1000", sketch_path]) - assert run_command(["compile", "-b", "arduino:mbed:nano33ble", sketch_path]) - - # USBBlaster library - assert run_command(["lib", "install", "USBBlaster@1.0.0"]) - sketch_path = Path(data_dir, "libraries", "USBBlaster", "examples", "USB_Blaster") - assert run_command(["compile", "-b", "arduino:samd:mkrvidor4000", sketch_path]) - - def test_compile_with_build_properties_flag(run_command, data_dir, copy_sketch): # Init the environment explicitly assert run_command(["core", "update-index"]) From 26d7aa65f5c7a9ff31a65aaf834db9d6cec3e8cd Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 2 Sep 2022 15:34:00 +0200 Subject: [PATCH 08/11] Migrate TestCompileWithBuildPropertiesFlag from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 52 +++++++++++++ .../sketch_with_multiple_int_defines.ino | 0 .../sketch_with_single_int_define.ino | 0 .../sketch_with_single_string_define.ino | 0 test/test_compile_part_1.py | 75 ------------------- 5 files changed, 52 insertions(+), 75 deletions(-) rename {test => internal/integrationtest}/testdata/sketch_with_multiple_int_defines/sketch_with_multiple_int_defines.ino (100%) rename {test => internal/integrationtest}/testdata/sketch_with_single_int_define/sketch_with_single_int_define.ino (100%) rename {test => internal/integrationtest}/testdata/sketch_with_single_string_define/sketch_with_single_string_define.ino (100%) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index 90b6595bbed..4d62bea34fe 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -312,3 +312,55 @@ func TestCompileWithoutPrecompiledLibraries(t *testing.T) { _, _, err = cli.Run("compile", "-b", "arduino:samd:mkrvidor4000", sketchPath.String()) require.NoError(t, err) } + +func TestCompileWithBuildPropertiesFlag(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + sketchName := "sketch_with_single_string_define" + sketchPath := cli.CopySketch(sketchName) + fqbn := "arduino:avr:uno" + + // Compile using a build property with quotes + _, stderr, err := cli.Run("compile", "-b", fqbn, "--build-properties=\"build.extra_flags=\"-DMY_DEFINE=\"hello world\"\"", sketchPath.String(), "--verbose", "--clean") + require.Error(t, err) + require.NotContains(t, string(stderr), "Flag --build-properties has been deprecated, please use --build-property instead.") + + // Try again with quotes + _, stderr, err = cli.Run("compile", "-b", fqbn, "--build-properties=\"build.extra_flags=-DMY_DEFINE=\"hello\"\"", sketchPath.String(), "--verbose", "--clean") + require.Error(t, err) + require.NotContains(t, string(stderr), "Flag --build-properties has been deprecated, please use --build-property instead.") + + sketchName = "sketch_with_single_int_define" + sketchPath = cli.CopySketch(sketchName) + + // Try without quotes + stdout, stderr, err := cli.Run("compile", "-b", fqbn, "--build-properties=\"build.extra_flags=-DMY_DEFINE=1\"", sketchPath.String(), "--verbose", "--clean") + require.NoError(t, err) + require.Contains(t, string(stderr), "Flag --build-properties has been deprecated, please use --build-property instead.") + require.Contains(t, string(stdout), "-DMY_DEFINE=1") + + sketchName = "sketch_with_multiple_int_defines" + sketchPath = cli.CopySketch(sketchName) + + stdout, stderr, err = cli.Run("compile", + "-b", + fqbn, + "--build-properties", + "build.extra_flags=-DFIRST_PIN=1,compiler.cpp.extra_flags=-DSECOND_PIN=2", + sketchPath.String(), + "--verbose", + "--clean") + require.NoError(t, err) + require.Contains(t, string(stderr), "Flag --build-properties has been deprecated, please use --build-property instead.") + require.Contains(t, string(stdout), "-DFIRST_PIN=1") + require.Contains(t, string(stdout), "-DSECOND_PIN=2") +} diff --git a/test/testdata/sketch_with_multiple_int_defines/sketch_with_multiple_int_defines.ino b/internal/integrationtest/testdata/sketch_with_multiple_int_defines/sketch_with_multiple_int_defines.ino similarity index 100% rename from test/testdata/sketch_with_multiple_int_defines/sketch_with_multiple_int_defines.ino rename to internal/integrationtest/testdata/sketch_with_multiple_int_defines/sketch_with_multiple_int_defines.ino diff --git a/test/testdata/sketch_with_single_int_define/sketch_with_single_int_define.ino b/internal/integrationtest/testdata/sketch_with_single_int_define/sketch_with_single_int_define.ino similarity index 100% rename from test/testdata/sketch_with_single_int_define/sketch_with_single_int_define.ino rename to internal/integrationtest/testdata/sketch_with_single_int_define/sketch_with_single_int_define.ino diff --git a/test/testdata/sketch_with_single_string_define/sketch_with_single_string_define.ino b/internal/integrationtest/testdata/sketch_with_single_string_define/sketch_with_single_string_define.ino similarity index 100% rename from test/testdata/sketch_with_single_string_define/sketch_with_single_string_define.ino rename to internal/integrationtest/testdata/sketch_with_single_string_define/sketch_with_single_string_define.ino diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 36a2a51abcf..112c06619bd 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,81 +25,6 @@ from .common import running_on_ci -def test_compile_with_build_properties_flag(run_command, data_dir, copy_sketch): - # Init the environment explicitly - assert run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - assert run_command(["core", "install", "arduino:avr@1.8.3"]) - - sketch_path = copy_sketch("sketch_with_single_string_define") - fqbn = "arduino:avr:uno" - - # Compile using a build property with quotes - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-properties="build.extra_flags=\\"-DMY_DEFINE=\\"hello world\\"\\""', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.failed - assert "Flag --build-properties has been deprecated, please use --build-property instead." not in res.stderr - - # Try again with quotes - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-properties="build.extra_flags=-DMY_DEFINE=\\"hello\\""', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.failed - assert "Flag --build-properties has been deprecated, please use --build-property instead." not in res.stderr - - # Try without quotes - sketch_path = copy_sketch("sketch_with_single_int_define") - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-properties="build.extra_flags=-DMY_DEFINE=1"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.ok - assert "Flag --build-properties has been deprecated, please use --build-property instead." in res.stderr - assert "-DMY_DEFINE=1" in res.stdout - - sketch_path = copy_sketch("sketch_with_multiple_int_defines") - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-properties="build.extra_flags=-DFIRST_PIN=1,compiler.cpp.extra_flags=-DSECOND_PIN=2"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.ok - assert "Flag --build-properties has been deprecated, please use --build-property instead." in res.stderr - assert "-DFIRST_PIN=1" in res.stdout - assert "-DSECOND_PIN=2" in res.stdout - - def test_compile_with_build_property_containing_quotes(run_command, data_dir, copy_sketch): # Init the environment explicitly assert run_command(["core", "update-index"]) From 744631e485e7380ff31e3220f84fb1c5d93c9c50 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Tue, 13 Sep 2022 10:16:19 +0200 Subject: [PATCH 09/11] Migrate TestCompileWithBuildPropertyContainingQuotes from test_compile_part_1.py to compile_part_1_test.go --- .../compile/compile_part_1_test.go | 27 +++++++++++++++++++ test/test_compile_part_1.py | 25 ----------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index 4d62bea34fe..f55dea8c099 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -364,3 +364,30 @@ func TestCompileWithBuildPropertiesFlag(t *testing.T) { require.Contains(t, string(stdout), "-DFIRST_PIN=1") require.Contains(t, string(stdout), "-DSECOND_PIN=2") } + +func TestCompileWithBuildPropertyContainingQuotes(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + sketchName := "sketch_with_single_string_define" + sketchPath := cli.CopySketch(sketchName) + fqbn := "arduino:avr:uno" + + // Compile using a build property with quotes + stdout, _, err := cli.Run("compile", + "-b", + fqbn, + `--build-property=build.extra_flags="-DMY_DEFINE="hello world""`, + sketchPath.String(), + "--verbose") + require.NoError(t, err) + require.Contains(t, string(stdout), `-DMY_DEFINE=\"hello world\"`) +} diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py index 112c06619bd..d5ac2becb28 100644 --- a/test/test_compile_part_1.py +++ b/test/test_compile_part_1.py @@ -25,31 +25,6 @@ from .common import running_on_ci -def test_compile_with_build_property_containing_quotes(run_command, data_dir, copy_sketch): - # Init the environment explicitly - assert run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - assert run_command(["core", "install", "arduino:avr@1.8.3"]) - - sketch_path = copy_sketch("sketch_with_single_string_define") - fqbn = "arduino:avr:uno" - - # Compile using a build property with quotes - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=build.extra_flags=\\"-DMY_DEFINE=\\"hello world\\"\\"', - sketch_path, - "--verbose", - ] - ) - assert res.ok - assert '-DMY_DEFINE=\\"hello world\\"' in res.stdout - - def test_compile_with_multiple_build_property_flags(run_command, data_dir, copy_sketch, working_dir): # Init the environment explicitly assert run_command(["core", "update-index"]) From 639057f1f58c4b40fb00337630535d38a29c1bb2 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Tue, 13 Sep 2022 12:43:29 +0200 Subject: [PATCH 10/11] Migrate TestCompileWithMultipleBuildPropertyFlags to compile_part_1_test.go and delete test_compile_part_1.py --- .../compile/compile_part_1_test.go | 82 +++++++++++++ .../sketch_with_multiple_defines.ino | 0 test/test_compile_part_1.py | 111 ------------------ 3 files changed, 82 insertions(+), 111 deletions(-) rename {test => internal/integrationtest}/testdata/sketch_with_multiple_defines/sketch_with_multiple_defines.ino (100%) delete mode 100644 test/test_compile_part_1.py diff --git a/internal/integrationtest/compile/compile_part_1_test.go b/internal/integrationtest/compile/compile_part_1_test.go index f55dea8c099..b7e8ad574e6 100644 --- a/internal/integrationtest/compile/compile_part_1_test.go +++ b/internal/integrationtest/compile/compile_part_1_test.go @@ -391,3 +391,85 @@ func TestCompileWithBuildPropertyContainingQuotes(t *testing.T) { require.NoError(t, err) require.Contains(t, string(stdout), `-DMY_DEFINE=\"hello world\"`) } + +func TestCompileWithMultipleBuildPropertyFlags(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("core", "update-index") + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.3") + require.NoError(t, err) + + sketchName := "sketch_with_multiple_defines" + sketchPath := cli.CopySketch(sketchName) + fqbn := "arduino:avr:uno" + + // Compile using multiple build properties separated by a space + _, _, err = cli.Run( + "compile", + "-b", + fqbn, + "--build-property=compiler.cpp.extra_flags=\"-DPIN=2 -DSSID=\"This is a String\"\"", + sketchPath.String(), + "--verbose", + "--clean", + ) + require.Error(t, err) + + // Compile using multiple build properties separated by a space and properly quoted + stdout, _, err := cli.Run( + "compile", + "-b", + fqbn, + "--build-property=compiler.cpp.extra_flags=-DPIN=2 \"-DSSID=\"This is a String\"\"", + sketchPath.String(), + "--verbose", + "--clean", + ) + require.NoError(t, err) + require.Contains(t, string(stdout), "-DPIN=2 \"-DSSID=\\\"This is a String\\\"\"") + + // Tries compilation using multiple build properties separated by a comma + _, _, err = cli.Run( + "compile", + "-b", + fqbn, + "--build-property=compiler.cpp.extra_flags=\"-DPIN=2,-DSSID=\"This is a String\"\"", + sketchPath.String(), + "--verbose", + "--clean", + ) + require.Error(t, err) + + stdout, _, err = cli.Run( + "compile", + "-b", + fqbn, + "--build-property=compiler.cpp.extra_flags=\"-DPIN=2\"", + "--build-property=compiler.cpp.extra_flags=\"-DSSID=\"This is a String\"\"", + sketchPath.String(), + "--verbose", + "--clean", + ) + require.Error(t, err) + require.NotContains(t, string(stdout), "-DPIN=2") + require.Contains(t, string(stdout), "-DSSID=\\\"This is a String\\\"") + + stdout, _, err = cli.Run( + "compile", + "-b", + fqbn, + "--build-property=compiler.cpp.extra_flags=\"-DPIN=2\"", + "--build-property=build.extra_flags=\"-DSSID=\"hello world\"\"", + sketchPath.String(), + "--verbose", + "--clean", + ) + require.NoError(t, err) + require.Contains(t, string(stdout), "-DPIN=2") + require.Contains(t, string(stdout), "-DSSID=\\\"hello world\\\"") +} diff --git a/test/testdata/sketch_with_multiple_defines/sketch_with_multiple_defines.ino b/internal/integrationtest/testdata/sketch_with_multiple_defines/sketch_with_multiple_defines.ino similarity index 100% rename from test/testdata/sketch_with_multiple_defines/sketch_with_multiple_defines.ino rename to internal/integrationtest/testdata/sketch_with_multiple_defines/sketch_with_multiple_defines.ino diff --git a/test/test_compile_part_1.py b/test/test_compile_part_1.py deleted file mode 100644 index d5ac2becb28..00000000000 --- a/test/test_compile_part_1.py +++ /dev/null @@ -1,111 +0,0 @@ -# This file is part of arduino-cli. -# -# Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -# -# This software is released under the GNU General Public License version 3, -# which covers the main part of arduino-cli. -# The terms of this license can be found at: -# https://www.gnu.org/licenses/gpl-3.0.en.html -# -# You can be released from the requirements of the above licenses by purchasing -# a commercial license. Buying such a license is mandatory if you want to modify or -# otherwise use the software for commercial activities involving the Arduino -# software without disclosing the source code of your own applications. To purchase -# a commercial license, send an email to license@arduino.cc. - -import os -import platform -import tempfile -import hashlib -from pathlib import Path -import simplejson as json - -import pytest - -from .common import running_on_ci - - -def test_compile_with_multiple_build_property_flags(run_command, data_dir, copy_sketch, working_dir): - # Init the environment explicitly - assert run_command(["core", "update-index"]) - - # Install Arduino AVR Boards - assert run_command(["core", "install", "arduino:avr@1.8.3"]) - - sketch_path = copy_sketch("sketch_with_multiple_defines") - fqbn = "arduino:avr:uno" - - # Compile using multiple build properties separated by a space - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=compiler.cpp.extra_flags=\\"-DPIN=2 -DSSID=\\"This is a String\\"\\"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.failed - - # Compile using multiple build properties separated by a space and properly quoted - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=compiler.cpp.extra_flags=-DPIN=2 \\"-DSSID=\\"This is a String\\"\\"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.ok - assert '-DPIN=2 "-DSSID=\\"This is a String\\""' in res.stdout - - # Tries compilation using multiple build properties separated by a comma - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=compiler.cpp.extra_flags=\\"-DPIN=2,-DSSID=\\"This is a String\\"\\"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.failed - - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=compiler.cpp.extra_flags=\\"-DPIN=2\\"', - '--build-property=compiler.cpp.extra_flags=\\"-DSSID=\\"This is a String\\"\\"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.failed - assert "-DPIN=2" not in res.stdout - assert '-DSSID=\\"This is a String\\"' in res.stdout - - res = run_command( - [ - "compile", - "-b", - fqbn, - '--build-property=compiler.cpp.extra_flags=\\"-DPIN=2\\"', - '--build-property=build.extra_flags=\\"-DSSID=\\"hello world\\"\\"', - sketch_path, - "--verbose", - "--clean", - ] - ) - assert res.ok - assert "-DPIN=2" in res.stdout - assert '-DSSID=\\"hello world\\"' in res.stdout From 356e5d97c8a33756b885b25efb9203c395e7591b Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 23 Sep 2022 17:31:53 +0200 Subject: [PATCH 11/11] Shorten testsuite ProjectName and DataDir to prevent errors on Windows runner Long paths caused certain commands to fail on the Windows runner. Reducing their lengths prevents those errors from occurring. --- internal/integrationtest/arduino-cli.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/integrationtest/arduino-cli.go b/internal/integrationtest/arduino-cli.go index 54a99da9b9e..fc6894237d0 100644 --- a/internal/integrationtest/arduino-cli.go +++ b/internal/integrationtest/arduino-cli.go @@ -37,6 +37,10 @@ import ( "google.golang.org/grpc" ) +func init() { + testsuite.ProjectName = "cli" +} + // FindRepositoryRootPath returns the repository root path func FindRepositoryRootPath(t *testing.T) *paths.Path { repoRootPath := paths.New(".") @@ -89,7 +93,7 @@ func NewArduinoCliWithinEnvironment(env *testsuite.Environment, config *ArduinoC cli := &ArduinoCLI{ path: config.ArduinoCLIPath, t: require.New(env.T()), - dataDir: env.RootDir().Join("Arduino15"), + dataDir: env.RootDir().Join("A"), sketchbookDir: env.RootDir().Join("Arduino"), stagingDir: env.RootDir().Join("Arduino15/staging"), }