forked from arduino/arduino-cli
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest_lib.py
174 lines (145 loc) · 6.34 KB
/
test_lib.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# 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 [email protected].
import simplejson as json
def test_list(run_command):
# Init the environment explicitly
assert run_command("core update-index")
# When output is empty, nothing is printed out, no matter the output format
result = run_command("lib list")
assert result.ok
assert "" == result.stderr
assert "No libraries installed." == result.stdout.strip()
result = run_command("lib list --format json")
assert result.ok
assert "" == result.stderr
assert 0 == len(json.loads(result.stdout))
# Install something we can list at a version older than latest
result = run_command("lib install [email protected]")
assert result.ok
# Look at the plain text output
result = run_command("lib list")
assert result.ok
assert "" == result.stderr
lines = result.stdout.strip().splitlines()
assert 2 == len(lines)
toks = [t.strip() for t in lines[1].split(maxsplit=4)]
# Verifies the expected number of field
assert 5 == len(toks)
# be sure line contain the current version AND the available version
assert "" != toks[1]
assert "" != toks[2]
# Verifies library sentence
assert "An efficient and elegant JSON library..." == toks[4]
# Look at the JSON output
result = run_command("lib list --format json")
assert result.ok
assert "" == result.stderr
data = json.loads(result.stdout)
assert 1 == len(data)
# be sure data contains the available version
assert "" != data[0]["release"]["version"]
# be sure data contains the correct provides_includes field
assert "ArduinoJson.h" == data[0]["library"]["provides_includes"][0]
assert "ArduinoJson.hpp" == data[0]["library"]["provides_includes"][1]
# Install something we can list without provides_includes field given in library.properties
result = run_command("lib install [email protected]")
assert result.ok
# Look at the JSON output
result = run_command("lib list Braccio --format json")
assert result.ok
assert "" == result.stderr
data = json.loads(result.stdout)
assert 1 == len(data)
# be sure data contains the correct provides_includes field
assert "Braccio.h" == data[0]["library"]["provides_includes"][0]
def test_install(run_command):
libs = ['"AzureIoTProtocol_MQTT"', '"CMMC MQTT Connector"', '"WiFiNINA"']
# Should be safe to run install multiple times
assert run_command("lib install {}".format(" ".join(libs)))
assert run_command("lib install {}".format(" ".join(libs)))
# Test failing-install of library with wrong dependency
# (https://github.com/arduino/arduino-cli/issues/534)
result = run_command("lib install [email protected]")
assert "Error resolving dependencies for [email protected]: dependency 'MD_MAX72xx' is not available" in result.stderr
def test_update_index(run_command):
result = run_command("lib update-index")
assert result.ok
assert "Updating index: library_index.json downloaded" == result.stdout.splitlines()[-1].strip()
def test_uninstall(run_command):
libs = ['"AzureIoTProtocol_MQTT"', '"WiFiNINA"']
assert run_command("lib install {}".format(" ".join(libs)))
result = run_command("lib uninstall {}".format(" ".join(libs)))
assert result.ok
def test_uninstall_spaces(run_command):
key = '"LiquidCrystal I2C"'
assert run_command("lib install {}".format(key))
assert run_command("lib uninstall {}".format(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,
As you can see the name is all caps:
Name: "PCM"
Author: David Mellis <[email protected]>, Michael Smith <[email protected]>
Maintainer: David Mellis <[email protected]>
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 {}".format(key))
assert run_command("lib uninstall {}".format(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("lib update-index")
result = run_command("lib search --names")
assert result.ok
out_lines = result.stdout.strip().splitlines()
# Create an array with just the name of the vars
libs = []
for line in out_lines:
start = line.find('"') + 1
libs.append(line[start:-1])
expected = {"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101"}
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")
assert result.ok
# Search for a specific target
result = run_command("lib search ArduinoJson --format json")
assert result.ok
libs_json = json.loads(result.stdout)
assert len(libs_json.get("libraries")) >= 1
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" --format json')
assert result.ok
libs_json = json.loads(result.stdout)
assert 1 == len(libs_json.get("libraries"))