mirror of https://github.com/pypa/hatch.git
57 lines
1.6 KiB
Python
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
|