Fixes for windows tests and for starting OpenLP on windows.

This commit is contained in:
Tomas Groth 2014-03-24 17:49:50 +01:00
parent 5eae5b2090
commit 8ad47cb888
4 changed files with 71 additions and 8 deletions

View File

@ -34,6 +34,7 @@ if os.name == 'nt':
from ctypes import cdll from ctypes import cdll
from ctypes.wintypes import RECT from ctypes.wintypes import RECT
from openlp.core.utils import AppLocation
from openlp.core.lib import ScreenList from openlp.core.lib import ScreenList
from .presentationcontroller import PresentationController, PresentationDocument from .presentationcontroller import PresentationController, PresentationDocument
@ -85,8 +86,8 @@ class PptviewController(PresentationController):
if self.process: if self.process:
return return
log.debug('start PPTView') log.debug('start PPTView')
dll_path = os.path.join( dll_path = os.path.join(AppLocation.get_directory(AppLocation.AppDir),
self.plugin_manager.base_path, 'presentations', 'lib', 'pptviewlib', 'pptviewlib.dll') 'presentations', 'lib', 'pptviewlib', 'pptviewlib.dll')
self.process = cdll.LoadLibrary(dll_path) self.process = cdll.LoadLibrary(dll_path)
if log.isEnabledFor(logging.DEBUG): if log.isEnabledFor(logging.DEBUG):
self.process.SetDebug(1) self.process.SetDebug(1)

View File

@ -30,19 +30,78 @@
This module contains tests for the pptviewcontroller module of the Presentations plugin. This module contains tests for the pptviewcontroller module of the Presentations plugin.
""" """
import os import os
import shutil
if os.name == 'nt':
from ctypes import cdll
from tempfile import mkdtemp
from unittest import TestCase from unittest import TestCase
from tests.functional import MagicMock, patch from tests.functional import MagicMock, patch
from tests.helpers.testmixin import TestMixin
from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument, PptviewController
class TestPptviewController(TestCase, TestMixin):
"""
Test the PptviewController Class
"""
#TODO: Items left to test #TODO: Items left to test
# PptviewController # PptviewController
# __init__
# check_availablecheck_installed
# start_process(self) # start_process(self)
# kill # kill
def setUp(self):
"""
Set up the patches and mocks need for all tests.
"""
self.get_application()
self.build_settings()
self.mock_plugin = MagicMock()
self.temp_folder = mkdtemp()
self.mock_plugin.settings_section = self.temp_folder
def tearDown(self):
"""
Stop the patches
"""
self.destroy_settings()
shutil.rmtree(self.temp_folder)
def constructor_test(self):
"""
Test the Constructor from the PptViewController
"""
# GIVEN: No presentation controller
controller = None
# WHEN: The presentation controller object is created
controller = PptviewController(plugin=self.mock_plugin)
# THEN: The name of the presentation controller should be correct
self.assertEqual('Powerpoint Viewer', controller.name, 'The name of the presentation controller should be correct')
def check_available_test(self):
"""
Test check_available / check_installed
"""
# GIVEN: A mocked dll loader and a controller
with patch('ctypes.cdll.LoadLibrary') as mocked_load_library:
mocked_process = MagicMock()
mocked_process.CheckInstalled.return_value = True
mocked_load_library.return_value = mocked_process
controller = PptviewController(plugin=self.mock_plugin)
# WHEN: check_available is called
available = controller.check_available()
# THEN: On windows it should return True, on other platforms False
if os.name == 'nt':
self.assertTrue(available, 'check_available should return True on windows.')
else:
self.assertFalse(available, 'check_available should return False when not on windows.')
class TestPptviewDocument(TestCase): class TestPptviewDocument(TestCase):
""" """

View File

@ -53,13 +53,12 @@ class TestMixin(object):
Build the settings Object and initialise it Build the settings Object and initialise it
""" """
Settings.setDefaultFormat(Settings.IniFormat) Settings.setDefaultFormat(Settings.IniFormat)
fd, self.ini_file = mkstemp('.ini') self.fd, self.ini_file = mkstemp('.ini')
Settings().set_filename(self.ini_file) Settings().set_filename(self.ini_file)
def destroy_settings(self): def destroy_settings(self):
""" """
Destroy the Settings Object Destroy the Settings Object
""" """
if hasattr(self, 'fd'):
os.close(self.fd) os.close(self.fd)
os.unlink(Settings().fileName()) os.unlink(Settings().fileName())

View File

@ -31,6 +31,7 @@ Package to test the openlp.core.lib.pluginmanager package.
""" """
import sys import sys
import shutil import shutil
import gc
from tempfile import mkdtemp from tempfile import mkdtemp
from unittest import TestCase from unittest import TestCase
@ -65,6 +66,9 @@ class TestPluginManager(TestCase, TestMixin):
del self.main_window del self.main_window
Settings().remove('advanced/data path') Settings().remove('advanced/data path')
self.destroy_settings() self.destroy_settings()
# On windows we need to manually garbage collect to close sqlalchemy files
# to avoid errors when temporary files are deleted.
gc.collect()
shutil.rmtree(self.temp_dir) shutil.rmtree(self.temp_dir)
def find_plugins_test(self): def find_plugins_test(self):