98 lines
2.6 KiB
Python
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)
|