Skip to content

Commit ccdc20d

Browse files
committed
Fix integration tests
1 parent 6685633 commit ccdc20d

File tree

1 file changed

+45
-13
lines changed

1 file changed

+45
-13
lines changed

test/test_upload_mock.py

+45-13
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
# a commercial license, send an email to license@arduino.cc.
1515

1616
import tempfile
17+
import sys
1718
import hashlib
1819
import pytest
1920
from pathlib import Path
21+
from dataclasses import dataclass
22+
from typing import Union
2023

2124

2225
def generate_build_dir(sketch_path):
@@ -26,13 +29,26 @@ def generate_build_dir(sketch_path):
2629
return build_dir.resolve()
2730

2831

32+
def generate_expected_output(
33+
output: str, upload_tools: Union[dict, str], data_dir: str, upload_port: str, build_dir: str, sketch_name: str
34+
) -> str:
35+
if isinstance(upload_tools, str):
36+
tool = upload_tools
37+
else:
38+
tool = upload_tools[sys.platform]
39+
return output.format(
40+
tool_executable=tool, data_dir=data_dir, upload_port=upload_port, build_dir=build_dir, sketch_name=sketch_name,
41+
).replace("\\", "/")
42+
43+
2944
testdata = [
3045
(
3146
"",
3247
"arduino:avr:uno",
3348
"arduino:avr@1.8.3",
3449
"/dev/ttyACM0",
35-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
50+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
51+
"{tool_executable} "
3652
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
3753
+ '-v -V -patmega328p -carduino "-P{upload_port}" -b115200 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
3854
),
@@ -41,7 +57,8 @@ def generate_build_dir(sketch_path):
4157
"arduino:avr:leonardo",
4258
"arduino:avr@1.8.3",
4359
"/dev/ttyACM999",
44-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
60+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
61+
"{tool_executable} "
4562
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
4663
+ '-v -V -patmega32u4 -cavr109 "-P{upload_port}0" -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
4764
),
@@ -50,7 +67,8 @@ def generate_build_dir(sketch_path):
5067
"adafruit:avr:flora8",
5168
"adafruit:avr@1.4.13",
5269
"/dev/ttyACM0",
53-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
70+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
71+
"{tool_executable} "
5472
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
5573
+ '-v -patmega32u4 -cavr109 -P{upload_port} -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
5674
),
@@ -59,7 +77,8 @@ def generate_build_dir(sketch_path):
5977
"adafruit:avr:flora8",
6078
"adafruit:avr@1.4.13",
6179
"/dev/ttyACM999",
62-
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" '
80+
'"{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude"',
81+
"{tool_executable} "
6382
+ '"-C{data_dir}/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" '
6483
+ '-v -patmega32u4 -cavr109 -P{upload_port}0 -b57600 -D "-Uflash:w:{build_dir}/{sketch_name}.ino.hex:i"',
6584
),
@@ -68,7 +87,12 @@ def generate_build_dir(sketch_path):
6887
"esp32:esp32:esp32thing",
6988
"esp32:esp32@1.0.6",
7089
"/dev/ttyACM0",
71-
'python "{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py" '
90+
{
91+
"linux": 'python "{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py"',
92+
"darwin": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.py"',
93+
"win32": '"{data_dir}/packages/esp32/tools/esptool_py/3.0.0/esptool.exe"',
94+
},
95+
"{tool_executable} "
7296
+ '--chip esp32 --port "{upload_port}" --baud 921600 --before default_reset '
7397
+ "--after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 "
7498
+ '"{data_dir}/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin" 0x1000 '
@@ -80,7 +104,8 @@ def generate_build_dir(sketch_path):
80104
"esp8266:esp8266:generic",
81105
"esp8266:esp8266@3.0.1",
82106
"/dev/ttyACM0",
83-
'"{data_dir}/packages/esp8266/tools/python3/3.7.2-post1/python3" '
107+
'"{data_dir}/packages/esp8266/tools/python3/3.7.2-post1/python3"',
108+
"{tool_executable} "
84109
+ '"{data_dir}/packages/esp8266/hardware/esp8266/3.0.1/tools/upload.py" '
85110
+ '--chip esp8266 --port "{upload_port}" --baud "115200" "" '
86111
+ "--before default_reset --after hard_reset write_flash 0x0 "
@@ -89,17 +114,19 @@ def generate_build_dir(sketch_path):
89114
]
90115

91116

92-
@pytest.mark.parametrize("index, fqbn, core, upload_port, expected_output", testdata)
93-
def test_upload_sketch(run_command, session_data_dir, downloads_dir, index, fqbn, core, upload_port, expected_output):
117+
@pytest.mark.parametrize("package_index, fqbn, core, upload_port, upload_tools, output", testdata)
118+
def test_upload_sketch(
119+
run_command, session_data_dir, downloads_dir, package_index, fqbn, core, upload_port, upload_tools, output
120+
):
94121
env = {
95122
"ARDUINO_DATA_DIR": session_data_dir,
96123
"ARDUINO_DOWNLOADS_DIR": downloads_dir,
97124
"ARDUINO_SKETCHBOOK_DIR": session_data_dir,
98125
}
99126

100-
if index:
127+
if package_index:
101128
assert run_command("config init --overwrite", custom_env=env)
102-
assert run_command(f"config add board_manager.additional_urls {index}", custom_env=env)
129+
assert run_command(f"config add board_manager.additional_urls {package_index}", custom_env=env)
103130
assert run_command("update", custom_env=env)
104131

105132
assert run_command(f"core install {core}", custom_env=env)
@@ -115,6 +142,11 @@ def test_upload_sketch(run_command, session_data_dir, downloads_dir, index, fqbn
115142
res = run_command(f'upload -p {upload_port} -b {fqbn} "{sketch_path}" --dry-run -v', custom_env=env)
116143
assert res.ok
117144

118-
assert expected_output.format(
119-
data_dir=session_data_dir, upload_port=upload_port, build_dir=build_dir, sketch_name=sketch_name
120-
).replace("\\", "/") in res.stdout.replace("\\", "/")
145+
generate_expected_output(
146+
output=output,
147+
upload_tools=upload_tools,
148+
data_dir=session_data_dir,
149+
upload_port=upload_port,
150+
build_dir=build_dir,
151+
sketch_name=sketch_name,
152+
) in res.stdout.replace("\\", "/")

0 commit comments

Comments
 (0)