pytest-csv-params/tests/test_varname.py

98 lines
2.6 KiB
Python

"""
Test the varname handling
"""
import sys
from typing import Optional
import pytest
from _ptcsvp.varname import is_valid_name, make_name_valid
from pytest_csv_params.exception import CsvHeaderNameInvalid
@pytest.mark.parametrize(
["var_name", "is_valid"],
[
("var_name", True),
("varname", True),
("_varname", True),
("_varName", True),
("VarName", True),
("VarName_", True),
("Var1Name_", True),
("Var1Name_0", True),
("0_var_name", False),
("var name", False),
("Var Name", False),
("Var-Name", False),
("Var.Name", False),
("Var:Name", False),
(":VarName", False),
(".VarName", False),
(";VarName", False),
("VarName+", False),
("VarName#", False),
("VarNäme", False),
("VarNÖme", False),
("Varßn_ame", False),
("def", False),
("next", False),
("if", False),
],
)
def test_is_valid_name(var_name: str, is_valid: bool) -> None:
"""
Test if the varname is considered valid or not
"""
assert is_valid_name(var_name) == is_valid
@pytest.mark.parametrize(
["var_name", "valid_var_name", "raises_error"],
[
("var_name", "var_name", False),
("4var_name", "_var_name", False),
("44_var_name", "_4_var_name", False),
("varName", "varName", False),
("var Name", "var_Name", False),
(" varName", "_varName", False),
(":varName", "_varName", False),
("var-name", "var_name", False),
("a" * 1025, None, True),
("abcd" * 300, None, True),
("continue", None, True),
("float", None, True),
("str", None, True),
],
)
def test_make_name_valid(var_name: str, valid_var_name: Optional[str], raises_error: bool) -> None:
"""
Check if an invalid name goes valid
"""
if raises_error:
with pytest.raises(CsvHeaderNameInvalid) as raised_error:
make_name_valid(var_name)
assert raised_error.value.args[0] == f"'{var_name}' is not a valid variable name"
else:
should_be_valid = make_name_valid(var_name)
assert should_be_valid == valid_var_name
assert is_valid_name(should_be_valid)
@pytest.mark.skipif(sys.version_info < (3, 10), reason="Only relevant for python 3.10 and above")
@pytest.mark.parametrize(
["name"],
[
("match",),
("_",),
],
)
def test_310_names(name: str) -> None:
"""
Check if special 3.10 names are considered invalid, when on 3.10
"""
assert not is_valid_name(name)