diff --git a/04_lesson/__pycache__/string_utils.cpython-313.pyc b/04_lesson/__pycache__/string_utils.cpython-313.pyc new file mode 100644 index 0000000..207b1df Binary files /dev/null and b/04_lesson/__pycache__/string_utils.cpython-313.pyc differ diff --git a/04_lesson/__pycache__/test_string_utils.cpython-313-pytest-8.4.2.pyc b/04_lesson/__pycache__/test_string_utils.cpython-313-pytest-8.4.2.pyc new file mode 100644 index 0000000..397a6dd Binary files /dev/null and b/04_lesson/__pycache__/test_string_utils.cpython-313-pytest-8.4.2.pyc differ diff --git a/04_lesson/string_utils.py b/04_lesson/string_utils.py new file mode 100644 index 0000000..96bc118 --- /dev/null +++ b/04_lesson/string_utils.py @@ -0,0 +1,53 @@ +class StringUtils: + """ + Класс с полезными утилитами для обработки и анализа строк + """ + + def capitalize(self, string: str) -> str: + """ + Принимает на вход текст, делает первую букву заглавной + и возвращает этот же текст + Пример: `capitilize("skypro") -> "Skypro"` + """ + return string.capitalize() + + def trim(self, string: str) -> str: + """ + Принимает на вход текст и удаляет пробелы в начале, если они есть + Пример: `trim(" skypro") -> "skypro"` + """ + whitespace = " " + while string.startswith(whitespace): + string = string.removeprefix(whitespace) + return string + + def contains(self, string: str, symbol: str) -> bool: + """ + Возвращает `True`, если строка содержит искомый символ + и `False` - если нет + Параметры: + `string` - строка для обработки + `symbol` - искомый символ + Пример 1: `contains("SkyPro", "S") -> True` + Пример 2: `contains("SkyPro", "U") -> False` + """ + res = False + try: + res = string.index(symbol) > -1 + except ValueError: + pass + + return res + + def delete_symbol(self, string: str, symbol: str) -> str: + """ + Удаляет все подстроки из переданной строки + Параметры: + `string` - строка для обработки + `symbol` - искомый символ для удаления + Пример 1: `delete_symbol("SkyPro", "k") -> "SyPro"` + Пример 2: `delete_symbol("SkyPro", "Pro") -> "Sky"` + """ + if self.contains(string, symbol): + string = string.replace(symbol, "") + return string diff --git a/04_lesson/test_string_utils.py b/04_lesson/test_string_utils.py new file mode 100644 index 0000000..0691ea8 --- /dev/null +++ b/04_lesson/test_string_utils.py @@ -0,0 +1,84 @@ +import pytest +from string_utils import StringUtils + + +string_utils = StringUtils() + + +@pytest.mark.positive +@pytest.mark.parametrize("input_str, expected", [ + ("skypro", "Skypro"), + ("123", "123"), + ("04 апреля 2023", "04 апреля 2023"), +]) +def test_capitalize_positive(input_str, expected): + assert string_utils.capitalize(input_str) == expected + + +@pytest.mark.negative +@pytest.mark.parametrize("input_str, expected", [ + ("None", "None"), + ("", ""), + (" ", " "), +]) +def test_capitalize_negative(input_str, expected): + assert string_utils.capitalize(input_str) == expected + + +@pytest.mark.positive +@pytest.mark.parametrize("input_str, expected", [ + ("Skypro", "Skypro"), + ("123", "123"), + (" 04 апреля 2023", "04 апреля 2023"), +]) +def test_trim_positive(input_str, expected): + assert string_utils.trim(input_str) == expected + + +@pytest.mark.negative +@pytest.mark.parametrize("input_str, expected", [ + ("None", "None"), + ("", ""), + (" Skypro", "Skypro"), +]) +def test_trim_negative(input_str, expected): + assert string_utils.trim(input_str) == expected + + +@pytest.mark.positive +@pytest.mark.parametrize("input_str, symbol, expected", [ + ("Skypro", "S", True), + ("123", "1", True), + ("04 апреля 2023", "04", True), +]) +def test_contains_positive(input_str, symbol, expected): + assert string_utils.contains(input_str, symbol) == expected + + +@pytest.mark.negative +@pytest.mark.parametrize("input_str, symbol, expected", [ + ("", "F", False), + (" ", "L", False), +]) +def test_contains_negative(input_str, symbol, expected): + assert string_utils.contains(input_str, symbol) == expected + + +@pytest.mark.positive +@pytest.mark.parametrize("input_str, symbol, expected", [ + ("Skypro", "S", "kypro"), + ("123", "1", "23"), + ("04 апреля 2023", "0", "4 апреля 223"), +]) +def test_delete_symbol_positive(input_str, symbol, expected): + assert string_utils.delete_symbol(input_str, symbol) == expected + + +@pytest.mark.negative +@pytest.mark.parametrize("input_str, symbol, expected", [ + ("None", "", "None"), + ("", "N", ""), + (" ", "0"," "), +]) +def test_delete_symbol_negative(input_str, symbol, expected): + assert string_utils.delete_symbol(input_str, symbol) == expected diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..75ea0cd --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +markers = + positive: Тесты, которые проверяют корректное поведение функции + negative: Тесты, которые проверяют некорректное поведение функции \ No newline at end of file