""" We are using a pytest feature heavily: Parametrization. These tests make sure this feature works still as expected. """ from string import ascii_letters from typing import Generator, List, Type import pytest from .conftest import CheapCounter def data_generator() -> Generator[List[str], None, None]: """ Simple Test Data Generator """ for val_a in ascii_letters[0:5]: for val_b in ascii_letters[5:10]: yield [val_a, val_b, f"{val_a}-{val_b}"] @pytest.mark.order(1) @pytest.mark.parametrize( ["val_a", "val_b", "val_c"], [ ["a", "b", "a:b"], ["c", "d", "c:d"], ], ) def test_simple_parametrize(val_a: str, val_b: str, val_c: str, cheap_counter: Type[CheapCounter]) -> None: """ Test the standard parametrization """ assert f"{val_a}:{val_b}" == val_c cheap_counter.increment("simple") @pytest.mark.order(2) @pytest.mark.parametrize( ["val_a", "val_b", "val_c"], data_generator(), ) def test_generator_parametrize(val_a: str, val_b: str, val_c: str, cheap_counter: Type[CheapCounter]) -> None: """ Test the generator way """ assert f"{val_a}-{val_b}" == val_c cheap_counter.increment("generator") @pytest.mark.order(3) def test_evaluation(cheap_counter: Type[CheapCounter]) -> None: """ Evaluate the tests before """ assert cheap_counter.get_value("simple") == 2 assert cheap_counter.get_value("generator") == 25