pypa-hatch/tests/backend/licenses/test_parse.py

57 lines
1.6 KiB
Python

import re
import pytest
from hatchling.licenses.parse import normalize_license_expression
@pytest.mark.parametrize(
'expression',
[
'or',
'and',
'with',
'mit or',
'mit and',
'mit with',
'or mit',
'and mit',
'with mit',
'(mit',
'mit)',
'mit or or apache-2.0',
'mit or apache-2.0 (bsd-3-clause and MPL-2.0)',
],
)
def test_syntax_errors(expression):
with pytest.raises(ValueError, match=re.escape(f'invalid license expression: {expression}')):
normalize_license_expression(expression)
def test_unknown_license():
with pytest.raises(ValueError, match='unknown license: foo'):
normalize_license_expression('mit or foo')
def test_unknown_license_exception():
with pytest.raises(ValueError, match='unknown license exception: foo'):
normalize_license_expression('mit with foo')
@pytest.mark.parametrize(
('raw', 'normalized'),
[
('mIt', 'MIT'),
('mit or apache-2.0', 'MIT OR Apache-2.0'),
('mit and apache-2.0', 'MIT AND Apache-2.0'),
('gpl-2.0-or-later with bison-exception-2.2', 'GPL-2.0-or-later WITH Bison-exception-2.2'),
('mit or apache-2.0 and (bsd-3-clause or mpl-2.0)', 'MIT OR Apache-2.0 AND (BSD-3-Clause OR MPL-2.0)'),
('mit and (apache-2.0+ or mpl-2.0+)', 'MIT AND (Apache-2.0+ OR MPL-2.0+)'),
# Valid non-SPDX values
('licenseref-public-domain', 'LicenseRef-Public-Domain'),
('licenseref-proprietary', 'LicenseRef-Proprietary'),
],
)
def test_normalization(raw, normalized):
assert normalize_license_expression(raw) == normalized