109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
import check_peps # NoQA: inserted into sys.modules in conftest.py
|
||
import pytest
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
"line",
|
||
[
|
||
"PEP: 0",
|
||
"PEP: 12",
|
||
],
|
||
)
|
||
def test_validate_pep_number(line: str):
|
||
warnings = [warning for (_, warning) in check_peps._validate_pep_number(line)]
|
||
assert warnings == [], warnings
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
"line",
|
||
[
|
||
"0",
|
||
"PEP:12",
|
||
"PEP 0",
|
||
"PEP 12",
|
||
"PEP:0",
|
||
],
|
||
)
|
||
def test_validate_pep_number_invalid_header(line: str):
|
||
warnings = [warning for (_, warning) in check_peps._validate_pep_number(line)]
|
||
assert warnings == ["PEP must begin with the 'PEP:' header"], warnings
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
("pep_number", "expected_warnings"),
|
||
[
|
||
# valid entries
|
||
("0", set()),
|
||
("1", set()),
|
||
("12", set()),
|
||
("20", set()),
|
||
("101", set()),
|
||
("801", set()),
|
||
("3099", set()),
|
||
("9999", set()),
|
||
# empty
|
||
("", {"not blank"}),
|
||
# leading zeros
|
||
("01", {"leading zeros"}),
|
||
("001", {"leading zeros"}),
|
||
("0001", {"leading zeros"}),
|
||
("00001", {"leading zeros"}),
|
||
# non-numeric
|
||
("a", {"non-numeric"}),
|
||
("123abc", {"non-numeric"}),
|
||
("0123A", {"leading zeros", "non-numeric"}),
|
||
("0", {"non-numeric"}),
|
||
("101", {"non-numeric"}),
|
||
("9999", {"non-numeric"}),
|
||
("𝟎", {"non-numeric"}),
|
||
("𝟘", {"non-numeric"}),
|
||
("𝟏𝟚", {"non-numeric"}),
|
||
("𝟸𝟬", {"non-numeric"}),
|
||
("-1", {"non-numeric"}),
|
||
("+1", {"non-numeric"}),
|
||
# out of bounds
|
||
("10000", {"range"}),
|
||
("54321", {"range"}),
|
||
("99999", {"range"}),
|
||
("32768", {"range"}),
|
||
],
|
||
# call str() on each parameterised value in the test ID.
|
||
ids=str,
|
||
)
|
||
def test_pep_num_checker(pep_number: str, expected_warnings: set):
|
||
warnings = [
|
||
warning for (_, warning) in check_peps._pep_num(1, pep_number, "<Prefix>")
|
||
]
|
||
|
||
found_warnings = set()
|
||
pep_number = pep_number.strip()
|
||
|
||
if "not blank" in expected_warnings:
|
||
found_warnings.add("not blank")
|
||
expected = f"<Prefix> must not be blank: {pep_number!r}"
|
||
matching = [w for w in warnings if w == expected]
|
||
assert matching == [expected], warnings
|
||
|
||
if "leading zeros" in expected_warnings:
|
||
found_warnings.add("leading zeros")
|
||
expected = f"<Prefix> must not contain leading zeros: {pep_number!r}"
|
||
matching = [w for w in warnings if w == expected]
|
||
assert matching == [expected], warnings
|
||
|
||
if "non-numeric" in expected_warnings:
|
||
found_warnings.add("non-numeric")
|
||
expected = f"<Prefix> must be numeric: {pep_number!r}"
|
||
matching = [w for w in warnings if w == expected]
|
||
assert matching == [expected], warnings
|
||
|
||
if "range" in expected_warnings:
|
||
found_warnings.add("range")
|
||
expected = f"<Prefix> must be between 0 and 9999: {pep_number!r}"
|
||
matching = [w for w in warnings if w == expected]
|
||
assert matching == [expected], warnings
|
||
|
||
if expected_warnings == set():
|
||
assert warnings == [], warnings
|
||
|
||
assert found_warnings == expected_warnings
|