def setUp(self): self.testClass = CheckResources() self.toolsSystem = ToolsSystem() self.distutils = distutils.util
class CheckResources(): toolsSystem = None # Ссылка на объект ToolsSystem. distutils = None # Ссылка на объект distutils.util def __init__(self): self.toolsSystem = ToolsSystem() self.distutils = distutils.util def check(self, type_, resources): """ Проверка наличия указанного ресурса. Аргументы: type_ - (string) тип обрабатываемого ресурса. resources - (list) ресурс(ы) (ссылки на файлы или параметро операционной системы) Возвращает: При отсутсвии ошибок: None При возникновении ошибки: (string) - описание результата. Исключения: ValueError - переданы некорректное значение переменной. TypeError - переданн некорректный тип значений описания ресурсов. """ # Проверка принадлежности resource к list() if not isinstance(resources, list): raise TypeError(u"Параметр resource не относится к типу list()") # Тип операционной системы (windows|linux): if type_ == "OS_TYPE": return self._checkOsType(resources) # Версия операционной сисмены конкретной платформы (для Windows: 5.1, 5.2, 6.0 и т.п.) elif type_ == "OS_VER": return self._checkOsVersion(resources) elif type_ == "OS_ARCH": return self._checkOsArch(resources) elif type_ == "FILE_EXIST": return self._checkFileExist(resources) else: raise TypeError(u"Передан неописанный тип ресурса %s" % type_) def _checkFileExist(self, resources): """ Проверка наличия файла. ВНИМАНИЕ: только для платформы Windows. Аргументв: resources (list) - список файлов, которые необходимо проверить. Возвращает: None - все файлы присутсвуют. (string) - описание ошибки, если хотя бы один файл отсутсвует. Исключения: ValueError - недопустимые аргументы. """ if not len(resources): # Если список пуст. raise ValueError(u"Список проверяемых на наличие файлов отсутсвует.") for item in resources: if not len(item): raise ValueError(u"Передано пустое имя файла.") if not os.path.exists(item): return u"Не обнаружен файл %s" % item def _checkOsArch(self, resources): """ Проверка архитектуры операционной системы. ВНИМАНИЕ: только для платформы Windows. Аргументы: resources (list) - список проверки принадлежности к архитектуре - x32|x64 Возвращает: None - текущая архитектура в проверяемом списке есть. (string) - описание несоответствия. Исколючения: ValueError - указана недопустимая архитектура. """ osArch = ["x32", "x64"] curArch = "x64" if self.distutils.get_platform().find("64") else "x32" # Текущая архитектура комьпютера. if not len(resources): # Если список пуст. return u"Неподдерживаемая архитектура " + curArch result = None # Если при выходе остался None, значит архитектура есть в списке. for item in resources: if item not in osArch: # Переданы некорректные параметры: raise ValueError(u"Передан неправильный идентификатор архитектуры: " + item) if item == curArch: result = None break else: result = u"Неподдерживаемая архитектура операционной системы: " + curArch if result: return result return None def _checkOsVersion(self, resources): """ Проверка версии операционной системы. ВНИМАНИЕ: только для платформы Windows. Аргументы: resources - (list) список проверямых на принадлежность версий платформы: win2000, winxp, win2003, winvista, win7, win2008, win8 Возвращает: None - текущая версия есть в проверяемом списке. (string) - сообщение о несоответсвии. Исключения: ValueError - указан некорректный идентификатор операционной системы. """ result = None # Если result останется None, значит указанная версия есть в списке. osVer = { # Идентификаторы и номера версий Windows. "win2000": "5.0", "winxp": "5.1", "win2003": "5.2", "winvista": "6.0", "win7": "6.1", "win2008": "6.1", "win8": "6.2", } curVer = self.toolsSystem.getWindowsVersion() if not len(resources): # Проверка на заполненность списка. return u"Неподдерживаемая версия Windows: " + curVer for item in resources: if item not in osVer: raise ValueError(u"Указан несуществующий иденификатор версии Windows: " + item) if sys.platform == "win32": if curVer != osVer[item]: result = u"Неподдерживаемая версия Windows: " + curVer else: result = None break else: raise ValueError(u"Платформа %s не поддерживается для опознавания." % sys.platform) if result: return result return None def _checkOsType(self, resources): """ Проверка платформы операционной системы. Аргументы: resources - (list) список проверямых на принадлежность платформ (windows, linux) Возвращает: None - текущая платформа соответсвует проверяемой. (string) - сообщение о несоответсвии. """ result = None # Если result останется None, значит указанная платформа существует. for item in resources: if item.upper() == "WINDOWS": if sys.platform != "win32": result = u"Не предназначено для платформы " + sys.platform else: result = None break elif item.upper() == "LINUX": if sys.platform.find("linux") == -1: result = u"Не предназначен для пратформы " + sys.platform else: result = None break else: raise ValueError(u"Передан необрабатываемый или некорректный параметр: " + item) if result: return result return None
class TestCheckResources(unittest.TestCase): """ Тестирование класса CheckResources. """ testClass = None # Ссылка на тестируемый класс. toolsSystem = None # Ссылка на класс toolSystem. distutils = None # Ссылка на объект distutils.util def setUp(self): self.testClass = CheckResources() self.toolsSystem = ToolsSystem() self.distutils = distutils.util def testCheck(self): """ Тест класса check() """ # Проверка типа: self.assertRaises(TypeError, self.testClass.check, "ERROR_TYPE", "Non list value") # Проверка OS_TYPE: self.assertRaises(TypeError, self.testClass.check, "OS_TYPE", "Non list value") self.assertRaises(ValueError, self.testClass.check, "OS_TYPE", ["error_value"]) if sys.platform == "win32": self.assertNotEqual(self.testClass.check("OS_TYPE", ["linux"]), None) self.assertEqual(self.testClass.check("OS_TYPE", ["linux", "windows"]), None) self.assertEqual(self.testClass.check("OS_TYPE", ["windows"]), None) # Провека OS_VER: if sys.platform == "win32": osVer = { # Идентификаторы и номера версий Windows. "5.0": "win2000", "5.1": "winxp", "5.2": "win2003", "6.0": "winvista", "6.1": "win7", "6.2": "win8", } curVer = self.toolsSystem.getWindowsVersion() self.assertRaises(ValueError, self.testClass.check, "OS_VER", ["error_value"]) self.assertEqual(self.testClass.check("OS_VER", ["win2000", "win2003", osVer[curVer]]), None) if osVer[curVer] != "win2000": self.assertNotEqual(self.testClass.check("OS_VER", ["win2000"]), None) else: self.assertNotEqual(self.testClass.check("OS_VER", ["win2008"]), None) self.assertNotEqual(self.testClass.check("OS_VER", []), None) # Проверка OS_ARCH: if sys.platform == "win32": curArch = "x64" if self.distutils.get_platform().find("64") else "x32" # Текущая архитектура комьпютера. self.assertNotEqual(self.testClass.check("OS_ARCH", []), None) self.assertRaises(ValueError, self.testClass.check, "OS_ARCH", ["error_value"]) self.assertEqual(self.testClass.check("OS_ARCH", [curArch]), None) if curArch == "x64": self.assertNotEqual(self.testClass.check("OS_ARCH", ["x32"]), None) else: self.assertNotEqual(self.testClass.check("OS_ARCH", ["x64"]), None) # Прверка FILE_EXIST: self.assertRaises(ValueError, self.testClass.check, "FILE_EXIST", []) if os.path.exists("c:\\Windows\\explorer.exe"): self.assertEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe"]), None) self.assertEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe", "c:\\Windows\\explorer.exe"]), None) self.assertNotEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\explorer.exe", "c:\\Windows\\NonFileExist.exe"]), None) self.assertRaises(ValueError, self.testClass.check, "FILE_EXIST", ["c:\\Windows\\explorer.exe", ""]) self.assertNotEqual(self.testClass.check("FILE_EXIST", ["c:\\Windows\\NonFileExist.exe"]), None)
def __init__(self): self.toolsSystem = ToolsSystem() self.distutils = distutils.util