← Back to team overview

openlp-core team mailing list archive

[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