diff --git a/.github/workflows/check_codestyle.yml b/.github/workflows/check_codestyle.yml index 92860a527..4cc16b9c1 100644 --- a/.github/workflows/check_codestyle.yml +++ b/.github/workflows/check_codestyle.yml @@ -24,6 +24,9 @@ jobs: exclude: # see https://github.com/actions/runner-images/issues/9770#issuecomment-2085623315 - python-version: "3.7" os: macos-latest + include: + - python-version: "3.7" + os: macos-13 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/install_and_test.yml b/.github/workflows/install_and_test.yml index 038eb4717..0f66cc73f 100644 --- a/.github/workflows/install_and_test.yml +++ b/.github/workflows/install_and_test.yml @@ -21,6 +21,9 @@ jobs: exclude: # see https://github.com/actions/runner-images/issues/9770#issuecomment-2085623315 - python-version: "3.7" os: macos-latest + include: + - python-version: "3.7" + os: macos-13 steps: - uses: actions/checkout@v3 diff --git a/src/spdx_tools/spdx/parser/tagvalue/parser.py b/src/spdx_tools/spdx/parser/tagvalue/parser.py index a190dd7d7..50096bda2 100644 --- a/src/spdx_tools/spdx/parser/tagvalue/parser.py +++ b/src/spdx_tools/spdx/parser/tagvalue/parser.py @@ -212,11 +212,14 @@ def p_generic_value(self, p): def p_unknown_tag(self, p): self.logger.append(f"Unknown tag provided in line {p.lineno(1)}") - @grammar_rule("text_or_line : TEXT") + @grammar_rule("text_or_line : TEXT\n line_or_no_assertion_or_none : TEXT") def p_text(self, p): p[0] = str_from_text(p[1]) - @grammar_rule("text_or_line : LINE\n line_or_no_assertion : LINE\nline_or_no_assertion_or_none : text_or_line") + @grammar_rule( + "text_or_line : LINE\n line_or_no_assertion : LINE\nline_or_no_assertion_or_none : LINE\n" + "text_or_line : NO_ASSERTION\n text_or_line : NONE" + ) def p_line(self, p): p[0] = p[1] diff --git a/tests/spdx/parser/tagvalue/test_tag_value_parser.py b/tests/spdx/parser/tagvalue/test_tag_value_parser.py index 9f347fc08..c866e2726 100644 --- a/tests/spdx/parser/tagvalue/test_tag_value_parser.py +++ b/tests/spdx/parser/tagvalue/test_tag_value_parser.py @@ -6,7 +6,7 @@ import pytest from spdx_tools.spdx.constants import DOCUMENT_SPDX_ID -from spdx_tools.spdx.model import Relationship, RelationshipType +from spdx_tools.spdx.model import Relationship, RelationshipType, SpdxNoAssertion, SpdxNone from spdx_tools.spdx.parser.error import SPDXParsingError from spdx_tools.spdx.parser.tagvalue.parser import Parser from tests.spdx.parser.tagvalue.test_creation_info_parser import DOCUMENT_STR @@ -136,3 +136,29 @@ def test_faulty_license_expression(): "and numbers, underscore, dot, colon or hyphen signs and spaces: " "'LicenseRef-foo/foo'\"]", ] + + +def test_parse_none_or_no_assertion_as_text(): + parser = Parser() + document_str = "\n".join( + [ + DOCUMENT_STR, + "PackageName: Test", + "SPDXID: SPDXRef-Package", + "PackageDownloadLocation: http://example.com/test", + "FilesAnalyzed: true", + "PackageSummary: NONE", + "PackageSourceInfo: NOASSERTION", + "PackageLicenseConcluded: NONE", + "PackageLicenseDeclared: NOASSERTION", + ] + ) + document = parser.parse(document_str) + assert document is not None + package = document.packages[0] + assert package.name == "Test" + assert package.spdx_id == "SPDXRef-Package" + assert package.source_info == "NOASSERTION" + assert package.summary == "NONE" + assert package.license_concluded == SpdxNone() + assert package.license_declared == SpdxNoAssertion()