From a2056651bd7aa51ed3cf488d8bfd1f12e3f87156 Mon Sep 17 00:00:00 2001 From: "d.kovalenko" Date: Thu, 2 Jul 2026 08:45:07 +0300 Subject: [PATCH 1/2] [new] os_ops::get_basename is added To use instead os.path.basename. --- src/local_ops.py | 4 ++ src/os_ops.py | 4 ++ src/remote_ops.py | 4 ++ tests/helpers/fx_structure.py | 11 +++++ tests/test_os_ops_common.py | 86 +++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 tests/helpers/fx_structure.py diff --git a/src/local_ops.py b/src/local_ops.py index 24b1fc2..5be4fc4 100644 --- a/src/local_ops.py +++ b/src/local_ops.py @@ -728,3 +728,7 @@ def get_dirname(self, path: str) -> str: def is_abs_path(self, path: str) -> bool: assert type(path) is str return os.path.isabs(path) + + def get_basename(self, path: str) -> str: + assert type(path) is str + return os.path.basename(path) diff --git a/src/os_ops.py b/src/os_ops.py index 1de54af..d2af413 100644 --- a/src/os_ops.py +++ b/src/os_ops.py @@ -275,3 +275,7 @@ def get_dirname(self, path: str) -> str: def is_abs_path(self, path: str) -> bool: assert type(path) is str raise NotImplementedError() + + def get_basename(self, path: str) -> str: + assert type(path) is str + raise NotImplementedError() diff --git a/src/remote_ops.py b/src/remote_ops.py index 198b459..bdfc8c9 100644 --- a/src/remote_ops.py +++ b/src/remote_ops.py @@ -988,6 +988,10 @@ def is_abs_path(self, path: str) -> bool: assert type(path) is str return posixpath.isabs(path) + def get_basename(self, path: str) -> str: + assert type(path) is str + return posixpath.basename(path) + @staticmethod def _build_cmdline( cmd, diff --git a/tests/helpers/fx_structure.py b/tests/helpers/fx_structure.py new file mode 100644 index 0000000..036f00d --- /dev/null +++ b/tests/helpers/fx_structure.py @@ -0,0 +1,11 @@ +# coding: utf-8 +from __future__ import annotations + +import dataclasses + + +@dataclasses.dataclass +class GetBaseNameData: + sign: str + value: str + result: str diff --git a/tests/test_os_ops_common.py b/tests/test_os_ops_common.py index 8866c49..bc76ab3 100644 --- a/tests/test_os_ops_common.py +++ b/tests/test_os_ops_common.py @@ -5,6 +5,7 @@ from tests.helpers.global_data import OsOpsDescrs from tests.helpers.global_data import OsOperations from tests.helpers.run_conditions import RunConditions +from tests.helpers import fx_structure import os import sys @@ -1548,6 +1549,91 @@ def test_is_abs_path__no(self, os_ops: OsOperations): assert actual_value is False return + # -------------------------------------------------------------------- + sm_GetBaseNameDatas: typing.List[fx_structure.GetBaseNameData] = [ + fx_structure.GetBaseNameData( + sign="empty", + value="", + result="", + ), + fx_structure.GetBaseNameData( + sign="relative_curdir", + value=".", + result=".", + ), + fx_structure.GetBaseNameData( + sign="relative_parentdir", + value="..", + result="..", + ), + fx_structure.GetBaseNameData( + sign="a", + value="a", + result="a", + ), + fx_structure.GetBaseNameData( + sign="a.txt", + value="a.txt", + result="a.txt", + ), + fx_structure.GetBaseNameData( + sign="root__a.txt", + value="/a.txt", + result="a.txt", + ), + fx_structure.GetBaseNameData( + sign="curdir__a.txt", + value="./a.txt", + result="a.txt", + ), + fx_structure.GetBaseNameData( + sign="parentdir__a.txt", + value="../a.txt", + result="a.txt", + ), + fx_structure.GetBaseNameData( + sign="path001", + value="a/b/c/my-file-name.txt", + result="my-file-name.txt", + ), + fx_structure.GetBaseNameData( + sign="path002", + value="a/b/c/my-file-name", + result="my-file-name", + ), + ] + + @pytest.fixture( + params=[ + pytest.param( + x, + id=x.sign, + ) + for x in sm_GetBaseNameDatas + ] + ) + def fx_get_basename_data( + self, + request: pytest.FixtureRequest, + ) -> fx_structure.GetBaseNameData: + assert isinstance(request, pytest.FixtureRequest) + assert type(request.param).__name__ == "GetBaseNameData" + return request.param + + def test_get_basename( + self, + os_ops: OsOperations, + fx_get_basename_data: fx_structure.GetBaseNameData, + ): + assert isinstance(os_ops, OsOperations) + assert type(fx_get_basename_data) is fx_structure.GetBaseNameData + + actual_value = os_ops.get_basename(fx_get_basename_data.value) + assert type(actual_value) is str + assert actual_value == fx_get_basename_data.result + return + + # -------------------------------------------------------------------- def test_get_process_children__no_children(self, os_ops: OsOperations): assert isinstance(os_ops, OsOperations) From 5cc0d07f2f258f8907e2c8d65d4c6f2c88356382 Mon Sep 17 00:00:00 2001 From: "d.kovalenko" Date: Thu, 2 Jul 2026 09:19:35 +0300 Subject: [PATCH 2/2] fx_structure.py is deleted (okama) --- tests/helpers/fx_structure.py | 11 ----------- tests/test_os_ops_common.py | 37 ++++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 27 deletions(-) delete mode 100644 tests/helpers/fx_structure.py diff --git a/tests/helpers/fx_structure.py b/tests/helpers/fx_structure.py deleted file mode 100644 index 036f00d..0000000 --- a/tests/helpers/fx_structure.py +++ /dev/null @@ -1,11 +0,0 @@ -# coding: utf-8 -from __future__ import annotations - -import dataclasses - - -@dataclasses.dataclass -class GetBaseNameData: - sign: str - value: str - result: str diff --git a/tests/test_os_ops_common.py b/tests/test_os_ops_common.py index bc76ab3..6877d8d 100644 --- a/tests/test_os_ops_common.py +++ b/tests/test_os_ops_common.py @@ -5,7 +5,6 @@ from tests.helpers.global_data import OsOpsDescrs from tests.helpers.global_data import OsOperations from tests.helpers.run_conditions import RunConditions -from tests.helpers import fx_structure import os import sys @@ -1550,53 +1549,59 @@ def test_is_abs_path__no(self, os_ops: OsOperations): return # -------------------------------------------------------------------- - sm_GetBaseNameDatas: typing.List[fx_structure.GetBaseNameData] = [ - fx_structure.GetBaseNameData( + @dataclasses.dataclass + class tagGetBaseNameData: + sign: str + value: str + result: str + + sm_GetBaseNameDatas: typing.List[tagGetBaseNameData] = [ + tagGetBaseNameData( sign="empty", value="", result="", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="relative_curdir", value=".", result=".", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="relative_parentdir", value="..", result="..", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="a", value="a", result="a", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="a.txt", value="a.txt", result="a.txt", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="root__a.txt", value="/a.txt", result="a.txt", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="curdir__a.txt", value="./a.txt", result="a.txt", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="parentdir__a.txt", value="../a.txt", result="a.txt", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="path001", value="a/b/c/my-file-name.txt", result="my-file-name.txt", ), - fx_structure.GetBaseNameData( + tagGetBaseNameData( sign="path002", value="a/b/c/my-file-name", result="my-file-name", @@ -1615,18 +1620,18 @@ def test_is_abs_path__no(self, os_ops: OsOperations): def fx_get_basename_data( self, request: pytest.FixtureRequest, - ) -> fx_structure.GetBaseNameData: + ) -> tagGetBaseNameData: assert isinstance(request, pytest.FixtureRequest) - assert type(request.param).__name__ == "GetBaseNameData" + assert type(request.param).__name__ == "tagGetBaseNameData" return request.param def test_get_basename( self, os_ops: OsOperations, - fx_get_basename_data: fx_structure.GetBaseNameData, + fx_get_basename_data: tagGetBaseNameData, ): assert isinstance(os_ops, OsOperations) - assert type(fx_get_basename_data) is fx_structure.GetBaseNameData + assert type(fx_get_basename_data) is __class__.tagGetBaseNameData actual_value = os_ops.get_basename(fx_get_basename_data.value) assert type(actual_value) is str