openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #22799
[Merge] lp:~tomasgroth/openlp/windows-fixes into lp:openlp
Tomas Groth has proposed merging lp:~tomasgroth/openlp/windows-fixes into lp:openlp.
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~tomasgroth/openlp/windows-fixes/+merge/212480
Fixes for windows, testsuite and starting.
--
https://code.launchpad.net/~tomasgroth/openlp/windows-fixes/+merge/212480
Your team OpenLP Core is requested to review the proposed merge of lp:~tomasgroth/openlp/windows-fixes into lp:openlp.
=== modified file 'openlp/plugins/presentations/lib/pptviewcontroller.py'
--- openlp/plugins/presentations/lib/pptviewcontroller.py 2014-03-08 21:23:47 +0000
+++ openlp/plugins/presentations/lib/pptviewcontroller.py 2014-03-24 16:52:53 +0000
@@ -34,6 +34,7 @@
from ctypes import cdll
from ctypes.wintypes import RECT
+from openlp.core.utils import AppLocation
from openlp.core.lib import ScreenList
from .presentationcontroller import PresentationController, PresentationDocument
@@ -85,8 +86,8 @@
if self.process:
return
log.debug('start PPTView')
- dll_path = os.path.join(
- self.plugin_manager.base_path, 'presentations', 'lib', 'pptviewlib', 'pptviewlib.dll')
+ dll_path = os.path.join(AppLocation.get_directory(AppLocation.AppDir),
+ 'presentations', 'lib', 'pptviewlib', 'pptviewlib.dll')
self.process = cdll.LoadLibrary(dll_path)
if log.isEnabledFor(logging.DEBUG):
self.process.SetDebug(1)
=== modified file 'tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py 2014-03-08 21:23:47 +0000
+++ tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py 2014-03-24 16:52:53 +0000
@@ -30,19 +30,78 @@
This module contains tests for the pptviewcontroller module of the Presentations plugin.
"""
import os
+import shutil
+if os.name == 'nt':
+ from ctypes import cdll
+
+from tempfile import mkdtemp
from unittest import TestCase
from tests.functional import MagicMock, patch
-
-from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument
-
+from tests.helpers.testmixin import TestMixin
+
+from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument, PptviewController
+
+
+class TestPptviewController(TestCase, TestMixin):
+ """
+ Test the PptviewController Class
+ """
#TODO: Items left to test
# PptviewController
-# __init__
-# check_availablecheck_installed
# start_process(self)
# 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):
"""
=== modified file 'tests/helpers/testmixin.py'
--- tests/helpers/testmixin.py 2014-03-14 22:08:44 +0000
+++ tests/helpers/testmixin.py 2014-03-24 16:52:53 +0000
@@ -53,13 +53,12 @@
Build the settings Object and initialise it
"""
Settings.setDefaultFormat(Settings.IniFormat)
- fd, self.ini_file = mkstemp('.ini')
+ self.fd, self.ini_file = mkstemp('.ini')
Settings().set_filename(self.ini_file)
def destroy_settings(self):
"""
Destroy the Settings Object
"""
- if hasattr(self, 'fd'):
- os.close(self.fd)
+ os.close(self.fd)
os.unlink(Settings().fileName())
=== modified file 'tests/interfaces/openlp_core_lib/test_pluginmanager.py'
--- tests/interfaces/openlp_core_lib/test_pluginmanager.py 2014-03-14 22:08:44 +0000
+++ tests/interfaces/openlp_core_lib/test_pluginmanager.py 2014-03-24 16:52:53 +0000
@@ -31,6 +31,7 @@
"""
import sys
import shutil
+import gc
from tempfile import mkdtemp
from unittest import TestCase
@@ -65,6 +66,9 @@
del self.main_window
Settings().remove('advanced/data path')
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)
def find_plugins_test(self):
Follow ups