From 6a67a772407cebbb958efe83dc0341998d1e53dd Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 31 Oct 2014 21:47:36 +0200 Subject: [PATCH] Fix bug #1387309: Filter out ampersands and angle brackets --- openlp/core/common/__init__.py | 7 +++++ openlp/core/ui/firsttimewizard.py | 6 ++-- openlp/core/ui/projector/__init__.py | 31 +++++++++++++++++++ .../openlp_core_common/test_common.py | 16 +++++++++- 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 openlp/core/ui/projector/__init__.py diff --git a/openlp/core/common/__init__.py b/openlp/core/common/__init__.py index 833aa5d10..8929a54de 100644 --- a/openlp/core/common/__init__.py +++ b/openlp/core/common/__init__.py @@ -232,6 +232,13 @@ def qmd5_hash(salt, data): log.debug('qmd5_hash() returning "%s"' % hash_value) return decode(hash_value.data(), 'ascii') +def clean_button_text(button_text): + """ + Clean the & and other characters out of button text + + :param button_text: The text to clean + """ + return button_text.replace('&', '').replace('< ', '').replace(' >', '') from .openlpmixin import OpenLPMixin from .registry import Registry diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index a3c8dd7b2..4e83a3e74 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -31,7 +31,7 @@ The UI widgets for the first time wizard. """ from PyQt4 import QtCore, QtGui -from openlp.core.common import translate, is_macosx +from openlp.core.common import translate, is_macosx, clean_button_text from openlp.core.lib import build_icon from openlp.core.lib.ui import add_welcome_page @@ -220,7 +220,7 @@ class UiFirstTimeWizard(object): first_time_wizard.information_label.setText( translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use. ' 'Click the %s button below to start.') % - first_time_wizard.buttonText(QtGui.QWizard.NextButton)) + clean_button_text(first_time_wizard.buttonText(QtGui.QWizard.NextButton))) self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins')) self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. ')) self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs')) @@ -245,7 +245,7 @@ class UiFirstTimeWizard(object): self.cancel_wizard_text = translate('OpenLP.FirstTimeWizard', '\n\nTo cancel the First Time Wizard completely (and not start OpenLP), ' 'click the %s button now.') % \ - first_time_wizard.buttonText(QtGui.QWizard.CancelButton) + clean_button_text(first_time_wizard.buttonText(QtGui.QWizard.CancelButton)) self.songs_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) self.songs_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.')) self.bibles_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Bibles')) diff --git a/openlp/core/ui/projector/__init__.py b/openlp/core/ui/projector/__init__.py new file mode 100644 index 000000000..9b51f110b --- /dev/null +++ b/openlp/core/ui/projector/__init__.py @@ -0,0 +1,31 @@ +# -*- 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 # +############################################################################### +""" +The Projector driver module. +""" \ No newline at end of file diff --git a/tests/functional/openlp_core_common/test_common.py b/tests/functional/openlp_core_common/test_common.py index 0474bd404..7398b885e 100644 --- a/tests/functional/openlp_core_common/test_common.py +++ b/tests/functional/openlp_core_common/test_common.py @@ -33,7 +33,7 @@ Functional tests to test the AppLocation class and related methods. from unittest import TestCase from openlp.core.common import check_directory_exists, de_hump, trace_error_handler, translate, is_win, is_macosx, \ - is_linux + is_linux, clean_button_text from tests.functional import MagicMock, patch @@ -188,3 +188,17 @@ class TestCommonFunctions(TestCase): self.assertTrue(is_linux(), 'is_linux() should return True') self.assertFalse(is_win(), 'is_win() should return False') self.assertFalse(is_macosx(), 'is_macosx() should return False') + + def clean_button_text_test(self): + """ + Test the clean_button_text() function. + """ + # GIVEN: Button text + input_text = '&Next >' + expected_text = 'Next' + + # WHEN: The button caption is sent through the clean_button_text function + actual_text = clean_button_text(input_text) + + # THEN: The text should have been cleaned + self.assertEqual(expected_text, actual_text, 'The text should be clean')