diff --git a/spdx/parsers/tagvalue.py b/spdx/parsers/tagvalue.py index 094ecb5b4..91a19460c 100644 --- a/spdx/parsers/tagvalue.py +++ b/spdx/parsers/tagvalue.py @@ -267,7 +267,7 @@ def p_extr_lic_id_2(self, p): self.logger.log(msg) def p_uknown_tag(self, p): - """unknown_tag : UNKNOWN_TAG""" + """unknown_tag : UNKNOWN_TAG LINE""" self.error = True msg = ERROR_MESSAGES['UNKNOWN_TAG'].format(p[1], p.lineno(1)) self.logger.log(msg) diff --git a/tests/test_tag_value_parser.py b/tests/test_tag_value_parser.py index 485737c6b..5effca31a 100644 --- a/tests/test_tag_value_parser.py +++ b/tests/test_tag_value_parser.py @@ -13,6 +13,7 @@ from __future__ import print_function from __future__ import unicode_literals +import sys import unittest from unittest import TestCase @@ -94,6 +95,14 @@ def test_pacakage(self): self.token_assert_helper(self.l.token(), 'PKG_VERF_CODE', 'PackageVerificationCode', 3) self.token_assert_helper(self.l.token(), 'LINE', '4e3211c67a2d28fced849ee1bb76e7391b93feba (SpdxTranslatorSpdx.rdf, SpdxTranslatorSpdx.txt)', 3) + def test_unknown_tag(self): + data = ''' + SomeUnknownTag: SomeUnknownValue + ''' + self.l.input(data) + self.token_assert_helper(self.l.token(), 'UNKNOWN_TAG', 'SomeUnknownTag', 2) + self.token_assert_helper(self.l.token(), 'LINE', 'SomeUnknownValue', 2) + def token_assert_helper(self, token, ttype, value, line): assert token.type == ttype assert token.value == value @@ -157,6 +166,8 @@ class TestParser(TestCase): 'FileComment: Very long file' ]) + unknown_tag_str = 'SomeUnknownTag: SomeUnknownValue' + complete_str = '{0}\n{1}\n{2}\n{3}\n{4}'.format(document_str, creation_str, review_str, package_str, file_str) def setUp(self): @@ -206,6 +217,21 @@ def test_file(self): assert len(spdx_file.artifact_of_project_home) == 1 assert len(spdx_file.artifact_of_project_uri) == 1 + def test_unknown_tag(self): + + try: + from StringIO import StringIO + except ImportError: + from io import StringIO + + saved_out = sys.stdout + sys.stdout = StringIO() + document, error = self.p.parse(self.unknown_tag_str) + self.assertEqual(sys.stdout.getvalue(), 'Found unknown tag : SomeUnknownTag at line: 1\n') + sys.stdout = saved_out + assert error + assert document is not None + if __name__ == '__main__': unittest.main() \ No newline at end of file