From 017d3613884d34638c86f5f57b8a7f15ce52168c Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 25 May 2022 14:17:01 +0200 Subject: [PATCH 1/2] Fixed initializaion of profile libraries --- commands/compile/compile.go | 2 +- test/test_profiles.py | 29 +++++++++++++++++++ test/testdata/sketch_with_profile/sketch.yaml | 12 ++++++++ .../sketch_with_profile.ino | 4 +++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 test/test_profiles.py create mode 100644 test/testdata/sketch_with_profile/sketch.yaml create mode 100644 test/testdata/sketch_with_profile/sketch_with_profile.ino diff --git a/commands/compile/compile.go b/commands/compile/compile.go index 9d5398f3d59..03a2093da9f 100644 --- a/commands/compile/compile.go +++ b/commands/compile/compile.go @@ -124,7 +124,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream builderCtx.OtherLibrariesDirs = paths.NewPathList(req.GetLibraries()...) builderCtx.OtherLibrariesDirs.Add(configuration.LibrariesDir(configuration.Settings)) builderCtx.LibraryDirs = paths.NewPathList(req.Library...) - if len(builderCtx.OtherLibrariesDirs) > 0 || len(builderCtx.LibraryDirs) > 0 { + if len(req.GetLibraries()) > 0 || len(req.GetLibrary()) > 0 { builderCtx.LibrariesManager = nil // let the builder rebuild the library manager } if req.GetBuildPath() == "" { diff --git a/test/test_profiles.py b/test/test_profiles.py new file mode 100644 index 00000000000..e40e98a7143 --- /dev/null +++ b/test/test_profiles.py @@ -0,0 +1,29 @@ +# 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. + + +def test_compile_with_profiles(run_command, copy_sketch): + # Init the environment explicitly + run_command(["core", "update-index"]) + + sketch_path = copy_sketch("sketch_with_profile") + + # use profile without a required library -> should fail + result = run_command(["compile", "-m", "avr1", sketch_path]) + assert result.failed + + # use profile with the required library -> should succeed + result = run_command(["compile", "-m", "avr2", sketch_path]) + assert result.ok diff --git a/test/testdata/sketch_with_profile/sketch.yaml b/test/testdata/sketch_with_profile/sketch.yaml new file mode 100644 index 00000000000..ed40ce874f3 --- /dev/null +++ b/test/testdata/sketch_with_profile/sketch.yaml @@ -0,0 +1,12 @@ +profiles: + avr1: + fqbn: arduino:avr:uno + platforms: + - platform: arduino:avr (1.8.5) + + avr2: + fqbn: arduino:avr:uno + platforms: + - platform: arduino:avr (1.8.5) + libraries: + - Arduino_JSON (0.1.0) diff --git a/test/testdata/sketch_with_profile/sketch_with_profile.ino b/test/testdata/sketch_with_profile/sketch_with_profile.ino new file mode 100644 index 00000000000..60929bf8a86 --- /dev/null +++ b/test/testdata/sketch_with_profile/sketch_with_profile.ino @@ -0,0 +1,4 @@ +#include + +void setup() {} +void loop() {} From 0dc85879e1a01f6909d8faf3673d1a6a17357eec Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 25 May 2022 15:06:09 +0200 Subject: [PATCH 2/2] Apply suggestions from code review The library must be installed globally in order to provide coverage of the bug. Co-authored-by: per1234 --- test/test_profiles.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_profiles.py b/test/test_profiles.py index e40e98a7143..0402dc00f2c 100644 --- a/test/test_profiles.py +++ b/test/test_profiles.py @@ -21,6 +21,7 @@ def test_compile_with_profiles(run_command, copy_sketch): sketch_path = copy_sketch("sketch_with_profile") # use profile without a required library -> should fail + assert run_command(["lib", "install", "Arduino_JSON"]) result = run_command(["compile", "-m", "avr1", sketch_path]) assert result.failed