Skip to content

Commit 53a2768

Browse files
[skip-changelog] Migrate lib_test.py to test_lib.go part two (#1999)
* Migrate TestUninstallSpaces from test_lib.py to lib_test.go * Migrate TestLibOpsCaseInsensitive from test_lib.py to lib_test.go * Migrate TestSearch from test_lib.py to lib_test.go * Migrate TestSearchParagraph from test_lib.py to lib_test.go * Migrate TestLibListWithUpdatableFlag from test_lib.py to lib_test.go * Migrate TestInstallWithGitUrlFromCurrentDirectory from test_lib.py to lib_test.go * Migrate TestInstallWithGitLocalUrl from test_lib.py to lib_test.go * Migrate TestInstallWithGitUrlRelativePath from test_lib.py to lib_test.go * Migrate TestInstallWithGitUrlDoesNotCreateGitRepo from test_lib.py to lib_test.go * Migrate TestInstallWithGitUrlMultipleLibraries from test_lib.py to lib_test.go * Migrate TestLibExamples from test_lib.py to lib_test.go * Migrate TestLibExamplesWithPdeFile from test_lib.py to lib_test.go
1 parent f79974b commit 53a2768

File tree

2 files changed

+348
-300
lines changed

2 files changed

+348
-300
lines changed

internal/integrationtest/lib/lib_test.go

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package lib_test
1717

1818
import (
1919
"encoding/json"
20+
"fmt"
2021
"io"
2122
"net/http"
2223
"strings"
@@ -26,6 +27,7 @@ import (
2627
"github.com/arduino/go-paths-helper"
2728
"github.com/stretchr/testify/require"
2829
"go.bug.st/testifyjson/requirejson"
30+
"gopkg.in/src-d/go-git.v4"
2931
)
3032

3133
func TestLibUpgradeCommand(t *testing.T) {
@@ -676,3 +678,349 @@ func TestUninstall(t *testing.T) {
676678
_, _, err = cli.Run("lib", "uninstall", libs[0], libs[1])
677679
require.NoError(t, err)
678680
}
681+
682+
func TestUninstallSpaces(t *testing.T) {
683+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
684+
defer env.CleanUp()
685+
686+
key := "LiquidCrystal I2C"
687+
_, _, err := cli.Run("lib", "install", key)
688+
require.NoError(t, err)
689+
_, _, err = cli.Run("lib", "uninstall", key)
690+
require.NoError(t, err)
691+
stdout, _, err := cli.Run("lib", "list", "--format", "json")
692+
require.NoError(t, err)
693+
requirejson.Len(t, stdout, 0)
694+
}
695+
696+
func TestLibOpsCaseInsensitive(t *testing.T) {
697+
/*This test is supposed to (un)install the following library,
698+
As you can see the name is all caps:
699+
700+
Name: "PCM"
701+
Author: David Mellis <[email protected]>, Michael Smith <[email protected]>
702+
Maintainer: David Mellis <[email protected]>
703+
Sentence: Playback of short audio samples.
704+
Paragraph: These samples are encoded directly in the Arduino sketch as an array of numbers.
705+
Website: http://highlowtech.org/?p=1963
706+
Category: Signal Input/Output
707+
Architecture: avr
708+
Types: Contributed
709+
Versions: [1.0.0]*/
710+
711+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
712+
defer env.CleanUp()
713+
714+
key := "pcm"
715+
_, _, err := cli.Run("lib", "install", key)
716+
require.NoError(t, err)
717+
_, _, err = cli.Run("lib", "uninstall", key)
718+
require.NoError(t, err)
719+
stdout, _, err := cli.Run("lib", "list", "--format", "json")
720+
require.NoError(t, err)
721+
requirejson.Len(t, stdout, 0)
722+
}
723+
724+
func TestSearch(t *testing.T) {
725+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
726+
defer env.CleanUp()
727+
728+
stdout, _, err := cli.Run("lib", "search", "--names")
729+
require.NoError(t, err)
730+
lines := strings.Split(strings.TrimSpace(string(stdout)), "\n")
731+
var libs []string
732+
for i, v := range lines {
733+
lines[i] = strings.TrimSpace(v)
734+
if strings.Contains(v, "Name:") {
735+
libs = append(libs, strings.Trim(strings.SplitN(v, " ", 2)[1], "\""))
736+
}
737+
}
738+
739+
expected := []string{"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101", "WiFi101_Generic"}
740+
require.Subset(t, libs, expected)
741+
742+
stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json")
743+
require.NoError(t, err)
744+
requirejson.Query(t, stdout, ".libraries | length", fmt.Sprint(len(libs)))
745+
746+
runSearch := func(args string, expectedLibs []string) {
747+
stdout, _, err = cli.Run("lib", "search", "--names", "--format", "json", args)
748+
require.NoError(t, err)
749+
libraries := requirejson.Parse(t, stdout).Query("[ .libraries | .[] | .name ]").String()
750+
for _, l := range expectedLibs {
751+
require.Contains(t, libraries, l)
752+
}
753+
}
754+
runSearch("Arduino_MKRIoTCarrier", []string{"Arduino_MKRIoTCarrier"})
755+
runSearch("Arduino mkr iot carrier", []string{"Arduino_MKRIoTCarrier"})
756+
runSearch("mkr iot carrier", []string{"Arduino_MKRIoTCarrier"})
757+
runSearch("mkriotcarrier", []string{"Arduino_MKRIoTCarrier"})
758+
runSearch("dht", []string{"DHT sensor library", "DHT sensor library for ESPx", "DHT12", "SimpleDHT", "TinyDHT sensor library", "SDHT"})
759+
runSearch("dht11", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"})
760+
runSearch("dht12", []string{"DHT12", "DHT12 sensor library", "SDHT"})
761+
runSearch("dht22", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"})
762+
runSearch("dht sensor", []string{"DHT sensor library", "DHT sensor library for ESPx", "SimpleDHT", "SDHT"})
763+
runSearch("sensor dht", []string{})
764+
runSearch("arduino json", []string{"ArduinoJson", "Arduino_JSON"})
765+
runSearch("arduinojson", []string{"ArduinoJson"})
766+
runSearch("json", []string{"ArduinoJson", "Arduino_JSON"})
767+
}
768+
769+
func TestSearchParagraph(t *testing.T) {
770+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
771+
defer env.CleanUp()
772+
773+
// Search for a string that's only present in the `paragraph` field
774+
// within the index file.
775+
_, _, err := cli.Run("lib", "update-index")
776+
require.NoError(t, err)
777+
stdout, _, err := cli.Run("lib", "search", "A simple and efficient JSON library", "--names", "--format", "json")
778+
require.NoError(t, err)
779+
requirejson.Contains(t, stdout, `{
780+
"libraries": [
781+
{
782+
"name": "ArduinoJson"
783+
}
784+
]
785+
}`)
786+
}
787+
788+
func TestLibListWithUpdatableFlag(t *testing.T) {
789+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
790+
defer env.CleanUp()
791+
792+
// Init the environment explicitly
793+
_, _, err := cli.Run("lib", "update-index")
794+
require.NoError(t, err)
795+
796+
// No libraries to update
797+
stdout, stderr, err := cli.Run("lib", "list", "--updatable")
798+
require.NoError(t, err)
799+
require.Empty(t, stderr)
800+
require.Contains(t, string(stdout), "No libraries update is available.")
801+
// No library to update in json
802+
stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json")
803+
require.NoError(t, err)
804+
require.Empty(t, stderr)
805+
requirejson.Empty(t, stdout)
806+
807+
// Install outdated library
808+
_, _, err = cli.Run("lib", "install", "[email protected]")
809+
require.NoError(t, err)
810+
// Install latest version of library
811+
_, _, err = cli.Run("lib", "install", "WiFi101")
812+
require.NoError(t, err)
813+
814+
stdout, stderr, err = cli.Run("lib", "list", "--updatable")
815+
require.NoError(t, err)
816+
require.Empty(t, stderr)
817+
var lines [][]string
818+
for _, v := range strings.Split(strings.TrimSpace(string(stdout)), "\n") {
819+
v = strings.Join(strings.Fields(v), " ")
820+
lines = append(lines, strings.SplitN(v, " ", 5))
821+
}
822+
require.Len(t, lines, 2)
823+
require.Subset(t, lines[0], []string{"Name", "Installed", "Available", "Location", "Description"})
824+
require.Equal(t, "ArduinoJson", lines[1][0])
825+
require.Equal(t, "6.11.0", lines[1][1])
826+
// Verifies available version is not equal to installed one and not empty
827+
require.NotEqual(t, "6.11.0", lines[1][2])
828+
require.NotEmpty(t, lines[1][2])
829+
require.Equal(t, "An efficient and elegant JSON library...", lines[1][4])
830+
831+
// Look at the JSON output
832+
stdout, stderr, err = cli.Run("lib", "list", "--updatable", "--format", "json")
833+
require.NoError(t, err)
834+
require.Empty(t, stderr)
835+
requirejson.Len(t, stdout, 1)
836+
// be sure data contains the available version
837+
requirejson.Query(t, stdout, `.[0] | .library | .version`, `"6.11.0"`)
838+
requirejson.Query(t, stdout, `.[0] | .release | .version != "6.11.0"`, `true`)
839+
requirejson.Query(t, stdout, `.[0] | .release | .version != ""`, `true`)
840+
}
841+
842+
func TestInstallWithGitUrlFromCurrentDirectory(t *testing.T) {
843+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
844+
defer env.CleanUp()
845+
846+
_, _, err := cli.Run("update")
847+
require.NoError(t, err)
848+
849+
envVar := cli.GetDefaultEnv()
850+
envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true"
851+
852+
libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101")
853+
// Verifies library is not installed
854+
require.NoDirExists(t, libInstallDir.String())
855+
856+
// Clone repository locally
857+
gitUrl := "https://github.com/arduino-libraries/WiFi101.git"
858+
repoDir := cli.SketchbookDir().Join("WiFi101")
859+
_, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{
860+
URL: gitUrl,
861+
})
862+
require.NoError(t, err)
863+
864+
cli.SetWorkingDir(repoDir)
865+
_, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", ".")
866+
require.NoError(t, err)
867+
868+
// Verifies library is installed to correct folder
869+
require.DirExists(t, libInstallDir.String())
870+
}
871+
872+
func TestInstallWithGitLocalUrl(t *testing.T) {
873+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
874+
defer env.CleanUp()
875+
876+
_, _, err := cli.Run("update")
877+
require.NoError(t, err)
878+
879+
envVar := cli.GetDefaultEnv()
880+
envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true"
881+
882+
libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101")
883+
// Verifies library is not installed
884+
require.NoDirExists(t, libInstallDir.String())
885+
886+
// Clone repository locally
887+
gitUrl := "https://github.com/arduino-libraries/WiFi101.git"
888+
repoDir := cli.SketchbookDir().Join("WiFi101")
889+
_, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{
890+
URL: gitUrl,
891+
})
892+
require.NoError(t, err)
893+
894+
_, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", repoDir.String())
895+
require.NoError(t, err)
896+
897+
// Verifies library is installed
898+
require.DirExists(t, libInstallDir.String())
899+
}
900+
901+
func TestInstallWithGitUrlRelativePath(t *testing.T) {
902+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
903+
defer env.CleanUp()
904+
905+
_, _, err := cli.Run("update")
906+
require.NoError(t, err)
907+
908+
envVar := cli.GetDefaultEnv()
909+
envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true"
910+
911+
libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101")
912+
// Verifies library is not installed
913+
require.NoDirExists(t, libInstallDir.String())
914+
915+
// Clone repository locally
916+
gitUrl := "https://github.com/arduino-libraries/WiFi101.git"
917+
repoDir := cli.SketchbookDir().Join("WiFi101")
918+
_, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{
919+
URL: gitUrl,
920+
})
921+
require.NoError(t, err)
922+
923+
cli.SetWorkingDir(cli.SketchbookDir())
924+
_, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", "./WiFi101")
925+
require.NoError(t, err)
926+
927+
// Verifies library is installed
928+
require.DirExists(t, libInstallDir.String())
929+
}
930+
931+
func TestInstallWithGitUrlDoesNotCreateGitRepo(t *testing.T) {
932+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
933+
defer env.CleanUp()
934+
935+
_, _, err := cli.Run("update")
936+
require.NoError(t, err)
937+
938+
envVar := cli.GetDefaultEnv()
939+
envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true"
940+
941+
libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101")
942+
// Verifies library is not installed
943+
require.NoDirExists(t, libInstallDir.String())
944+
945+
// Clone repository locally
946+
gitUrl := "https://github.com/arduino-libraries/WiFi101.git"
947+
repoDir := cli.SketchbookDir().Join("WiFi101")
948+
_, err = git.PlainClone(repoDir.String(), false, &git.CloneOptions{
949+
URL: gitUrl,
950+
})
951+
require.NoError(t, err)
952+
953+
_, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", repoDir.String())
954+
require.NoError(t, err)
955+
956+
// Verifies installed library is not a git repository
957+
require.NoDirExists(t, libInstallDir.Join(".git").String())
958+
}
959+
960+
func TestInstallWithGitUrlMultipleLibraries(t *testing.T) {
961+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
962+
defer env.CleanUp()
963+
964+
_, _, err := cli.Run("update")
965+
require.NoError(t, err)
966+
967+
envVar := cli.GetDefaultEnv()
968+
envVar["ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL"] = "true"
969+
970+
wifiInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101")
971+
bleInstallDir := cli.SketchbookDir().Join("libraries", "ArduinoBLE")
972+
// Verifies library are not installed
973+
require.NoDirExists(t, wifiInstallDir.String())
974+
require.NoDirExists(t, bleInstallDir.String())
975+
976+
wifiUrl := "https://github.com/arduino-libraries/WiFi101.git"
977+
bleUrl := "https://github.com/arduino-libraries/ArduinoBLE.git"
978+
979+
_, _, err = cli.RunWithCustomEnv(envVar, "lib", "install", "--git-url", wifiUrl, bleUrl)
980+
require.NoError(t, err)
981+
982+
// Verifies library are installed
983+
require.DirExists(t, wifiInstallDir.String())
984+
require.DirExists(t, bleInstallDir.String())
985+
}
986+
987+
func TestLibExamples(t *testing.T) {
988+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
989+
defer env.CleanUp()
990+
991+
_, _, err := cli.Run("update")
992+
require.NoError(t, err)
993+
994+
_, _, err = cli.Run("lib", "install", "[email protected]")
995+
require.NoError(t, err)
996+
997+
stdout, _, err := cli.Run("lib", "examples", "Arduino_JSON", "--format", "json")
998+
require.NoError(t, err)
999+
requirejson.Len(t, stdout, 1)
1000+
examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String()
1001+
examples = strings.ReplaceAll(examples, "\\\\", "\\")
1002+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONArray").String())
1003+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONKitchenSink").String())
1004+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Arduino_JSON", "examples", "JSONObject").String())
1005+
}
1006+
1007+
func TestLibExamplesWithPdeFile(t *testing.T) {
1008+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
1009+
defer env.CleanUp()
1010+
1011+
_, _, err := cli.Run("update")
1012+
require.NoError(t, err)
1013+
1014+
_, _, err = cli.Run("lib", "install", "[email protected]")
1015+
require.NoError(t, err)
1016+
1017+
stdout, _, err := cli.Run("lib", "examples", "Encoder", "--format", "json")
1018+
require.NoError(t, err)
1019+
requirejson.Len(t, stdout, 1)
1020+
examples := requirejson.Parse(t, stdout).Query(".[0] | .examples").String()
1021+
examples = strings.ReplaceAll(examples, "\\\\", "\\")
1022+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "Basic").String())
1023+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "NoInterrupts").String())
1024+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "SpeedTest").String())
1025+
require.Contains(t, examples, cli.SketchbookDir().Join("libraries", "Encoder", "examples", "TwoKnobs").String())
1026+
}

0 commit comments

Comments
 (0)