Source code for geolocate.tests.testing_tools

"""
 testing_tools.py

 Programmed by: Dante Signal31

 email: dante.signal31@gmail.com
"""

import ntpath
import os
import shutil
import tempfile


[docs]class OriginalFileSaved(object): """Context manager to store original files in a safe place for tests and restore it after them. """ def __init__(self, original_file_path): """ :param original_file_path: File name including path. :type original_file_path: str """ self._original_file_path = original_file_path self._original_file_name = _get_file_name(original_file_path) self._backup_directory = _create_temporary_directory() self._backup_file_path = os.path.join(self._backup_directory.name, self._original_file_name) def __enter__(self): self._backup_file() return self def _backup_file(self): shutil.copyfile(self._original_file_path, self._backup_file_path) def __exit__(self, exc_type, exc_val, exc_tb): self._restore_file() self._remove_backup_directory() if exc_type is None: return True else: return False def _restore_file(self): shutil.copyfile(self._backup_file_path, self._original_file_path) def _remove_backup_directory(self): self._backup_directory.cleanup()
def _get_file_name(file_path): """ :param file_path: File name including path. :type file_path: str :return: File name. :rtype: str """ file_name = ntpath.basename(file_path) return file_name def _create_temporary_directory(): """ :return: Temporary directory just created. :rtype: TemporaryDirectory. """ temporary_directory = tempfile.TemporaryDirectory() return temporary_directory
[docs]class WorkingDirectoryChanged(object): """ Sometimes unit test executes at a different path level than usual execution code. This context manager restores normal working directory after context manager exit. """ def __init__(self, new_working_dir): """ :param new_working_dir: New working path. :return: str """ self._old_working_dir = os.getcwd() self._new_working_dir = new_working_dir def __enter__(self): os.chdir(self._new_working_dir) def __exit__(self, exc_type, exc_val, exc_tb): os.chdir(self._old_working_dir) if exc_type is None: return True else: return False