ytdl-sub/tests/unit/script/functions/test_string_functions.py
Jesse Bannon e92b1cd12a
[BACKEND][HUGE] Function Support in variable syntax (#838)
A complete gutting of the internals of ytdl-sub to support functions in our variable syntax, in addition to being able to access a yt-dlp entry's .info.json fields using functions. Functionally, ytdl-sub should still look and behave the same from a user-perspective.

With so many lines of code changed (+8927, -2708), no doubt there will be new issues. Please make a GH issue or reach out on Discord if your config/subscriptions break in any way/shape/form.

Details on how to use function support will come soon in the form of proper documentation in our readthedocs.
2023-12-18 16:08:15 -08:00

109 lines
3.4 KiB
Python

import pytest
from unit.script.conftest import single_variable_output
class TestNumericFunctions:
@pytest.mark.parametrize(
"values, expected_output",
[
("'lower'", "LOWER"),
("'UPPER'", "UPPER"),
],
)
def test_upper(self, values: str, expected_output: str):
output = single_variable_output(f"{{%upper({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'lower'", "lower"),
("'UPPER'", "upper"),
],
)
def test_lower(self, values: str, expected_output: str):
output = single_variable_output(f"{{%lower({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'lower First word'", "Lower first word"),
("'UPPER First word'", "Upper first word"),
],
)
def test_capitalize(self, values: str, expected_output: str):
output = single_variable_output(f"{{%capitalize({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'lower First word'", "Lower First Word"),
("'UPPER First word'", "Upper First Word"),
],
)
def test_titlecase(self, values: str, expected_output: str):
output = single_variable_output(f"{{%titlecase({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
(
"'lower First word second word', 'word', 'string'",
"lower First string second string",
),
(
"'lower First word second word', 'word', 'string', 1",
"lower First string second word",
),
],
)
def test_replace(self, values: str, expected_output: str):
output = single_variable_output(f"{{%replace({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'lower First word'", "lower First word"),
("'lower First word', ' second', ' string'", "lower First word second string"),
],
)
def test_concat(self, values: str, expected_output: str):
output = single_variable_output(f"{{%concat({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'HI', 6, '.'", "....HI"),
("'HI', 2, '.'", "HI"),
],
)
def test_pad(self, values: str, expected_output: str):
output = single_variable_output(f"{{%pad({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("2012, 6", "002012"),
("2012, 2", "2012"),
],
)
def test_pad_zero(self, values: str, expected_output: str):
output = single_variable_output(f"{{%pad_zero({values})}}")
assert output == expected_output
@pytest.mark.parametrize(
"values, expected_output",
[
("'2012', 2", "12"),
("'2012', 1, 3", "01"),
],
)
def test_slice(self, values, expected_output):
output = single_variable_output(f"{{%slice({values})}}")
assert output == expected_output