def mock_virtualenv_winreg(cls, monkeypatch, data): def enum_key(key, index): try: return data.get(key, [])[index] except IndexError: raise WindowsError def query_value(key, path): installed_version_tags = data.get(key, []) suffix = "\\InstallPath" if path.endswith(suffix): version_tag = path[: -len(suffix)] if version_tag in installed_version_tags: return "{}-{}-path".format(key, version_tag) raise WindowsError mock_winreg = NonCallableMock( spec_set=["HKEY_LOCAL_MACHINE", "HKEY_CURRENT_USER", "CreateKey", "EnumKey", "QueryValue", "CloseKey"] ) mock_winreg.HKEY_LOCAL_MACHINE = "HKEY_LOCAL_MACHINE" mock_winreg.HKEY_CURRENT_USER = "******" mock_winreg.CreateKey.side_effect = [cls.key_local_machine, cls.key_current_user] mock_winreg.EnumKey.side_effect = enum_key mock_winreg.QueryValue.side_effect = query_value mock_winreg.CloseKey.return_value = None monkeypatch.setattr(virtualenv, "winreg", mock_winreg) return mock_winreg