From a1703e8696fba4ec65724b67f77e69de3b0e92ff Mon Sep 17 00:00:00 2001 From: Omar Kohl Date: Mon, 17 Sep 2018 16:22:55 +0200 Subject: [PATCH] Add support for softlinks (copy them instead of their target) closes #1 --- pytest_datafiles.py | 3 +++ tests/_fixture_files/dir6/sparrow_link.jpg | 1 + tests/_fixture_files/sparrow_link.jpg | 1 + tests/test_pytest_datafiles.py | 30 ++++++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 120000 tests/_fixture_files/dir6/sparrow_link.jpg create mode 120000 tests/_fixture_files/sparrow_link.jpg diff --git a/pytest_datafiles.py b/pytest_datafiles.py index 7c10fa8..ce490c9 100644 --- a/pytest_datafiles.py +++ b/pytest_datafiles.py @@ -9,8 +9,11 @@ def _copy(src, target): if not src.exists(): raise ValueError("'%s' does not exist!" % src) + if src.isdir(): src.copy(target / src.basename) + elif src.islink(): + (target / src.basename).mksymlinkto(src.realpath()) else: # file src.copy(target) diff --git a/tests/_fixture_files/dir6/sparrow_link.jpg b/tests/_fixture_files/dir6/sparrow_link.jpg new file mode 120000 index 0000000..98f521f --- /dev/null +++ b/tests/_fixture_files/dir6/sparrow_link.jpg @@ -0,0 +1 @@ +../sparrow.jpg \ No newline at end of file diff --git a/tests/_fixture_files/sparrow_link.jpg b/tests/_fixture_files/sparrow_link.jpg new file mode 120000 index 0000000..2e96e97 --- /dev/null +++ b/tests/_fixture_files/sparrow_link.jpg @@ -0,0 +1 @@ +sparrow.jpg \ No newline at end of file diff --git a/tests/test_pytest_datafiles.py b/tests/test_pytest_datafiles.py index af9053d..18d5402 100644 --- a/tests/test_pytest_datafiles.py +++ b/tests/test_pytest_datafiles.py @@ -371,3 +371,33 @@ def test_invalid_param(datafiles): result.stdout.fnmatch_lines([ "E*ValueError: 'on_duplicate' must be 'exception', 'ignore' or *", ]) + +@pytest.mark.datafiles(os.path.join(FIXTURE_DIR, 'sparrow_link.jpg')) +def test_copy_symlink(datafiles): + """ + Verify that symlinks are copied and not their targets. + """ + assert len(datafiles.listdir()) == 1 + assert (datafiles / 'sparrow_link.jpg').check(link=1) + + +@pytest.mark.datafiles(os.path.join(FIXTURE_DIR, 'dir6')) +def test_copy_symlink_in_dir(datafiles): + """ + Verify that symlinks are copied and not their targets. + """ + assert len(datafiles.listdir()) == 1 + assert (datafiles / 'sparrow_link.jpg').check(link=1) + + +@pytest.mark.datafiles( + os.path.join(FIXTURE_DIR, 'dir6'), + keep_top_dir=True, + ) +def test_copy_symlink_in_dir2(datafiles): + """ + Verify that symlinks are copied and not their targets. + """ + assert len(datafiles.listdir()) == 1 + assert len((datafiles / 'dir6').listdir()) == 1 + assert (datafiles / 'dir6' / 'sparrow_link.jpg').check(link=1)