|
15 | 15 | validate_license_expressions,
|
16 | 16 | )
|
17 | 17 | from spdx_tools.spdx.validation.validation_message import SpdxElementType, ValidationContext, ValidationMessage
|
18 |
| -from tests.spdx.fixtures import document_fixture, extracted_licensing_info_fixture |
| 18 | +from tests.spdx.fixtures import document_fixture, external_document_ref_fixture, extracted_licensing_info_fixture |
19 | 19 |
|
20 | 20 | FIXTURE_LICENSE_ID = extracted_licensing_info_fixture().license_id
|
| 21 | +EXTERNAL_DOCUMENT_ID = external_document_ref_fixture().document_ref_id |
21 | 22 |
|
22 | 23 |
|
23 | 24 | @pytest.mark.parametrize(
|
|
26 | 27 | "MIT",
|
27 | 28 | FIXTURE_LICENSE_ID,
|
28 | 29 | f"GPL-2.0-only with GPL-CC-1.0 and {FIXTURE_LICENSE_ID} with 389-exception or Beerware",
|
| 30 | + f"{EXTERNAL_DOCUMENT_ID}:LicenseRef-007", |
29 | 31 | ],
|
30 | 32 | )
|
31 | 33 | def test_valid_license_expression(expression_string):
|
@@ -136,3 +138,38 @@ def test_invalid_license_expression_with_invalid_exceptions(expression_string, e
|
136 | 138 | expected_messages = [ValidationMessage(expected_message, context)]
|
137 | 139 |
|
138 | 140 | assert validation_messages == expected_messages
|
| 141 | + |
| 142 | + |
| 143 | +@pytest.mark.parametrize( |
| 144 | + "expression_string, expected_message", |
| 145 | + [ |
| 146 | + ( |
| 147 | + f"{EXTERNAL_DOCUMENT_ID}:LicenseRef-007:4", |
| 148 | + f"Too many colons in license reference: {EXTERNAL_DOCUMENT_ID}:LicenseRef-007:4. " |
| 149 | + "A license reference must only contain a single colon to " |
| 150 | + "separate an external document reference from the license reference.", |
| 151 | + ), |
| 152 | + ( |
| 153 | + f"{EXTERNAL_DOCUMENT_ID}:unknown_license", |
| 154 | + 'A license reference must start with "LicenseRef-", but is: unknown_license ' |
| 155 | + f"in external license reference {EXTERNAL_DOCUMENT_ID}:unknown_license.", |
| 156 | + ), |
| 157 | + ( |
| 158 | + "DocumentRef-unknown:LicenseRef-1", |
| 159 | + 'Did not find the external document reference "DocumentRef-unknown" in the SPDX document. ' |
| 160 | + "From the external license reference DocumentRef-unknown:LicenseRef-1.", |
| 161 | + ), |
| 162 | + ], |
| 163 | +) |
| 164 | +def test_invalid_license_expression_with_external_reference(expression_string, expected_message): |
| 165 | + document: Document = document_fixture() |
| 166 | + license_expression: LicenseExpression = spdx_licensing.parse(expression_string) |
| 167 | + parent_id = "SPDXRef-File" |
| 168 | + context = ValidationContext( |
| 169 | + parent_id=parent_id, element_type=SpdxElementType.LICENSE_EXPRESSION, full_element=license_expression |
| 170 | + ) |
| 171 | + |
| 172 | + validation_messages: List[ValidationMessage] = validate_license_expression(license_expression, document, parent_id) |
| 173 | + expected_messages = [ValidationMessage(expected_message, context)] |
| 174 | + |
| 175 | + assert validation_messages == expected_messages |
0 commit comments