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/test_os_ops_common.py b/tests/test_os_ops_common.py index 8866c49..6877d8d 100644 --- a/tests/test_os_ops_common.py +++ b/tests/test_os_ops_common.py @@ -1548,6 +1548,97 @@ def test_is_abs_path__no(self, os_ops: OsOperations): assert actual_value is False return + # -------------------------------------------------------------------- + @dataclasses.dataclass + class tagGetBaseNameData: + sign: str + value: str + result: str + + sm_GetBaseNameDatas: typing.List[tagGetBaseNameData] = [ + tagGetBaseNameData( + sign="empty", + value="", + result="", + ), + tagGetBaseNameData( + sign="relative_curdir", + value=".", + result=".", + ), + tagGetBaseNameData( + sign="relative_parentdir", + value="..", + result="..", + ), + tagGetBaseNameData( + sign="a", + value="a", + result="a", + ), + tagGetBaseNameData( + sign="a.txt", + value="a.txt", + result="a.txt", + ), + tagGetBaseNameData( + sign="root__a.txt", + value="/a.txt", + result="a.txt", + ), + tagGetBaseNameData( + sign="curdir__a.txt", + value="./a.txt", + result="a.txt", + ), + tagGetBaseNameData( + sign="parentdir__a.txt", + value="../a.txt", + result="a.txt", + ), + tagGetBaseNameData( + sign="path001", + value="a/b/c/my-file-name.txt", + result="my-file-name.txt", + ), + tagGetBaseNameData( + 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, + ) -> tagGetBaseNameData: + assert isinstance(request, pytest.FixtureRequest) + assert type(request.param).__name__ == "tagGetBaseNameData" + return request.param + + def test_get_basename( + self, + os_ops: OsOperations, + fx_get_basename_data: tagGetBaseNameData, + ): + assert isinstance(os_ops, OsOperations) + 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 + 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)