Skip to content

Commit 707988e

Browse files
authored
[skip changelog] Add integration tests to avoid breaking compilation for esp cores (#1291)
1 parent 7fc8f7c commit 707988e

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

Diff for: test/test_compile.py

+80
Original file line numberDiff line numberDiff line change
@@ -1022,3 +1022,83 @@ def test_compile_with_invalid_build_options_json(run_command, data_dir):
10221022
f.write("invalid json")
10231023

10241024
assert run_command(f"compile -b {fqbn} {sketch_path} --verbose")
1025+
1026+
1027+
def test_compile_with_esp32_bundled_libraries(run_command, data_dir, copy_sketch):
1028+
# Some esp cores have have bundled libraries that are optimize for that architecture,
1029+
# it might happen that if the user has a library with the same name installed conflicts
1030+
# can ensue and the wrong library is used for compilation, thus it fails.
1031+
# This happens because for "historical" reasons these platform have their "name" key
1032+
# in the "library.properties" flag suffixed with "(esp32)" or similar even though that
1033+
# doesn't respect the libraries specification.
1034+
# https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format
1035+
#
1036+
# The reason those libraries have these suffixes is to avoid an annoying bug in the Java IDE
1037+
# that would have caused the libraries that are both bundled with the core and the Java IDE to be
1038+
# always marked as updatable. For more info see: https://github.com/arduino/Arduino/issues/4189
1039+
assert run_command("update")
1040+
1041+
# Update index with esp32 core and install it
1042+
url = "https://dl.espressif.com/dl/package_esp32_index.json"
1043+
core_version = "1.0.6"
1044+
assert run_command(f"core update-index --additional-urls={url}")
1045+
assert run_command(f"core install esp32:esp32@{core_version} --additional-urls={url}")
1046+
1047+
# Install a library with the same name as one bundled with the core
1048+
assert run_command("lib install SD")
1049+
1050+
sketch_path = copy_sketch("sketch_with_sd_library")
1051+
fqbn = "esp32:esp32:esp32"
1052+
1053+
res = run_command(f"compile -b {fqbn} {sketch_path} --verbose")
1054+
assert res.ok
1055+
1056+
core_bundled_lib_path = Path(data_dir, "packages", "esp32", "hardware", "esp32", core_version, "libraries", "SD")
1057+
cli_installed_lib_path = Path(data_dir, "libraries", "SD")
1058+
expected_output = [
1059+
'Multiple libraries were found for "SD.h"',
1060+
f" Used: {core_bundled_lib_path}",
1061+
f" Not used: {cli_installed_lib_path}",
1062+
]
1063+
assert "\n".join(expected_output) in res.stdout
1064+
1065+
1066+
def test_compile_with_esp8266_bundled_libraries(run_command, data_dir, copy_sketch):
1067+
# Some esp cores have have bundled libraries that are optimize for that architecture,
1068+
# it might happen that if the user has a library with the same name installed conflicts
1069+
# can ensue and the wrong library is used for compilation, thus it fails.
1070+
# This happens because for "historical" reasons these platform have their "name" key
1071+
# in the "library.properties" flag suffixed with "(esp32)" or similar even though that
1072+
# doesn't respect the libraries specification.
1073+
# https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format
1074+
#
1075+
# The reason those libraries have these suffixes is to avoid an annoying bug in the Java IDE
1076+
# that would have caused the libraries that are both bundled with the core and the Java IDE to be
1077+
# always marked as updatable. For more info see: https://github.com/arduino/Arduino/issues/4189
1078+
assert run_command("update")
1079+
1080+
# Update index with esp8266 core and install it
1081+
url = "http://arduino.esp8266.com/stable/package_esp8266com_index.json"
1082+
core_version = "2.7.4"
1083+
assert run_command(f"core update-index --additional-urls={url}")
1084+
assert run_command(f"core install esp8266:esp8266@{core_version} --additional-urls={url}")
1085+
1086+
# Install a library with the same name as one bundled with the core
1087+
assert run_command("lib install SD")
1088+
1089+
sketch_path = copy_sketch("sketch_with_sd_library")
1090+
fqbn = "esp8266:esp8266:generic"
1091+
1092+
res = run_command(f"compile -b {fqbn} {sketch_path} --verbose")
1093+
assert res.ok
1094+
1095+
core_bundled_lib_path = Path(
1096+
data_dir, "packages", "esp8266", "hardware", "esp8266", core_version, "libraries", "SD"
1097+
)
1098+
cli_installed_lib_path = Path(data_dir, "libraries", "SD")
1099+
expected_output = [
1100+
'Multiple libraries were found for "SD.h"',
1101+
f" Used: {core_bundled_lib_path}",
1102+
f" Not used: {cli_installed_lib_path}",
1103+
]
1104+
assert "\n".join(expected_output) in res.stdout
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
#include <SD.h>
3+
4+
void setup() {
5+
}
6+
7+
void loop() {
8+
}

0 commit comments

Comments
 (0)