def test_spdx_info_of_directory(empty_directory): """Raise IsADirectoryError when calling spdx_info_of on a directory.""" (empty_directory / "src").mkdir() project = Project(empty_directory) with pytest.raises(IsADirectoryError): project.spdx_info_of(empty_directory / "src")
def test_spdx_info_of_file_does_not_exist(fake_repository): """Raise FileNotFoundError when asking for the SPDX info of a file that does not exist. """ project = Project(fake_repository) with pytest.raises(FileNotFoundError): project.spdx_info_of(fake_repository / "does_not_exist")
def test_spdx_info_of_unlicensed_file(fake_repository): """Return an empty SpdxInfo object when asking for the SPDX information of a file that has no SPDX information. """ (fake_repository / "foo.py").touch() project = Project(fake_repository) assert not any(project.spdx_info_of("foo.py"))
def test_spdx_info_of_binary_succeeds(fake_repository): """spdx_info_of succeeds when the target is covered by dep5.""" shutil.copy(RESOURCES_DIRECTORY / "fsfe.png", fake_repository / "doc/fsfe.png") project = Project(fake_repository) spdx_info = project.spdx_info_of("doc/fsfe.png") assert LicenseSymbol("CC0-1.0") in spdx_info.spdx_expressions
def test_spdx_info_of_only_copyright(fake_repository): """A file contains only a copyright line. Test whether it correctly picks up on that. """ (fake_repository / "foo.py").write_text("SPDX-Copyright: 2017 Mary Sue") project = Project(fake_repository) spdx_info = project.spdx_info_of("foo.py") assert not any(spdx_info.spdx_expressions) assert len(spdx_info.copyright_lines) == 1 assert spdx_info.copyright_lines.pop() == "2017 Mary Sue"
def test_spdx_info_of_only_copyright_also_covered_by_debian(fake_repository): """A file contains only a copyright line, but debian/copyright also has information on this file. Use both. """ (fake_repository / "doc/foo.py").write_text("SPDX-Copyright: in file") project = Project(fake_repository) spdx_info = project.spdx_info_of("doc/foo.py") assert any(spdx_info.spdx_expressions) assert len(spdx_info.copyright_lines) == 2 assert "in file" in spdx_info.copyright_lines assert "2017 Mary Sue" in spdx_info.copyright_lines
def test_license_file_detected(empty_directory): """Test whether---when given a file and a license file---the license file is detected and read. """ (empty_directory / "foo.py").touch() (empty_directory / "foo.py.license").write_text( "SPDX-Copyright: 2017 Mary Sue\nSPDX-License-Identifier: MIT\n") project = Project(empty_directory) spdx_info = project.spdx_info_of("foo.py") assert "2017 Mary Sue" in spdx_info.copyright_lines assert LicenseSymbol("MIT") in spdx_info.spdx_expressions
def test_spdx_info_of_also_covered_by_dep5(fake_repository): """A file contains all SPDX information, but .reuse/dep5 also provides information on this file. Use both. """ (fake_repository / "doc/foo.py").write_text( dedent(""" SPDX-License-Identifier: MIT SPDX-FileCopyrightText: in file""")) project = Project(fake_repository) spdx_info = project.spdx_info_of("doc/foo.py") assert LicenseSymbol("MIT") in spdx_info.spdx_expressions assert LicenseSymbol("CC0-1.0") in spdx_info.spdx_expressions assert "SPDX-FileCopyrightText: in file" in spdx_info.copyright_lines assert "2017 Mary Sue" in spdx_info.copyright_lines
def test_spdx_info_of_no_duplicates(empty_directory): """A file contains the same lines twice. The SpdxInfo only contains those lines once. """ spdx_line = "SPDX-License-Identifier: GPL-3.0-or-later\n" copyright_line = "SPDX-Copyright: 2017 Free Software Foundation Europe\n" text = spdx_line + copyright_line (empty_directory / "foo.py").write_text(text * 2) project = Project(empty_directory) spdx_info = project.spdx_info_of("foo.py") assert len(spdx_info.spdx_expressions) == 1 assert LicenseSymbol("GPL-3.0-or-later") in spdx_info.spdx_expressions assert len(spdx_info.copyright_lines) == 1 assert "2017 Free Software Foundation Europe" in spdx_info.copyright_lines