← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/may_fixes into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/may_fixes into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~trb143/openlp/may_fixes/+merge/295377

Fix formatting tags 
Move SpellTextEdit as missed
Add working flags API's to registry

lp:~trb143/openlp/may_fixes (revision 2670)
[SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/1569/
[SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/1480/
[SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1418/
[SUCCESS] https://ci.openlp.io/job/Branch-04a-Windows_Functional_Tests/1198/
[SUCCESS] https://ci.openlp.io/job/Branch-04b-Windows_Interface_Tests/788/
[SUCCESS] https://ci.openlp.io/job/Branch-05a-Code_Analysis/856/
[SUCCESS] https://ci.openlp.io/job/Branch-05b-Test_Coverage/724/

-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/may_fixes into lp:openlp.
=== modified file 'openlp/core/common/registry.py'
--- openlp/core/common/registry.py	2016-05-14 04:24:46 +0000
+++ openlp/core/common/registry.py	2016-05-21 05:31:49 +0000
@@ -55,6 +55,7 @@
         registry = cls()
         registry.service_list = {}
         registry.functions_list = {}
+        registry.working_flags = {}
         # Allow the tests to remove Registry entries but not the live system
         registry.running_under_test = 'nose' in sys.argv[0]
         registry.initialising = True
@@ -90,8 +91,7 @@
 
     def remove(self, key):
         """
-        Removes the registry value from the list based on the key passed in (Only valid and active for testing
-        framework).
+        Removes the registry value from the list based on the key passed in.
 
         :param key: The service to be deleted.
         """
@@ -145,3 +145,39 @@
             trace_error_handler(log)
             log.error("Event {event} called but not registered".format(event=event))
         return results
+
+    def get_flag(self, key):
+        """
+        Extracts the working_flag value from the list based on the key passed in
+
+        :param key: The flag to be retrieved.
+        """
+        if key in self.working_flags:
+            return self.working_flags[key]
+        else:
+            trace_error_handler(log)
+            log.error('Working Flag {key} not found in list'.format(key=key))
+            raise KeyError('Working Flag {key} not found in list'.format(key=key))
+
+    def set_flag(self, key, reference):
+        """
+        Sets a working_flag based on the key passed in.
+
+        :param key: The working_flag to be created this is usually a major class like "renderer" or "main_window" .
+        :param reference: The data to be saved.
+        """
+        if key in self.working_flags:
+            trace_error_handler(log)
+            log.error('Duplicate Working Flag exception {key}'.format(key=key))
+            raise KeyError('Duplicate Working Flag exception {key}'.format(key=key))
+        else:
+            self.working_flags[key] = reference
+
+    def remove_flag(self, key):
+        """
+        Removes the working flags value from the list based on the key passed.
+
+        :param key: The working_flag to be deleted.
+        """
+        if key in self.working_flags:
+            del self.working_flags[key]

=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2016-05-16 16:26:29 +0000
+++ openlp/core/lib/__init__.py	2016-05-21 05:31:49 +0000
@@ -24,13 +24,12 @@
 OpenLP work.
 """
 
-from distutils.version import LooseVersion
 import logging
 import os
+from distutils.version import LooseVersion
 
 from PyQt5 import QtCore, QtGui, Qt, QtWidgets
 
-
 from openlp.core.common import translate
 
 log = logging.getLogger(__name__ + '.__init__')
@@ -342,7 +341,6 @@
 from .filedialog import FileDialog
 from .screen import ScreenList
 from .formattingtags import FormattingTags
-from .spelltextedit import SpellTextEdit
 from .plugin import PluginStatus, StringContent, Plugin
 from .pluginmanager import PluginManager
 from .settingstab import SettingsTab

=== removed file 'openlp/core/lib/spelltextedit.py'
--- openlp/core/lib/spelltextedit.py	2015-12-31 22:46:06 +0000
+++ openlp/core/lib/spelltextedit.py	1970-01-01 00:00:00 +0000
@@ -1,203 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2016 OpenLP Developers                                   #
-# --------------------------------------------------------------------------- #
-# 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 :mod:`~openlp.core.lib.spelltextedit` module contains a classes to add spell checking to an edit widget.
-"""
-
-import logging
-import re
-
-try:
-    import enchant
-    from enchant import DictNotFoundError
-    from enchant.errors import Error
-    ENCHANT_AVAILABLE = True
-except ImportError:
-    ENCHANT_AVAILABLE = False
-
-# based on code from http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check
-
-from PyQt5 import QtCore, QtGui, QtWidgets
-
-from openlp.core.lib import translate, FormattingTags
-from openlp.core.lib.ui import create_action
-
-log = logging.getLogger(__name__)
-
-
-class SpellTextEdit(QtWidgets.QPlainTextEdit):
-    """
-    Spell checking widget based on QPlanTextEdit.
-    """
-    def __init__(self, parent=None, formatting_tags_allowed=True):
-        """
-        Constructor.
-        """
-        global ENCHANT_AVAILABLE
-        super(SpellTextEdit, self).__init__(parent)
-        self.formatting_tags_allowed = formatting_tags_allowed
-        # Default dictionary based on the current locale.
-        if ENCHANT_AVAILABLE:
-            try:
-                self.dictionary = enchant.Dict()
-                self.highlighter = Highlighter(self.document())
-                self.highlighter.spelling_dictionary = self.dictionary
-            except (Error, DictNotFoundError):
-                ENCHANT_AVAILABLE = False
-                log.debug('Could not load default dictionary')
-
-    def mousePressEvent(self, event):
-        """
-        Handle mouse clicks within the text edit region.
-        """
-        if event.button() == QtCore.Qt.RightButton:
-            # Rewrite the mouse event to a left button event so the cursor is moved to the location of the pointer.
-            event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
-                                      event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
-        QtWidgets.QPlainTextEdit.mousePressEvent(self, event)
-
-    def contextMenuEvent(self, event):
-        """
-        Provide the context menu for the text edit region.
-        """
-        popup_menu = self.createStandardContextMenu()
-        # Select the word under the cursor.
-        cursor = self.textCursor()
-        # only select text if not already selected
-        if not cursor.hasSelection():
-            cursor.select(QtGui.QTextCursor.WordUnderCursor)
-        self.setTextCursor(cursor)
-        # Add menu with available languages.
-        if ENCHANT_AVAILABLE:
-            lang_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Language:'))
-            for lang in enchant.list_languages():
-                action = create_action(lang_menu, lang, text=lang, checked=lang == self.dictionary.tag)
-                lang_menu.addAction(action)
-            popup_menu.insertSeparator(popup_menu.actions()[0])
-            popup_menu.insertMenu(popup_menu.actions()[0], lang_menu)
-            lang_menu.triggered.connect(self.set_language)
-        # Check if the selected word is misspelled and offer spelling suggestions if it is.
-        if ENCHANT_AVAILABLE and self.textCursor().hasSelection():
-            text = self.textCursor().selectedText()
-            if not self.dictionary.check(text):
-                spell_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Spelling Suggestions'))
-                for word in self.dictionary.suggest(text):
-                    action = SpellAction(word, spell_menu)
-                    action.correct.connect(self.correct_word)
-                    spell_menu.addAction(action)
-                # Only add the spelling suggests to the menu if there are suggestions.
-                if spell_menu.actions():
-                    popup_menu.insertMenu(popup_menu.actions()[0], spell_menu)
-        tag_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags'))
-        if self.formatting_tags_allowed:
-            for html in FormattingTags.get_html_tags():
-                action = SpellAction(html['desc'], tag_menu)
-                action.correct.connect(self.html_tag)
-                tag_menu.addAction(action)
-            popup_menu.insertSeparator(popup_menu.actions()[0])
-            popup_menu.insertMenu(popup_menu.actions()[0], tag_menu)
-        popup_menu.exec(event.globalPos())
-
-    def set_language(self, action):
-        """
-        Changes the language for this spelltextedit.
-
-        :param action: The action.
-        """
-        self.dictionary = enchant.Dict(action.text())
-        self.highlighter.spelling_dictionary = self.dictionary
-        self.highlighter.highlightBlock(self.toPlainText())
-        self.highlighter.rehighlight()
-
-    def correct_word(self, word):
-        """
-        Replaces the selected text with word.
-        """
-        cursor = self.textCursor()
-        cursor.beginEditBlock()
-        cursor.removeSelectedText()
-        cursor.insertText(word)
-        cursor.endEditBlock()
-
-    def html_tag(self, tag):
-        """
-        Replaces the selected text with word.
-        """
-        for html in FormattingTags.get_html_tags():
-            if tag == html['desc']:
-                cursor = self.textCursor()
-                if self.textCursor().hasSelection():
-                    text = cursor.selectedText()
-                    cursor.beginEditBlock()
-                    cursor.removeSelectedText()
-                    cursor.insertText(html['start tag'])
-                    cursor.insertText(text)
-                    cursor.insertText(html['end tag'])
-                    cursor.endEditBlock()
-                else:
-                    cursor = self.textCursor()
-                    cursor.insertText(html['start tag'])
-                    cursor.insertText(html['end tag'])
-
-
-class Highlighter(QtGui.QSyntaxHighlighter):
-    """
-    Provides a text highlighter for pointing out spelling errors in text.
-    """
-    WORDS = '(?iu)[\w\']+'
-
-    def __init__(self, *args):
-        """
-        Constructor
-        """
-        super(Highlighter, self).__init__(*args)
-        self.spelling_dictionary = None
-
-    def highlightBlock(self, text):
-        """
-        Highlight mis spelt words in a block of text.
-
-        Note, this is a Qt hook.
-        """
-        if not self.spelling_dictionary:
-            return
-        text = str(text)
-        char_format = QtGui.QTextCharFormat()
-        char_format.setUnderlineColor(QtCore.Qt.red)
-        char_format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline)
-        for word_object in re.finditer(self.WORDS, text):
-            if not self.spelling_dictionary.check(word_object.group()):
-                self.setFormat(word_object.start(), word_object.end() - word_object.start(), char_format)
-
-
-class SpellAction(QtWidgets.QAction):
-    """
-    A special QAction that returns the text in a signal.
-    """
-    correct = QtCore.pyqtSignal(str)
-
-    def __init__(self, *args):
-        """
-        Constructor
-        """
-        super(SpellAction, self).__init__(*args)
-        self.triggered.connect(lambda x: self.correct.emit(self.text()))

=== modified file 'openlp/core/ui/lib/__init__.py'
--- openlp/core/ui/lib/__init__.py	2016-04-22 19:04:17 +0000
+++ openlp/core/ui/lib/__init__.py	2016-05-21 05:31:49 +0000
@@ -28,6 +28,7 @@
 from .wizard import OpenLPWizard, WizardStrings
 from .mediadockmanager import MediaDockManager
 from .listpreviewwidget import ListPreviewWidget
+from .spelltextedit import SpellTextEdit
 
 __all__ = ['ColorButton', 'ListPreviewWidget', 'ListWidgetWithDnD', 'OpenLPToolbar', 'OpenLPDockWidget',
-           'OpenLPWizard', 'WizardStrings', 'MediaDockManager', 'ListPreviewWidget']
+           'OpenLPWizard', 'WizardStrings', 'MediaDockManager', 'ListPreviewWidget', 'SpellTextEdit']

=== added file 'openlp/core/ui/lib/spelltextedit.py'
--- openlp/core/ui/lib/spelltextedit.py	1970-01-01 00:00:00 +0000
+++ openlp/core/ui/lib/spelltextedit.py	2016-05-21 05:31:49 +0000
@@ -0,0 +1,204 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2016 OpenLP Developers                                   #
+# --------------------------------------------------------------------------- #
+# 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 :mod:`~openlp.core.lib.spelltextedit` module contains a classes to add spell checking to an edit widget.
+"""
+
+import logging
+import re
+
+try:
+    import enchant
+    from enchant import DictNotFoundError
+    from enchant.errors import Error
+    ENCHANT_AVAILABLE = True
+except ImportError:
+    ENCHANT_AVAILABLE = False
+
+# based on code from http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+from openlp.core.lib import translate, FormattingTags
+from openlp.core.lib.ui import create_action
+
+log = logging.getLogger(__name__)
+
+
+class SpellTextEdit(QtWidgets.QPlainTextEdit):
+    """
+    Spell checking widget based on QPlanTextEdit.
+    """
+    def __init__(self, parent=None, formatting_tags_allowed=True):
+        """
+        Constructor.
+        """
+        global ENCHANT_AVAILABLE
+        super(SpellTextEdit, self).__init__(parent)
+        self.formatting_tags_allowed = formatting_tags_allowed
+        # Default dictionary based on the current locale.
+        if ENCHANT_AVAILABLE:
+            try:
+                self.dictionary = enchant.Dict()
+                self.highlighter = Highlighter(self.document())
+                self.highlighter.spelling_dictionary = self.dictionary
+            except (Error, DictNotFoundError):
+                ENCHANT_AVAILABLE = False
+                log.debug('Could not load default dictionary')
+
+    def mousePressEvent(self, event):
+        """
+        Handle mouse clicks within the text edit region.
+        """
+        if event.button() == QtCore.Qt.RightButton:
+            # Rewrite the mouse event to a left button event so the cursor is moved to the location of the pointer.
+            event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
+                                      event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
+        QtWidgets.QPlainTextEdit.mousePressEvent(self, event)
+
+    def contextMenuEvent(self, event):
+        """
+        Provide the context menu for the text edit region.
+        """
+        popup_menu = self.createStandardContextMenu()
+        # Select the word under the cursor.
+        cursor = self.textCursor()
+        # only select text if not already selected
+        if not cursor.hasSelection():
+            cursor.select(QtGui.QTextCursor.WordUnderCursor)
+        self.setTextCursor(cursor)
+        # Add menu with available languages.
+        if ENCHANT_AVAILABLE:
+            lang_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Language:'))
+            for lang in enchant.list_languages():
+                action = create_action(lang_menu, lang, text=lang, checked=lang == self.dictionary.tag)
+                lang_menu.addAction(action)
+            popup_menu.insertSeparator(popup_menu.actions()[0])
+            popup_menu.insertMenu(popup_menu.actions()[0], lang_menu)
+            lang_menu.triggered.connect(self.set_language)
+        # Check if the selected word is misspelled and offer spelling suggestions if it is.
+        if ENCHANT_AVAILABLE and self.textCursor().hasSelection():
+            text = self.textCursor().selectedText()
+            if not self.dictionary.check(text):
+                spell_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Spelling Suggestions'))
+                for word in self.dictionary.suggest(text):
+                    action = SpellAction(word, spell_menu)
+                    action.correct.connect(self.correct_word)
+                    spell_menu.addAction(action)
+                # Only add the spelling suggests to the menu if there are suggestions.
+                if spell_menu.actions():
+                    popup_menu.insertMenu(popup_menu.actions()[0], spell_menu)
+        tag_menu = QtWidgets.QMenu(translate('OpenLP.SpellTextEdit', 'Formatting Tags'))
+        if self.formatting_tags_allowed:
+            for html in FormattingTags.get_html_tags():
+                action = SpellAction(html['desc'], tag_menu)
+                action.correct.connect(self.html_tag)
+                tag_menu.addAction(action)
+            popup_menu.insertSeparator(popup_menu.actions()[0])
+            popup_menu.insertMenu(popup_menu.actions()[0], tag_menu)
+        popup_menu.exec(event.globalPos())
+
+    def set_language(self, action):
+        """
+        Changes the language for this spelltextedit.
+
+        :param action: The action.
+        """
+        self.dictionary = enchant.Dict(action.text())
+        self.highlighter.spelling_dictionary = self.dictionary
+        self.highlighter.highlightBlock(self.toPlainText())
+        self.highlighter.rehighlight()
+
+    def correct_word(self, word):
+        """
+        Replaces the selected text with word.
+        """
+        cursor = self.textCursor()
+        cursor.beginEditBlock()
+        cursor.removeSelectedText()
+        cursor.insertText(word)
+        cursor.endEditBlock()
+
+    def html_tag(self, tag):
+        """
+        Replaces the selected text with word.
+        """
+        for html in FormattingTags.get_html_tags():
+            tag = tag.replace('&', '')
+            if tag == html['desc']:
+                cursor = self.textCursor()
+                if self.textCursor().hasSelection():
+                    text = cursor.selectedText()
+                    cursor.beginEditBlock()
+                    cursor.removeSelectedText()
+                    cursor.insertText(html['start tag'])
+                    cursor.insertText(text)
+                    cursor.insertText(html['end tag'])
+                    cursor.endEditBlock()
+                else:
+                    cursor = self.textCursor()
+                    cursor.insertText(html['start tag'])
+                    cursor.insertText(html['end tag'])
+
+
+class Highlighter(QtGui.QSyntaxHighlighter):
+    """
+    Provides a text highlighter for pointing out spelling errors in text.
+    """
+    WORDS = '(?iu)[\w\']+'
+
+    def __init__(self, *args):
+        """
+        Constructor
+        """
+        super(Highlighter, self).__init__(*args)
+        self.spelling_dictionary = None
+
+    def highlightBlock(self, text):
+        """
+        Highlight mis spelt words in a block of text.
+
+        Note, this is a Qt hook.
+        """
+        if not self.spelling_dictionary:
+            return
+        text = str(text)
+        char_format = QtGui.QTextCharFormat()
+        char_format.setUnderlineColor(QtCore.Qt.red)
+        char_format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline)
+        for word_object in re.finditer(self.WORDS, text):
+            if not self.spelling_dictionary.check(word_object.group()):
+                self.setFormat(word_object.start(), word_object.end() - word_object.start(), char_format)
+
+
+class SpellAction(QtWidgets.QAction):
+    """
+    A special QAction that returns the text in a signal.
+    """
+    correct = QtCore.pyqtSignal(str)
+
+    def __init__(self, *args):
+        """
+        Constructor
+        """
+        super(SpellAction, self).__init__(*args)
+        self.triggered.connect(lambda x: self.correct.emit(self.text()))

=== modified file 'openlp/core/ui/printservicedialog.py'
--- openlp/core/ui/printservicedialog.py	2015-12-31 22:46:06 +0000
+++ openlp/core/ui/printservicedialog.py	2016-05-21 05:31:49 +0000
@@ -25,7 +25,8 @@
 from PyQt5 import QtCore, QtWidgets, QtPrintSupport
 
 from openlp.core.common import UiStrings, translate
-from openlp.core.lib import SpellTextEdit, build_icon
+from openlp.core.lib import build_icon
+from openlp.core.ui.lib import SpellTextEdit
 
 
 class ZoomSize(object):

=== modified file 'openlp/core/ui/servicenoteform.py'
--- openlp/core/ui/servicenoteform.py	2016-01-09 16:26:14 +0000
+++ openlp/core/ui/servicenoteform.py	2016-05-21 05:31:49 +0000
@@ -25,7 +25,7 @@
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common import Registry, RegistryProperties, translate
-from openlp.core.lib import SpellTextEdit
+from openlp.core.ui.lib import SpellTextEdit
 from openlp.core.lib.ui import create_button_box
 
 

=== modified file 'openlp/plugins/custom/forms/editcustomslidedialog.py'
--- openlp/plugins/custom/forms/editcustomslidedialog.py	2015-12-31 22:46:06 +0000
+++ openlp/plugins/custom/forms/editcustomslidedialog.py	2016-05-21 05:31:49 +0000
@@ -23,8 +23,9 @@
 from PyQt5 import QtWidgets
 
 from openlp.core.common import UiStrings, translate
-from openlp.core.lib import SpellTextEdit, build_icon
+from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button, create_button_box
+from openlp.core.ui.lib import SpellTextEdit
 
 
 class Ui_CustomSlideEditDialog(object):

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2015-12-31 22:46:06 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2016-05-21 05:31:49 +0000
@@ -22,7 +22,8 @@
 
 from PyQt5 import QtWidgets
 
-from openlp.core.lib import SpellTextEdit, build_icon, translate
+from openlp.core.ui.lib import SpellTextEdit
+from openlp.core.lib import build_icon, translate
 from openlp.core.lib.ui import UiStrings, create_button_box
 from openlp.plugins.songs.lib import VerseType
 

=== modified file 'tests/functional/openlp_core_common/test_registry.py'
--- tests/functional/openlp_core_common/test_registry.py	2015-12-31 22:46:06 +0000
+++ tests/functional/openlp_core_common/test_registry.py	2016-05-21 05:31:49 +0000
@@ -59,7 +59,7 @@
         temp = Registry().get('test2')
         self.assertEqual(temp, None, 'None should have been returned for missing service')
 
-        # WHEN I try to replace a component I should be allowed (testing only)
+        # WHEN I try to replace a component I should be allowed
         Registry().remove('test1')
         # THEN I will get an exception
         temp = Registry().get('test1')
@@ -93,6 +93,42 @@
         # THEN: I expect then function to have been called and a return given
         self.assertEqual(return_value[0], 'function_2', 'A return value is provided and matches')
 
+    def registry_working_flags_test(self):
+        """
+        Test the registry working flags creation and its usage
+        """
+        # GIVEN: A new registry
+        Registry.create()
+
+        # WHEN: I add a working flag it should save it
+        my_data = 'Lamas'
+        Registry().set_flag('test1', my_data)
+
+        # THEN: we should be able retrieve the saved component
+        assert Registry().get_flag('test1') == my_data, 'The working flag can be retrieved and matches'
+
+        # WHEN: I add a component for the second time I am mad.
+        # THEN  and I will get an exception
+        with self.assertRaises(KeyError) as context:
+            Registry().set_flag('test1', my_data)
+        self.assertEqual(context.exception.args[0], 'Duplicate Working Flag exception test1',
+                         'KeyError exception should have been thrown for duplicate working flag')
+
+        # WHEN I try to get back a non existent Working Flag
+        # THEN I will get an exception
+        with self.assertRaises(KeyError) as context1:
+            temp = Registry().get_flag('test2')
+        self.assertEqual(context1.exception.args[0], 'Working Flag test2 not found in list',
+                         'KeyError exception should have been thrown for missing working flag')
+
+        # WHEN I try to replace a working flag I should be allowed
+        Registry().remove_flag('test1')
+        # THEN I will get an exception
+        with self.assertRaises(KeyError) as context:
+            temp = Registry().get_flag('test1')
+        self.assertEqual(context.exception.args[0], 'Working Flag test1 not found in list',
+                         'KeyError exception should have been thrown for duplicate working flag')
+
     def remove_function_test(self):
         """
         Test the remove_function() method


Follow ups