Merge head

This commit is contained in:
Samuel Mehrbrodt 2014-03-28 17:06:37 +01:00
commit dadfbcfacb
6 changed files with 129 additions and 11 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

@ -607,7 +607,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
def on_verse_add_button_clicked(self): def on_verse_add_button_clicked(self):
self.verse_form.set_verse('', True) self.verse_form.set_verse('', True)
if self.verse_form.exec_(): if self.verse_form.exec_():
after_text, verse_tag, verse_num = self.verse_form.get_verse after_text, verse_tag, verse_num = self.verse_form.get_verse()
verse_def = '%s%s' % (verse_tag, verse_num) verse_def = '%s%s' % (verse_tag, verse_num)
item = QtGui.QTableWidgetItem(after_text) item = QtGui.QTableWidgetItem(after_text)
item.setData(QtCore.Qt.UserRole, verse_def) item.setData(QtCore.Qt.UserRole, verse_def)
@ -625,7 +625,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
verse_id = item.data(QtCore.Qt.UserRole) verse_id = item.data(QtCore.Qt.UserRole)
self.verse_form.set_verse(temp_text, True, verse_id) self.verse_form.set_verse(temp_text, True, verse_id)
if self.verse_form.exec_(): if self.verse_form.exec_():
after_text, verse_tag, verse_num = self.verse_form.get_verse after_text, verse_tag, verse_num = self.verse_form.get_verse()
verse_def = '%s%s' % (verse_tag, verse_num) verse_def = '%s%s' % (verse_tag, verse_num)
item.setData(QtCore.Qt.UserRole, verse_def) item.setData(QtCore.Qt.UserRole, verse_def)
item.setText(after_text) item.setText(after_text)
@ -667,7 +667,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog, RegistryProperties):
self.verse_form.set_verse('') self.verse_form.set_verse('')
if not self.verse_form.exec_(): if not self.verse_form.exec_():
return return
verse_list = self.verse_form.get_all_verses verse_list = self.verse_form.get_all_verses()
verse_list = str(verse_list.replace('\r\n', '\n')) verse_list = str(verse_list.replace('\r\n', '\n'))
self.verse_list_widget.clear() self.verse_list_widget.clear()
self.verse_list_widget.setRowCount(0) self.verse_list_widget.setRowCount(0)

View File

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
Package to test the openlp.core.lib.ui package.
"""
from PyQt4 import QtGui
from unittest import TestCase
from openlp.core.lib.ui import *
class TestUi(TestCase):
"""
Test the functions in the ui module
"""
def test_add_welcome_page(self):
"""
Test appending a welcome page to a wizard
"""
# GIVEN: A wizard
wizard = QtGui.QWizard()
# WHEN: A welcome page has been added to the wizard
add_welcome_page(wizard, ':/wizards/wizard_firsttime.bmp')
# THEN: The wizard should have one page with a pixmap.
self.assertEqual(1, len(wizard.pageIds()), 'The wizard should have one page.')
self.assertIsInstance(wizard.page(0).pixmap(QtGui.QWizard.WatermarkPixmap), QtGui.QPixmap)

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):