Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1e1db0a

Browse files
Add test for working and broken symlinks
This tests that a symlink to an external file is compiled correctly, and tests the current behavior of breaking on any broken symlink in the sketch directory.
1 parent 7415e26 commit 1e1db0a

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

‎test/test_compile.py‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,78 @@ def test_compile_with_sketch_with_symlink_selfloop(run_command, data_dir):
158158
assert not result.ok
159159

160160

161+
def test_compile_with_symlink(run_command, data_dir):
162+
# Init the environment explicitly
163+
run_command(["core", "update-index"])
164+
165+
# Install Arduino AVR Boards
166+
run_command(["core", "install", "arduino:avr@1.8.3"])
167+
168+
sketch_name = "CompileIntegrationTestSymlinkOk"
169+
sketch_path = os.path.join(data_dir, sketch_name)
170+
main_file = os.path.join(sketch_path, "{}.ino".format(sketch_name))
171+
symlink_file = os.path.join(sketch_path, "link.ino")
172+
fqbn = "arduino:avr:uno"
173+
174+
# Create a test sketch
175+
result = run_command(["sketch", "new", sketch_path])
176+
assert result.ok
177+
assert "Sketch created in: {}".format(sketch_path) in result.stdout
178+
179+
# create a symlink to some external file and move the main .ino
180+
# contents into that to check that the symlink is actually compiled
181+
with tempfile.NamedTemporaryFile(delete=False) as external:
182+
try:
183+
os.symlink(external.name, symlink_file)
184+
185+
with open(main_file, mode="rb+") as main:
186+
external.write(main.read())
187+
external.flush()
188+
main.truncate(0)
189+
main.flush()
190+
191+
# Close to allow re-opening the file on Windows
192+
# See https://bugs.python.org/issue14243
193+
external.close()
194+
195+
# Build sketch for arduino:avr:uno
196+
result = run_command(["compile", "-b", fqbn, sketch_path])
197+
assert result.stderr == ""
198+
assert result.ok
199+
finally:
200+
# Explicit cleanup needed because the file is closed above
201+
os.unlink(external.name)
202+
203+
def test_broken_symlink(sketch_name, link_name, target_name, expect_error):
204+
sketch_path = os.path.join(data_dir, sketch_name)
205+
symlink_file = os.path.join(sketch_path, link_name)
206+
target_file = os.path.join(sketch_path, target_name)
207+
fqbn = "arduino:avr:uno"
208+
209+
# Create a test sketch
210+
result = run_command(["sketch", "new", sketch_path])
211+
assert result.ok
212+
assert "Sketch created in: {}".format(sketch_path) in result.stdout
213+
214+
os.symlink(target_file, symlink_file)
215+
216+
# Build sketch for arduino:avr:uno
217+
result = run_command(["compile", "-b", fqbn, sketch_path])
218+
219+
if expect_error:
220+
expected_error = "Error during build: Can't open sketch: stat {}: ".format(symlink_file)
221+
assert expected_error in result.stderr
222+
assert not result.ok
223+
else:
224+
assert result.ok
225+
226+
test_broken_symlink("CompileIntegrationTestSymlinkBrokenIno", "link.ino", "doesnotexist.ino", expect_error=True)
227+
test_broken_symlink("CompileIntegrationTestSymlinkBrokenCpp", "link.cpp", "doesnotexist.cpp", expect_error=True)
228+
test_broken_symlink("CompileIntegrationTestSymlinkBrokenH", "link.h", "doesnotexist.h", expect_error=True)
229+
test_broken_symlink("CompileIntegrationTestSymlinkBrokenJson", "link.json", "doesnotexist.json", expect_error=True)
230+
test_broken_symlink("CompileIntegrationTestSymlinkBrokenXXX", "link.xxx", "doesnotexist.xxx", expect_error=True)
231+
232+
161233
def test_compile_blacklisted_sketchname(run_command, data_dir):
162234
"""
163235
Compile should ignore folders named `RCS`, `.git` and the likes, but

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /