From bf6c67dfdca239001cfd74b5e8c0cfd851488e58 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 3 Nov 2022 14:53:50 +0100 Subject: [PATCH 01/12] Migrate TestUninstallSpaces from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 14 ++++++++++++++ test/test_lib.py | 9 --------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index f8993925a28..8fd87862ed8 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -676,3 +676,17 @@ func TestUninstall(t *testing.T) { _, _, err = cli.Run("lib", "uninstall", libs[0], libs[1]) require.NoError(t, err) } + +func TestUninstallSpaces(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + key := "LiquidCrystal I2C" + _, _, err := cli.Run("lib", "install", key) + require.NoError(t, err) + _, _, err = cli.Run("lib", "uninstall", key) + require.NoError(t, err) + stdout, _, err := cli.Run("lib", "list", "--format", "json") + require.NoError(t, err) + requirejson.Len(t, stdout, 0) +} diff --git a/test/test_lib.py b/test/test_lib.py index 4bfac88f39d..9a126399ce1 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,15 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_uninstall_spaces(run_command): - key = "LiquidCrystal I2C" - assert run_command(["lib", "install", key]) - assert run_command(["lib", "uninstall", key]) - result = run_command(["lib", "list", "--format", "json"]) - assert result.ok - assert len(json.loads(result.stdout)) == 0 - - def test_lib_ops_caseinsensitive(run_command): """ This test is supposed to (un)install the following library, From fc1f3d8292ec1b3326f8b5e2789f4e953d175075 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 3 Nov 2022 15:02:54 +0100 Subject: [PATCH 02/12] Migrate TestLibOpsCaseInsensitive from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 28 ++++++++++++++++++++++++ test/test_lib.py | 24 -------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 8fd87862ed8..a1421ac2f10 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -690,3 +690,31 @@ func TestUninstallSpaces(t *testing.T) { require.NoError(t, err) requirejson.Len(t, stdout, 0) } + +func TestLibOpsCaseInsensitive(t *testing.T) { + /*This test is supposed to (un)install the following library, + As you can see the name is all caps: + + Name: "PCM" + Author: David Mellis , Michael Smith + Maintainer: David Mellis + Sentence: Playback of short audio samples. + Paragraph: These samples are encoded directly in the Arduino sketch as an array of numbers. + Website: http://highlowtech.org/?p=1963 + Category: Signal Input/Output + Architecture: avr + Types: Contributed + Versions: [1.0.0]*/ + + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + key := "pcm" + _, _, err := cli.Run("lib", "install", key) + require.NoError(t, err) + _, _, err = cli.Run("lib", "uninstall", key) + require.NoError(t, err) + stdout, _, err := cli.Run("lib", "list", "--format", "json") + require.NoError(t, err) + requirejson.Len(t, stdout, 0) +} diff --git a/test/test_lib.py b/test/test_lib.py index 9a126399ce1..7f1093c336d 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,30 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_lib_ops_caseinsensitive(run_command): - """ - This test is supposed to (un)install the following library, - As you can see the name is all caps: - - Name: "PCM" - Author: David Mellis , Michael Smith - Maintainer: David Mellis - Sentence: Playback of short audio samples. - Paragraph: These samples are encoded directly in the Arduino sketch as an array of numbers. - Website: http://highlowtech.org/?p=1963 - Category: Signal Input/Output - Architecture: avr - Types: Contributed - Versions: [1.0.0] - """ - key = "pcm" - assert run_command(["lib", "install", key]) - assert run_command(["lib", "uninstall", key]) - result = run_command(["lib", "list", "--format", "json"]) - assert result.ok - assert len(json.loads(result.stdout)) == 0 - - def test_search(run_command): assert run_command(["update"]) From 307d50709355e659895aef3e513ba1097d0dc4c4 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Thu, 3 Nov 2022 16:13:02 +0100 Subject: [PATCH 03/12] Migrate TestSearch from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 46 +++++++++++++++++++++++ test/test_lib.py | 48 ------------------------ 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index a1421ac2f10..62aa69ef52e 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -17,6 +17,7 @@ package lib_test import ( "encoding/json" + "fmt" "io" "net/http" "strings" @@ -718,3 +719,48 @@ func TestLibOpsCaseInsensitive(t *testing.T) { require.NoError(t, err) requirejson.Len(t, stdout, 0) } + +func TestSearch(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + stdout, _, err := cli.Run("lib", "search", "--names") + require.NoError(t, err) + lines := strings.Split(strings.TrimSpace(string(stdout)), "\n") + var libs []string + for i, v := range lines { + lines[i] = strings.TrimSpace(v) + if strings.Contains(v, "Name:") { + libs = append(libs, strings.Trim(strings.SplitN(v, " ", 2)[1], "\"")) + } + } + + expected := []string{"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101", "WiFi101_Generic"} + require.Subset(t, libs, expected) + + stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json") + require.NoError(t, err) + requirejson.Query(t, stdout, ".libraries | length", fmt.Sprint(len(libs))) + + runSearch := func(args string, expectedLibs []string) { + stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json", args) + require.NoError(t, err) + libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String() + for _, l := range expectedLibs { + require.Contains(t, libraries, l) + } + } + runSearch("Arduino_MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("Arduino mkr iot carrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("mkr iot carrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("mkriotcarrier", []string{"Arduino_MKRIoTCarrier"}) + runSearch("dht", []string{"DHT sensor library", "DHT sensor library for ESPx", "DHT12", "SimpleDHT", "TinyDHT sensor library", "SDHT"}) + runSearch("dht11", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"}) + runSearch("dht12", []string{"DHT12", "DHT12 sensor library", "SDHT"}) + runSearch("dht22", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"}) + runSearch("dht sensor", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"}) + runSearch("sensor dht", []string{}) + runSearch("arduino json", []string{"ArduinoJson", "Arduino_JSON"}) + runSearch("arduinojson", []string{"ArduinoJson"}) + runSearch("json", []string{"ArduinoJson", "Arduino_JSON"}) +} diff --git a/test/test_lib.py b/test/test_lib.py index 7f1093c336d..49e19930cb1 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,54 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_search(run_command): - assert run_command(["update"]) - - result = run_command(["lib", "search", "--names"]) - assert result.ok - lines = [l.strip() for l in result.stdout.strip().splitlines()] - assert "Downloading index: library_index.tar.bz2 downloaded" in lines - libs = [l[6:].strip('"') for l in lines if "Name:" in l] - - expected = {"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101", "WiFi101_Generic"} - assert expected == {lib for lib in libs if "WiFi101" in lib} - - result = run_command(["lib", "search", "--names", "--format", "json"]) - assert result.ok - libs_json = json.loads(result.stdout) - assert len(libs) == len(libs_json.get("libraries")) - - result = run_command(["lib", "search", "--names"]) - assert result.ok - - def run_search(search_args, expected_libraries): - res = run_command(["lib", "search", "--names", "--format", "json"] + search_args.split(" ")) - assert res.ok - data = json.loads(res.stdout) - libraries = [l["name"] for l in data["libraries"]] - for l in expected_libraries: - assert l in libraries - - run_search("Arduino_MKRIoTCarrier", ["Arduino_MKRIoTCarrier"]) - run_search("Arduino mkr iot carrier", ["Arduino_MKRIoTCarrier"]) - run_search("mkr iot carrier", ["Arduino_MKRIoTCarrier"]) - run_search("mkriotcarrier", ["Arduino_MKRIoTCarrier"]) - - run_search( - "dht", - ["DHT sensor library", "DHT sensor library for ESPx", "DHT12", "SimpleDHT", "TinyDHT sensor library", "SDHT"], - ) - run_search("dht11", ["DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"]) - run_search("dht12", ["DHT12", "DHT12 sensor library", "SDHT"]) - run_search("dht22", ["DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"]) - run_search("dht sensor", ["DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"]) - run_search("sensor dht", []) - - run_search("arduino json", ["ArduinoJson", "Arduino_JSON"]) - run_search("arduinojson", ["ArduinoJson"]) - run_search("json", ["ArduinoJson", "Arduino_JSON"]) - - def test_search_paragraph(run_command): """ Search for a string that's only present in the `paragraph` field From a347d4e979208c690d1b7d9ae5370eb2e858a6c5 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 09:08:24 +0100 Subject: [PATCH 04/12] Migrate TestSearchParagraph from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 19 +++++++++++++++++++ test/test_lib.py | 13 ------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 62aa69ef52e..65c01c4e910 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -764,3 +764,22 @@ func TestSearch(t *testing.T) { runSearch("arduinojson", []string{"ArduinoJson"}) runSearch("json", []string{"ArduinoJson", "Arduino_JSON"}) } + +func TestSearchParagraph(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Search for a string that's only present in the `paragraph` field + // within the index file. + _, _, err := cli.Run("lib", "update-index") + require.NoError(t, err) + stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--format", "json") + require.NoError(t, err) + requirejson.Contains(t, stdout, `{ + "libraries": [ + { + "name": "ArduinoJson" + } + ] + }`) +} diff --git a/test/test_lib.py b/test/test_lib.py index 49e19930cb1..73ad5fe7f03 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,19 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_search_paragraph(run_command): - """ - Search for a string that's only present in the `paragraph` field - within the index file. - """ - assert run_command(["lib", "update-index"]) - result = run_command(["lib", "search", "A simple and efficient JSON library", "--names", "--format", "json"]) - assert result.ok - data = json.loads(result.stdout) - libraries = [l["name"] for l in data["libraries"]] - assert "ArduinoJson" in libraries - - def test_lib_list_with_updatable_flag(run_command): # Init the environment explicitly run_command(["lib", "update-index"]) From 8c0db3601a28cedccde16512bca9a6b280c4b0e1 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 09:34:36 +0100 Subject: [PATCH 05/12] Migrate TestLibListWithUpdatableFlag from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 54 ++++++++++++++++++++++++ test/test_lib.py | 47 --------------------- 2 files changed, 54 insertions(+), 47 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 65c01c4e910..666e0f49740 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -783,3 +783,57 @@ func TestSearchParagraph(t *testing.T) { ] }`) } + +func TestLibListWithUpdatableFlag(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Init the environment explicitly + _, _, err := cli.Run("lib", "update-index") + require.NoError(t, err) + + // No libraries to update + stdout, stderr, err := cli.Run("lib", "list", "--updatable") + require.NoError(t, err) + require.Empty(t, stderr) + require.Contains(t, string(stdout), "No libraries update is available.") + // No library to update in json + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + require.NoError(t, err) + require.Empty(t, stderr) + requirejson.Empty(t, stdout) + + // Install outdated library + _, _, err = cli.Run("lib", "install", "ArduinoJson@6.11.0") + require.NoError(t, err) + // Install latest version of library + _, _, err = cli.Run("lib", "install", "WiFi101") + require.NoError(t, err) + + stdout, stderr, err = cli.Run("lib", "list", "--updatable") + require.NoError(t, err) + require.Empty(t, stderr) + var lines [][]string + for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") { + v = strings.Join(strings.Fields(v), " ") + lines = append(lines, strings.SplitN(v, " ", 5)) + } + require.Len(t, lines, 2) + require.Subset(t, lines[0], []string{"Name", "Installed", "Available", "Location", "Description"}) + require.Equal(t, "ArduinoJson", lines[1][0]) + require.Equal(t, "6.11.0", lines[1][1]) + // Verifies available version is not equal to installed one and not empty + require.NotEqual(t, "6.11.0", lines[1][2]) + require.NotEmpty(t, lines[1][2]) + require.Equal(t, "An efficient and elegant JSON library...", lines[1][4]) + + // Look at the JSON output + stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json") + require.NoError(t, err) + require.Empty(t, stderr) + requirejson.Len(t, stdout, 1) + // be sure data contains the available version + requirejson.Query(t, stdout, `.[0] | .library | .version`, `"6.11.0"`) + requirejson.Query(t, stdout, `.[0] | .release | .version != "6.11.0"`, `true`) + requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, `true`) +} diff --git a/test/test_lib.py b/test/test_lib.py index 73ad5fe7f03..61f993b2770 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,53 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_lib_list_with_updatable_flag(run_command): - # Init the environment explicitly - run_command(["lib", "update-index"]) - - # No libraries to update - result = run_command(["lib", "list", "--updatable"]) - assert result.ok - assert "" == result.stderr - assert "No libraries update is available." in result.stdout.strip() - # No library to update in json - result = run_command(["lib", "list", "--updatable", "--format", "json"]) - assert result.ok - assert "" == result.stderr - assert 0 == len(json.loads(result.stdout)) - - # Install outdated library - assert run_command(["lib", "install", "ArduinoJson@6.11.0"]) - # Install latest version of library - assert run_command(["lib", "install", "WiFi101"]) - - res = run_command(["lib", "list", "--updatable"]) - assert res.ok - assert "" == res.stderr - # lines = res.stdout.strip().splitlines() - lines = [l.strip().split(maxsplit=4) for l in res.stdout.strip().splitlines()] - assert 2 == len(lines) - assert ["Name", "Installed", "Available", "Location", "Description"] in lines - line = lines[1] - assert "ArduinoJson" == line[0] - assert "6.11.0" == line[1] - # Verifies available version is not equal to installed one and not empty - assert "6.11.0" != line[2] - assert "" != line[2] - assert "An efficient and elegant JSON library..." == line[4] - - # Look at the JSON output - res = run_command(["lib", "list", "--updatable", "--format", "json"], hide=True) - assert res.ok - assert "" == res.stderr - data = json.loads(res.stdout) - assert 1 == len(data) - # be sure data contains the available version - assert "6.11.0" == data[0]["library"]["version"] - assert "6.11.0" != data[0]["release"]["version"] - assert "" != data[0]["release"]["version"] - - def test_install_with_git_url_from_current_directory(run_command, downloads_dir, data_dir): assert run_command(["update"]) From 7d0293489a02c507d0d550c0e03a5666b8b1a67c Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 10:17:29 +0100 Subject: [PATCH 06/12] Migrate TestInstallWithGitUrlFromCurrentDirectory from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 31 ++++++++++++++++++++++++ test/test_lib.py | 25 ------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 666e0f49740..0f32e12c2a7 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -27,6 +27,7 @@ import ( "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/require" "go.bug.st/testifyjson/requirejson" + "gopkg.in/src-d/go-git.v4" ) func TestLibUpgradeCommand(t *testing.T) { @@ -837,3 +838,33 @@ func TestLibListWithUpdatableFlag(t *testing.T) { requirejson.Query(t, stdout, `.[0] | .release | .version != "6.11.0"`, `true`) requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, `true`) } + +func TestInstallWithGitUrlFromCurrentDirectory(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + envVar := cli.GetDefaultEnv() + envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true" + + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") + // Verifies library is not installed + require.NoDirExists(t, libInstallDir.String()) + + // Clone repository locally + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + repoDir := cli.SketchbookDir().Join("WiFi101") + _, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{ + URL: gitUrl, + }) + require.NoError(t, err) + + cli.SetWorkingDir(repoDir) + _, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", ".") + require.NoError(t, err) + + // Verifies library is installed to correct folder + require.DirExists(t, libInstallDir.String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 61f993b2770..40551a49af5 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -146,31 +146,6 @@ def test_install_with_zip_path(run_command, data_dir, downloads_dir): assert lib_install_dir / "README.adoc" in files -def test_install_with_git_url_from_current_directory(run_command, downloads_dir, data_dir): - assert run_command(["update"]) - - env = { - "ARDUINO_DATA_DIR": data_dir, - "ARDUINO_DOWNLOADS_DIR": downloads_dir, - "ARDUINO_SKETCHBOOK_DIR": data_dir, - "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", - } - - lib_install_dir = Path(data_dir, "libraries", "WiFi101") - # Verifies library is not installed - assert not lib_install_dir.exists() - - # Clone repository locally - git_url = "https://github.com/arduino-libraries/WiFi101.git" - repo_dir = Path(data_dir, "WiFi101") - assert Repo.clone_from(git_url, repo_dir) - - assert run_command(["lib", "install", "--git-url", "."], custom_working_dir=repo_dir, custom_env=env) - - # Verifies library is installed to correct folder - assert lib_install_dir.exists() - - @pytest.mark.skipif( platform.system() == "Windows", reason="Using a file uri as git url doesn't work on Windows, " From bcdb302aaca55ac9982561566957794ad59ea882 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 10:37:05 +0100 Subject: [PATCH 07/12] Migrate TestInstallWithGitLocalUrl from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 29 ++++++++++++++++++++++++ test/test_lib.py | 25 -------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 0f32e12c2a7..4822c7468ae 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -868,3 +868,32 @@ func TestInstallWithGitUrlFromCurrentDirectory(t *testing.T) { // Verifies library is installed to correct folder require.DirExists(t, libInstallDir.String()) } + +func TestInstallWithGitLocalUrl(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + envVar := cli.GetDefaultEnv() + envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true" + + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") + // Verifies library is not installed + require.NoDirExists(t, libInstallDir.String()) + + // Clone repository locally + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + repoDir := cli.SketchbookDir().Join("WiFi101") + _, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{ + URL: gitUrl, + }) + require.NoError(t, err) + + _, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", repoDir.String()) + require.NoError(t, err) + + // Verifies library is installed + require.DirExists(t, libInstallDir.String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 40551a49af5..3196b4d9961 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -176,31 +176,6 @@ def test_install_with_git_url_local_file_uri(run_command, downloads_dir, data_di assert lib_install_dir.exists() -def test_install_with_git_local_url(run_command, downloads_dir, data_dir): - assert run_command(["update"]) - - env = { - "ARDUINO_DATA_DIR": data_dir, - "ARDUINO_DOWNLOADS_DIR": downloads_dir, - "ARDUINO_SKETCHBOOK_DIR": data_dir, - "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", - } - - lib_install_dir = Path(data_dir, "libraries", "WiFi101") - # Verifies library is not installed - assert not lib_install_dir.exists() - - # Clone repository locally - git_url = "https://github.com/arduino-libraries/WiFi101.git" - repo_dir = Path(data_dir, "WiFi101") - assert Repo.clone_from(git_url, repo_dir) - - assert run_command(["lib", "install", "--git-url", repo_dir], custom_env=env) - - # Verifies library is installed - assert lib_install_dir.exists() - - def test_install_with_git_url_relative_path(run_command, downloads_dir, data_dir): assert run_command(["update"]) From 033a2dd3027abe767bc65fec82aea5ef49703600 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 10:40:52 +0100 Subject: [PATCH 08/12] Migrate TestInstallWithGitUrlRelativePath from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 30 ++++++++++++++++++++++++ test/test_lib.py | 25 -------------------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 4822c7468ae..10d8220bd16 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -897,3 +897,33 @@ func TestInstallWithGitLocalUrl(t *testing.T) { // Verifies library is installed require.DirExists(t, libInstallDir.String()) } + +func TestInstallWithGitUrlRelativePath(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + envVar := cli.GetDefaultEnv() + envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true" + + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") + // Verifies library is not installed + require.NoDirExists(t, libInstallDir.String()) + + // Clone repository locally + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + repoDir := cli.SketchbookDir().Join("WiFi101") + _, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{ + URL: gitUrl, + }) + require.NoError(t, err) + + cli.SetWorkingDir(cli.SketchbookDir()) + _, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", "./WiFi101") + require.NoError(t, err) + + // Verifies library is installed + require.DirExists(t, libInstallDir.String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 3196b4d9961..73d081e81d2 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -176,31 +176,6 @@ def test_install_with_git_url_local_file_uri(run_command, downloads_dir, data_di assert lib_install_dir.exists() -def test_install_with_git_url_relative_path(run_command, downloads_dir, data_dir): - assert run_command(["update"]) - - env = { - "ARDUINO_DATA_DIR": data_dir, - "ARDUINO_DOWNLOADS_DIR": downloads_dir, - "ARDUINO_SKETCHBOOK_DIR": data_dir, - "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", - } - - lib_install_dir = Path(data_dir, "libraries", "WiFi101") - # Verifies library is not installed - assert not lib_install_dir.exists() - - # Clone repository locally - git_url = "https://github.com/arduino-libraries/WiFi101.git" - repo_dir = Path(data_dir, "WiFi101") - assert Repo.clone_from(git_url, repo_dir) - - assert run_command(["lib", "install", "--git-url", "./WiFi101"], custom_working_dir=data_dir, custom_env=env) - - # Verifies library is installed - assert lib_install_dir.exists() - - def test_install_with_git_url_does_not_create_git_repo(run_command, downloads_dir, data_dir): assert run_command(["update"]) From 2e8b1f7daa08761e5b409d6804afb8ea194c24f4 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 11:02:05 +0100 Subject: [PATCH 09/12] Migrate TestInstallWithGitUrlDoesNotCreateGitRepo from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 29 ++++++++++++++++++++++++ test/test_lib.py | 25 -------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 10d8220bd16..11305de6a6a 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -927,3 +927,32 @@ func TestInstallWithGitUrlRelativePath(t *testing.T) { // Verifies library is installed require.DirExists(t, libInstallDir.String()) } + +func TestInstallWithGitUrlDoesNotCreateGitRepo(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + envVar := cli.GetDefaultEnv() + envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true" + + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") + // Verifies library is not installed + require.NoDirExists(t, libInstallDir.String()) + + // Clone repository locally + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + repoDir := cli.SketchbookDir().Join("WiFi101") + _, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{ + URL: gitUrl, + }) + require.NoError(t, err) + + _, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", repoDir.String()) + require.NoError(t, err) + + // Verifies installed library is not a git repository + require.NoDirExists(t, libInstallDir.Join(".git").String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 73d081e81d2..3690bdc921c 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -176,31 +176,6 @@ def test_install_with_git_url_local_file_uri(run_command, downloads_dir, data_di assert lib_install_dir.exists() -def test_install_with_git_url_does_not_create_git_repo(run_command, downloads_dir, data_dir): - assert run_command(["update"]) - - env = { - "ARDUINO_DATA_DIR": data_dir, - "ARDUINO_DOWNLOADS_DIR": downloads_dir, - "ARDUINO_SKETCHBOOK_DIR": data_dir, - "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", - } - - lib_install_dir = Path(data_dir, "libraries", "WiFi101") - # Verifies library is not installed - assert not lib_install_dir.exists() - - # Clone repository locally - git_url = "https://github.com/arduino-libraries/WiFi101.git" - repo_dir = Path(data_dir, "WiFi101") - assert Repo.clone_from(git_url, repo_dir) - - assert run_command(["lib", "install", "--git-url", repo_dir], custom_env=env) - - # Verifies installed library is not a git repository - assert not Path(lib_install_dir, ".git").exists() - - def test_install_with_git_url_multiple_libraries(run_command, downloads_dir, data_dir): assert run_command(["update"]) From 1f0f318ab87ad37a8b4bffd3fbf59c2e3473accc Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 11:06:01 +0100 Subject: [PATCH 10/12] Migrate TestInstallWithGitUrlMultipleLibraries from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 27 ++++++++++++++++++++++++ test/test_lib.py | 26 ----------------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 11305de6a6a..1dd816b030b 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -956,3 +956,30 @@ func TestInstallWithGitUrlDoesNotCreateGitRepo(t *testing.T) { // Verifies installed library is not a git repository require.NoDirExists(t, libInstallDir.Join(".git").String()) } + +func TestInstallWithGitUrlMultipleLibraries(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + envVar := cli.GetDefaultEnv() + envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true" + + wifiInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") + bleInstallDir := cli.SketchbookDir().Join("libraries", "ArduinoBLE") + // Verifies library are not installed + require.NoDirExists(t, wifiInstallDir.String()) + require.NoDirExists(t, bleInstallDir.String()) + + wifiUrl := "https://github.com/arduino-libraries/WiFi101.git" + bleUrl := "https://github.com/arduino-libraries/ArduinoBLE.git" + + _, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", wifiUrl, bleUrl) + require.NoError(t, err) + + // Verifies library are installed + require.DirExists(t, wifiInstallDir.String()) + require.DirExists(t, bleInstallDir.String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 3690bdc921c..8c16222006a 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -176,32 +176,6 @@ def test_install_with_git_url_local_file_uri(run_command, downloads_dir, data_di assert lib_install_dir.exists() -def test_install_with_git_url_multiple_libraries(run_command, downloads_dir, data_dir): - assert run_command(["update"]) - - env = { - "ARDUINO_DATA_DIR": data_dir, - "ARDUINO_DOWNLOADS_DIR": downloads_dir, - "ARDUINO_SKETCHBOOK_DIR": data_dir, - "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", - } - - wifi_install_dir = Path(data_dir, "libraries", "WiFi101") - ble_install_dir = Path(data_dir, "libraries", "ArduinoBLE") - # Verifies libraries are not installed - assert not wifi_install_dir.exists() - assert not ble_install_dir.exists() - - wifi_url = "https://github.com/arduino-libraries/WiFi101.git" - ble_url = "https://github.com/arduino-libraries/ArduinoBLE.git" - - assert run_command(["lib", "install", "--git-url", wifi_url, ble_url], custom_env=env) - - # Verifies library are installed - assert wifi_install_dir.exists() - assert ble_install_dir.exists() - - def test_install_with_zip_path_multiple_libraries(run_command, downloads_dir, data_dir): assert run_command(["update"]) From 2f1e5bfc5c998a84cf6597e81662beadd522bbc6 Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 12:16:23 +0100 Subject: [PATCH 11/12] Migrate TestLibExamples from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 20 ++++++++++++++++++++ test/test_lib.py | 16 ---------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 1dd816b030b..1ac1750ba56 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -983,3 +983,23 @@ func TestInstallWithGitUrlMultipleLibraries(t *testing.T) { require.DirExists(t, wifiInstallDir.String()) require.DirExists(t, bleInstallDir.String()) } + +func TestLibExamples(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + _, _, err = cli.Run("lib", "install", "Arduino_JSON@0.1.0") + require.NoError(t, err) + + stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--format", "json") + require.NoError(t, err) + requirejson.Len(t, stdout, 1) + examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + examples = strings.ReplaceAll(examples, "\\\\", "\\") + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONArray").String()) + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONKitchenSink").String()) + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONObject").String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 8c16222006a..0c707b7a30f 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -206,22 +206,6 @@ def test_install_with_zip_path_multiple_libraries(run_command, downloads_dir, da assert ble_install_dir.exists() -def test_lib_examples(run_command, data_dir): - assert run_command(["update"]) - - assert run_command(["lib", "install", "Arduino_JSON@0.1.0"]) - - res = run_command(["lib", "examples", "Arduino_JSON", "--format", "json"]) - assert res.ok - data = json.loads(res.stdout) - assert len(data) == 1 - examples = data[0]["examples"] - - assert str(Path(data_dir, "libraries", "Arduino_JSON", "examples", "JSONArray")) in examples - assert str(Path(data_dir, "libraries", "Arduino_JSON", "examples", "JSONKitchenSink")) in examples - assert str(Path(data_dir, "libraries", "Arduino_JSON", "examples", "JSONObject")) in examples - - def test_lib_examples_with_pde_file(run_command, data_dir): assert run_command(["update"]) From 8abfc7d912cc3a0c745cbba366aa60bb6fdec41b Mon Sep 17 00:00:00 2001 From: Matteo Pologruto Date: Fri, 4 Nov 2022 12:23:21 +0100 Subject: [PATCH 12/12] Migrate TestLibExamplesWithPdeFile from test_lib.py to lib_test.go --- internal/integrationtest/lib/lib_test.go | 21 +++++++++++++++++++++ test/test_lib.py | 17 ----------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index 1ac1750ba56..a09220d04a1 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -1003,3 +1003,24 @@ func TestLibExamples(t *testing.T) { require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONKitchenSink").String()) require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONObject").String()) } + +func TestLibExamplesWithPdeFile(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + _, _, err = cli.Run("lib", "install", "Encoder@1.4.1") + require.NoError(t, err) + + stdout, _, err := cli.Run("lib", "examples", "Encoder", "--format", "json") + require.NoError(t, err) + requirejson.Len(t, stdout, 1) + examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String() + examples = strings.ReplaceAll(examples, "\\\\", "\\") + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "Basic").String()) + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "NoInterrupts").String()) + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "SpeedTest").String()) + require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "TwoKnobs").String()) +} diff --git a/test/test_lib.py b/test/test_lib.py index 0c707b7a30f..8446ea1dbe5 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -206,23 +206,6 @@ def test_install_with_zip_path_multiple_libraries(run_command, downloads_dir, da assert ble_install_dir.exists() -def test_lib_examples_with_pde_file(run_command, data_dir): - assert run_command(["update"]) - - assert run_command(["lib", "install", "Encoder@1.4.1"]) - - res = run_command(["lib", "examples", "Encoder", "--format", "json"]) - assert res.ok - data = json.loads(res.stdout) - assert len(data) == 1 - examples = data[0]["examples"] - - assert str(Path(data_dir, "libraries", "Encoder", "examples", "Basic")) in examples - assert str(Path(data_dir, "libraries", "Encoder", "examples", "NoInterrupts")) in examples - assert str(Path(data_dir, "libraries", "Encoder", "examples", "SpeedTest")) in examples - assert str(Path(data_dir, "libraries", "Encoder", "examples", "TwoKnobs")) in examples - - def test_lib_examples_with_case_mismatch(run_command, data_dir): assert run_command(["update"])