← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/refactor-mock into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/refactor-mock into lp:openlp.

Commit message:
Mock comes with Python as of 3.3, and I don't think there is anyone using lower than 3.3, so let's use Python's mock directly now.

Requested reviews:
  Tim Bentley (trb143)

For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/refactor-mock/+merge/323869

Mock comes with Python as of 3.3, and I don't think there is anyone using lower than 3.3, so let's use Python's mock directly now.

Windows tests are failing due to file sharing (we've had this issue before), unrelated to my changes.

Add this to your merge proposal:
--------------------------------
lp:~raoul-snyman/openlp/refactor-mock (revision 2734)
[SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/1991/
[SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/1901/
[SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1841/
[SUCCESS] https://ci.openlp.io/job/Branch-04a-Code_Analysis/1221/
[FAILURE] https://ci.openlp.io/job/Branch-04b-Test_Coverage/1084/
-- 
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'tests/functional/__init__.py'
--- tests/functional/__init__.py	2016-12-31 11:01:36 +0000
+++ tests/functional/__init__.py	2017-05-10 17:04:13 +0000
@@ -25,13 +25,8 @@
 import sys
 from PyQt5 import QtWidgets
 
-if sys.version_info[1] >= 3:
-    from unittest.mock import ANY, MagicMock, patch, mock_open, call, PropertyMock
-else:
-    from mock import ANY, MagicMock, patch, mock_open, call, PropertyMock
-
 # Only one QApplication can be created. Use QtWidgets.QApplication.instance() when you need to "create" a  QApplication.
 application = QtWidgets.QApplication([])
 application.setApplicationName('OpenLP')
 
-__all__ = ['ANY', 'MagicMock', 'patch', 'mock_open', 'call', 'application', 'PropertyMock']
+__all__ = ['application']

=== modified file 'tests/functional/openlp_core_common/test_actions.py'
--- tests/functional/openlp_core_common/test_actions.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_actions.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,13 @@
 Package to test the openlp.core.common.actions package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from PyQt5 import QtGui, QtCore, QtWidgets
 
 from openlp.core.common import Settings
 from openlp.core.common.actions import CategoryActionList, ActionList
-from tests.functional import MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_common/test_applocation.py'
--- tests/functional/openlp_core_common/test_applocation.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_applocation.py	2017-05-10 17:04:13 +0000
@@ -25,9 +25,9 @@
 import copy
 import os
 from unittest import TestCase
+from unittest.mock import patch
 
 from openlp.core.common import AppLocation, get_frozen_path
-from tests.functional import patch
 
 FILE_LIST = ['file1', 'file2', 'file3.txt', 'file4.txt', 'file5.mp3', 'file6.mp3']
 

=== modified file 'tests/functional/openlp_core_common/test_common.py'
--- tests/functional/openlp_core_common/test_common.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_common.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,11 @@
 """
 Functional tests to test the AppLocation class and related methods.
 """
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import check_directory_exists, de_hump, trace_error_handler, translate, is_win, is_macosx, \
     is_linux, clean_button_text
-from tests.functional import MagicMock, patch
 
 
 class TestCommonFunctions(TestCase):

=== modified file 'tests/functional/openlp_core_common/test_httputils.py'
--- tests/functional/openlp_core_common/test_httputils.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_httputils.py	2017-05-10 17:04:13 +0000
@@ -26,10 +26,10 @@
 import tempfile
 import socket
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common.httputils import get_user_agent, get_web_page, get_url_file_size, url_get_file
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_common/test_init.py'
--- tests/functional/openlp_core_common/test_init.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_init.py	2017-05-10 17:04:13 +0000
@@ -25,10 +25,11 @@
 import os
 from io import BytesIO
 from unittest import TestCase
+from unittest.mock import MagicMock, PropertyMock, call, patch
 
 from openlp.core.common import add_actions, clean_filename, delete_file, get_file_encoding, get_filesystem_encoding,  \
     get_uno_command, get_uno_instance, split_filename
-from tests.functional import MagicMock, PropertyMock, call, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_common/test_languagemanager.py'
--- tests/functional/openlp_core_common/test_languagemanager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_languagemanager.py	2017-05-10 17:04:13 +0000
@@ -23,8 +23,8 @@
 Functional tests to test the AppLocation class and related methods.
 """
 from unittest import TestCase
+from unittest.mock import patch
 
-from tests.functional import patch
 from openlp.core.common.languagemanager import get_locale_key, get_natural_key
 
 

=== modified file 'tests/functional/openlp_core_common/test_registry.py'
--- tests/functional/openlp_core_common/test_registry.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_registry.py	2017-05-10 17:04:13 +0000
@@ -24,9 +24,9 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from openlp.core.common import Registry
-from tests.functional import MagicMock
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../', '..', 'resources'))
 

=== modified file 'tests/functional/openlp_core_common/test_registryproperties.py'
--- tests/functional/openlp_core_common/test_registryproperties.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_registryproperties.py	2017-05-10 17:04:13 +0000
@@ -23,11 +23,10 @@
 Test the registry properties
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry, RegistryProperties
 
-from tests.functional import MagicMock, patch
-
 
 class TestRegistryProperties(TestCase, RegistryProperties):
     """

=== modified file 'tests/functional/openlp_core_common/test_settings.py'
--- tests/functional/openlp_core_common/test_settings.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_settings.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 Package to test the openlp.core.lib.settings package.
 """
 from unittest import TestCase
+from unittest.mock import patch
 
 from openlp.core.common import Settings
 from openlp.core.common.settings import recent_files_conv
-from tests.functional import patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_common/test_versionchecker.py'
--- tests/functional/openlp_core_common/test_versionchecker.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_common/test_versionchecker.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 Package to test the openlp.core.common.versionchecker package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common.settings import Settings
 from openlp.core.common.versionchecker import VersionThread
-from tests.functional import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_lib/test_db.py'
--- tests/functional/openlp_core_lib/test_db.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_db.py	2017-05-10 17:04:13 +0000
@@ -24,13 +24,13 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from sqlalchemy.pool import NullPool
 from sqlalchemy.orm.scoping import ScopedSession
 from sqlalchemy import MetaData
 
 from openlp.core.lib.db import init_db, get_upgrade_op, delete_database
-from tests.functional import patch, MagicMock
 
 
 class TestDB(TestCase):

=== modified file 'tests/functional/openlp_core_lib/test_file_dialog.py'
--- tests/functional/openlp_core_lib/test_file_dialog.py	2016-06-04 00:15:19 +0000
+++ tests/functional/openlp_core_lib/test_file_dialog.py	2017-05-10 17:04:13 +0000
@@ -1,11 +1,31 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2017 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                          #
+###############################################################################
 """
 Package to test the openlp.core.lib.filedialog package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, call, patch
 
-from openlp.core.common import UiStrings
 from openlp.core.lib.filedialog import FileDialog
-from tests.functional import MagicMock, call, patch
 
 
 class TestFileDialog(TestCase):

=== modified file 'tests/functional/openlp_core_lib/test_formattingtags.py'
--- tests/functional/openlp_core_lib/test_formattingtags.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_formattingtags.py	2017-05-10 17:04:13 +0000
@@ -24,10 +24,9 @@
 """
 import copy
 from unittest import TestCase
+from unittest.mock import patch
 
 from openlp.core.lib import FormattingTags
-from tests.functional import patch
-
 
 TAG = {
     'end tag': '{/aa}',

=== modified file 'tests/functional/openlp_core_lib/test_htmlbuilder.py'
--- tests/functional/openlp_core_lib/test_htmlbuilder.py	2016-06-07 13:21:07 +0000
+++ tests/functional/openlp_core_lib/test_htmlbuilder.py	2017-05-10 17:04:13 +0000
@@ -1,8 +1,8 @@
 """
 Package to test the openlp.core.lib.htmlbuilder module.
 """
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore, QtWebKit
 
@@ -10,7 +10,7 @@
 from openlp.core.lib.htmlbuilder import build_html, build_background_css, build_lyrics_css, build_lyrics_outline_css, \
     build_lyrics_format_css, build_footer_css, webkit_version
 from openlp.core.lib.theme import HorizontalType, VerticalType
-from tests.functional import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 HTML = """

=== modified file 'tests/functional/openlp_core_lib/test_image_manager.py'
--- tests/functional/openlp_core_lib/test_image_manager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_image_manager.py	2017-05-10 17:04:13 +0000
@@ -25,14 +25,15 @@
 import os
 import time
 from threading import Lock
-
 from unittest import TestCase
+from unittest.mock import patch
+
 from PyQt5 import QtGui
 
 from openlp.core.common import Registry
 from openlp.core.lib import ImageManager, ScreenList
 from openlp.core.lib.imagemanager import Priority
-from tests.functional import patch
+
 from tests.helpers.testmixin import TestMixin
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))

=== modified file 'tests/functional/openlp_core_lib/test_lib.py'
--- tests/functional/openlp_core_lib/test_lib.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_lib.py	2017-05-10 17:04:13 +0000
@@ -23,15 +23,14 @@
 Package to test the openlp.core.lib package.
 """
 import os
-
+from datetime import datetime, timedelta
 from unittest import TestCase
-from datetime import datetime, timedelta
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore, QtGui
 
 from openlp.core.lib import build_icon, check_item_selected, clean_tags, create_thumb, create_separated_list, \
     expand_tags, get_text_file_string, image_to_byte, resize_image, str_to_bool, validate_thumb
-from tests.functional import MagicMock, patch
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
 

=== modified file 'tests/functional/openlp_core_lib/test_mediamanageritem.py'
--- tests/functional/openlp_core_lib/test_mediamanageritem.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_mediamanageritem.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,10 @@
 Package to test the openlp.core.lib.mediamanageritem package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.lib import MediaManagerItem
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_lib/test_pluginmanager.py'
--- tests/functional/openlp_core_lib/test_pluginmanager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_pluginmanager.py	2017-05-10 17:04:13 +0000
@@ -23,11 +23,11 @@
 Package to test the openlp.core.lib.pluginmanager package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from openlp.core.common import Registry, Settings
 from openlp.core.lib.pluginmanager import PluginManager
 from openlp.core.lib import PluginStatus
-from tests.functional import MagicMock
 
 
 class TestPluginManager(TestCase):

=== modified file 'tests/functional/openlp_core_lib/test_projector_pjlink1.py'
--- tests/functional/openlp_core_lib/test_projector_pjlink1.py	2016-08-07 20:51:35 +0000
+++ tests/functional/openlp_core_lib/test_projector_pjlink1.py	2017-05-10 17:04:13 +0000
@@ -22,14 +22,12 @@
 """
 Package to test the openlp.core.lib.projector.pjlink1 package.
 """
-
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from openlp.core.lib.projector.pjlink1 import PJLink1
-from openlp.core.lib.projector.constants import E_PARAMETER, ERROR_STRING, S_OFF, S_STANDBY, S_WARMUP, S_ON, \
-    S_COOLDOWN, PJLINK_POWR_STATUS
+from openlp.core.lib.projector.constants import E_PARAMETER, ERROR_STRING, S_OFF, S_STANDBY, S_ON, PJLINK_POWR_STATUS
 
-from tests.functional import patch, MagicMock
 from tests.resources.projector.data import TEST_PIN, TEST_SALT, TEST_CONNECT_AUTHENTICATE, TEST_HASH
 
 pjlink_test = PJLink1(name='test', ip='127.0.0.1', pin=TEST_PIN, no_poll=True)

=== modified file 'tests/functional/openlp_core_lib/test_projectordb.py'
--- tests/functional/openlp_core_lib/test_projectordb.py	2017-01-27 14:44:11 +0000
+++ tests/functional/openlp_core_lib/test_projectordb.py	2017-05-10 17:04:13 +0000
@@ -27,11 +27,11 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.lib.projector.db import Manufacturer, Model, Projector, ProjectorDB, ProjectorSource, Source
 from openlp.core.lib.projector.constants import PJLINK_PORT
 
-from tests.functional import MagicMock, patch
 from tests.resources.projector.data import TEST_DB, TEST1_DATA, TEST2_DATA, TEST3_DATA
 
 

=== modified file 'tests/functional/openlp_core_lib/test_renderer.py'
--- tests/functional/openlp_core_lib/test_renderer.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_renderer.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 Package to test the openlp.core.ui.renderer package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore
 
@@ -31,7 +32,6 @@
 from openlp.core.lib.renderer import words_split, get_start_tags
 from openlp.core.lib.theme import ThemeXML
 
-from tests.functional import MagicMock, patch
 
 SCREEN = {
     'primary': False,

=== modified file 'tests/functional/openlp_core_lib/test_screen.py'
--- tests/functional/openlp_core_lib/test_screen.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_screen.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,12 @@
 Package to test the openlp.core.lib.screenlist package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.lib import ScreenList
-from tests.functional import MagicMock
 
 SCREEN = {
     'primary': False,

=== modified file 'tests/functional/openlp_core_lib/test_serviceitem.py'
--- tests/functional/openlp_core_lib/test_serviceitem.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_serviceitem.py	2017-05-10 17:04:13 +0000
@@ -24,13 +24,13 @@
 """
 import os
 from unittest import TestCase
-
-from tests.functional import MagicMock, patch
-from tests.utils import assert_length, convert_file_service_item
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry, md5_hash
 from openlp.core.lib import ItemCapabilities, ServiceItem, ServiceItemType
 
+from tests.utils import assert_length, convert_file_service_item
+
 VERSE = 'The Lord said to {r}Noah{/r}: \n'\
         'There\'s gonna be a {su}floody{/su}, {sb}floody{/sb}\n'\
         'The Lord said to {g}Noah{/g}:\n'\

=== modified file 'tests/functional/openlp_core_lib/test_ui.py'
--- tests/functional/openlp_core_lib/test_ui.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_lib/test_ui.py	2017-05-10 17:04:13 +0000
@@ -22,14 +22,15 @@
 """
 Package to test the openlp.core.lib.ui package.
 """
+from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from PyQt5 import QtCore, QtGui, QtWidgets
-from unittest import TestCase
 
 from openlp.core.common import UiStrings, translate
 from openlp.core.lib.ui import add_welcome_page, create_button_box, create_horizontal_adjusting_combo_box, \
     create_button, create_action, create_valign_selection_widgets, find_and_set_in_combo_box, create_widget_action, \
     set_case_insensitive_completer
-from tests.functional import MagicMock, patch
 
 
 class TestUi(TestCase):

=== modified file 'tests/functional/openlp_core_ui/test_aboutform.py'
--- tests/functional/openlp_core_ui/test_aboutform.py	2017-01-11 20:15:55 +0000
+++ tests/functional/openlp_core_ui/test_aboutform.py	2017-05-10 17:04:13 +0000
@@ -24,10 +24,10 @@
 """
 import datetime
 from unittest import TestCase
+from unittest.mock import patch
 
 from openlp.core.ui.aboutform import AboutForm
 
-from tests.functional import patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_ui/test_exceptionform.py'
--- tests/functional/openlp_core_ui/test_exceptionform.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_exceptionform.py	2017-05-10 17:04:13 +0000
@@ -26,15 +26,13 @@
 import os
 import tempfile
 from unittest import TestCase
-from unittest.mock import mock_open
+from unittest.mock import mock_open, patch
 
 from openlp.core.common import Registry
+from openlp.core.ui import exceptionform
 
-from tests.functional import patch
 from tests.helpers.testmixin import TestMixin
 
-from openlp.core.ui import exceptionform
-
 exceptionform.WEBKIT_VERSION = 'Webkit Test'
 exceptionform.MIGRATE_VERSION = 'Migrate Test'
 exceptionform.CHARDET_VERSION = 'CHARDET Test'

=== modified file 'tests/functional/openlp_core_ui/test_first_time.py'
--- tests/functional/openlp_core_ui/test_first_time.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_first_time.py	2017-05-10 17:04:13 +0000
@@ -22,17 +22,16 @@
 """
 Package to test the openlp.core.utils.__init__ package.
 """
-
-from unittest import TestCase
 import urllib.request
 import urllib.error
 import urllib.parse
-
-from tests.functional import patch
+from unittest import TestCase
+from unittest.mock import patch
+
+from openlp.core.common.httputils import CONNECTION_RETRIES, get_web_page
+
 from tests.helpers.testmixin import TestMixin
 
-from openlp.core.common.httputils import CONNECTION_RETRIES, get_web_page
-
 
 class TestFirstTimeWizard(TestMixin, TestCase):
     """

=== modified file 'tests/functional/openlp_core_ui/test_firsttimeform.py'
--- tests/functional/openlp_core_ui/test_firsttimeform.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_firsttimeform.py	2017-05-10 17:04:13 +0000
@@ -26,11 +26,11 @@
 import tempfile
 import urllib
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry
 from openlp.core.ui.firsttimeform import FirstTimeForm
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 FAKE_CONFIG = b"""

=== modified file 'tests/functional/openlp_core_ui/test_formattingtagsform.py'
--- tests/functional/openlp_core_ui/test_formattingtagsform.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_formattingtagsform.py	2017-05-10 17:04:13 +0000
@@ -23,8 +23,7 @@
 Package to test the openlp.core.ui.formattingtagsform package.
 """
 from unittest import TestCase
-
-from tests.functional import MagicMock, patch, call
+from unittest.mock import MagicMock, patch, call
 
 from openlp.core.ui.formattingtagform import FormattingTagForm
 

=== modified file 'tests/functional/openlp_core_ui/test_maindisplay.py'
--- tests/functional/openlp_core_ui/test_maindisplay.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_maindisplay.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 Package to test the openlp.core.ui.slidecontroller package.
 """
 from unittest import TestCase, skipUnless
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore
 
@@ -33,11 +34,9 @@
 from openlp.core.ui.maindisplay import TRANSPARENT_STYLESHEET, OPAQUE_STYLESHEET
 
 from tests.helpers.testmixin import TestMixin
-from tests.functional import MagicMock, patch
 
 if is_macosx():
     from ctypes import pythonapi, c_void_p, c_char_p, py_object
-
     from sip import voidptr
     from objc import objc_object
     from AppKit import NSMainMenuWindowLevel, NSWindowCollectionBehaviorManaged

=== modified file 'tests/functional/openlp_core_ui/test_mainwindow.py'
--- tests/functional/openlp_core_ui/test_mainwindow.py	2017-01-22 18:12:41 +0000
+++ tests/functional/openlp_core_ui/test_mainwindow.py	2017-05-10 17:04:13 +0000
@@ -23,8 +23,8 @@
 Package to test openlp.core.ui.mainwindow package.
 """
 import os
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtWidgets
 
@@ -32,7 +32,6 @@
 from openlp.core.lib.ui import UiStrings
 from openlp.core.common.registry import Registry
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 from tests.utils.constants import TEST_RESOURCES_PATH
 

=== modified file 'tests/functional/openlp_core_ui/test_media.py'
--- tests/functional/openlp_core_ui/test_media.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_media.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,13 @@
 """
 Package to test the openlp.core.ui package.
 """
+from unittest import TestCase
+from unittest.mock import patch
+
 from PyQt5 import QtCore
-from unittest import TestCase
 
 from openlp.core.ui.media import get_media_players, parse_optical_path
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_ui/test_servicemanager.py'
--- tests/functional/openlp_core_ui/test_servicemanager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_servicemanager.py	2017-05-10 17:04:13 +0000
@@ -24,15 +24,14 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 import PyQt5
 
 from openlp.core.common import Registry, ThemeLevel
-from openlp.core.ui.lib.toolbar import OpenLPToolbar
 from openlp.core.lib import ServiceItem, ServiceItemType, ItemCapabilities
 from openlp.core.ui import ServiceManager
-
-from tests.functional import MagicMock, patch
+from openlp.core.ui.lib.toolbar import OpenLPToolbar
 
 
 class TestServiceManager(TestCase):

=== modified file 'tests/functional/openlp_core_ui/test_settingsform.py'
--- tests/functional/openlp_core_ui/test_settingsform.py	2017-03-02 00:07:16 +0000
+++ tests/functional/openlp_core_ui/test_settingsform.py	2017-05-10 17:04:13 +0000
@@ -22,14 +22,14 @@
 """
 Package to test the openlp.core.ui.settingsform package.
 """
+from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from PyQt5 import QtWidgets
-from unittest import TestCase
 
 from openlp.core.common import Registry
 from openlp.core.ui.settingsform import SettingsForm
 
-from tests.functional import MagicMock, patch
-
 
 class TestSettingsForm(TestCase):
 

=== modified file 'tests/functional/openlp_core_ui/test_shortcutlistdialog.py'
--- tests/functional/openlp_core_ui/test_shortcutlistdialog.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_shortcutlistdialog.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,12 @@
 """
 Package to test the openlp.core.ui.shortcutlistdialog package.
 """
-from PyQt5 import QtCore, QtGui, QtWidgets
+from unittest.mock import MagicMock
+
+from PyQt5 import QtCore
 
 from openlp.core.ui.shortcutlistdialog import CaptureShortcutButton, ShortcutTreeWidget
 
-from tests.interfaces import MagicMock, patch
-
 
 def test_key_press_event():
     """

=== modified file 'tests/functional/openlp_core_ui/test_slidecontroller.py'
--- tests/functional/openlp_core_ui/test_slidecontroller.py	2017-03-28 05:15:05 +0000
+++ tests/functional/openlp_core_ui/test_slidecontroller.py	2017-05-10 17:04:13 +0000
@@ -22,16 +22,16 @@
 """
 Package to test the openlp.core.ui.slidecontroller package.
 """
+from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from PyQt5 import QtCore, QtGui
 
-from unittest import TestCase
 from openlp.core import Registry
 from openlp.core.lib import ImageSource, ServiceItemAction
 from openlp.core.ui import SlideController, LiveController, PreviewController
 from openlp.core.ui.slidecontroller import InfoLabel, WIDE_MENU, NON_TEXT_MENU
 
-from tests.functional import MagicMock, patch
-
 
 class TestSlideController(TestCase):
 

=== modified file 'tests/functional/openlp_core_ui/test_themeform.py'
--- tests/functional/openlp_core_ui/test_themeform.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_themeform.py	2017-05-10 17:04:13 +0000
@@ -22,13 +22,11 @@
 """
 Package to test the openlp.core.ui.themeform package.
 """
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.ui import ThemeForm
 
-from tests.functional import MagicMock, patch
-
 
 class TestThemeManager(TestCase):
     """

=== modified file 'tests/functional/openlp_core_ui/test_thememanager.py'
--- tests/functional/openlp_core_ui/test_thememanager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_thememanager.py	2017-05-10 17:04:13 +0000
@@ -24,18 +24,16 @@
 """
 import os
 import shutil
-
+from tempfile import mkdtemp
 from unittest import TestCase
-from tempfile import mkdtemp
+from unittest.mock import ANY, MagicMock, patch
 
 from PyQt5 import QtWidgets
-from tempfile import mkdtemp
 
 from openlp.core.ui import ThemeManager
 from openlp.core.common import Registry
 
 from tests.utils.constants import TEST_RESOURCES_PATH
-from tests.functional import ANY, MagicMock, patch
 
 
 class TestThemeManager(TestCase):

=== modified file 'tests/functional/openlp_core_ui/test_themetab.py'
--- tests/functional/openlp_core_ui/test_themetab.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_themetab.py	2017-05-10 17:04:13 +0000
@@ -23,13 +23,13 @@
 Package to test the openlp.core.ui.ThemeTab package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from openlp.core.common import Registry
 from openlp.core.ui.themestab import ThemesTab
 from openlp.core.ui.settingsform import SettingsForm
 
 from tests.helpers.testmixin import TestMixin
-from tests.functional import MagicMock
 
 
 class TestThemeTab(TestCase, TestMixin):

=== modified file 'tests/functional/openlp_core_ui_lib/test_color_button.py'
--- tests/functional/openlp_core_ui_lib/test_color_button.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_lib/test_color_button.py	2017-05-10 17:04:13 +0000
@@ -23,9 +23,9 @@
 This module contains tests for the openlp.core.lib.filedialog module
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, call, patch
 
 from openlp.core.ui.lib.colorbutton import ColorButton
-from tests.functional import MagicMock, call, patch
 
 
 class TestColorDialog(TestCase):

=== modified file 'tests/functional/openlp_core_ui_lib/test_listpreviewwidget.py'
--- tests/functional/openlp_core_ui_lib/test_listpreviewwidget.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_lib/test_listpreviewwidget.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 Package to test the openlp.core.ui.lib.listpreviewwidget package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch, call
 
 from PyQt5 import QtGui
 
@@ -30,8 +31,6 @@
 from openlp.core.ui.lib.listpreviewwidget import ListPreviewWidget
 from openlp.core.lib import ImageSource, ServiceItem
 
-from tests.functional import MagicMock, patch, call
-
 
 class TestListPreviewWidget(TestCase):
 

=== modified file 'tests/functional/openlp_core_ui_media/test_mediacontroller.py'
--- tests/functional/openlp_core_ui_media/test_mediacontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_media/test_mediacontroller.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,12 @@
 Package to test the openlp.core.ui.media package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.ui.media.mediacontroller import MediaController
 from openlp.core.ui.media.mediaplayer import MediaPlayer
 from openlp.core.common import Registry
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_core_ui_media/test_systemplayer.py'
--- tests/functional/openlp_core_ui_media/test_systemplayer.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_media/test_systemplayer.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 Package to test the openlp.core.ui.media.systemplayer package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, call, patch
 
 from PyQt5 import QtCore, QtMultimedia
 
@@ -30,8 +31,6 @@
 from openlp.core.ui.media import MediaState
 from openlp.core.ui.media.systemplayer import SystemPlayer, CheckMediaWorker, ADDITIONAL_EXT
 
-from tests.functional import MagicMock, call, patch
-
 
 class TestSystemPlayer(TestCase):
     """

=== modified file 'tests/functional/openlp_core_ui_media/test_vlcplayer.py'
--- tests/functional/openlp_core_ui_media/test_vlcplayer.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_media/test_vlcplayer.py	2017-05-10 17:04:13 +0000
@@ -26,12 +26,12 @@
 import sys
 from datetime import datetime, timedelta
 from unittest import TestCase, skip
+from unittest.mock import MagicMock, patch, call
 
 from openlp.core.common import Registry
 from openlp.core.ui.media import MediaState, MediaType
 from openlp.core.ui.media.vlcplayer import AUDIO_EXT, VIDEO_EXT, VlcPlayer, get_vlc
 
-from tests.functional import MagicMock, patch, call
 from tests.helpers import MockDateTime
 from tests.helpers.testmixin import TestMixin
 

=== modified file 'tests/functional/openlp_core_ui_media/test_webkitplayer.py'
--- tests/functional/openlp_core_ui_media/test_webkitplayer.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui_media/test_webkitplayer.py	2017-05-10 17:04:13 +0000
@@ -23,7 +23,7 @@
 Package to test the openlp.core.ui.media.webkitplayer package.
 """
 from unittest import TestCase
-from tests.functional import MagicMock, patch
+from unittest.mock import MagicMock, patch
 
 from openlp.core.ui.media.webkitplayer import WebkitPlayer
 

=== modified file 'tests/functional/openlp_plugins/alerts/test_manager.py'
--- tests/functional/openlp_plugins/alerts/test_manager.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/alerts/test_manager.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,11 @@
 """
 This module contains tests for the CSV Bible importer.
 """
-
 import os
 import json
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
-from tests.functional import MagicMock, patch
 from openlp.core.common.registry import Registry
 from openlp.plugins.alerts.lib.alertsmanager import AlertsManager
 

=== modified file 'tests/functional/openlp_plugins/bibles/test_bibleimport.py'
--- tests/functional/openlp_plugins/bibles/test_bibleimport.py	2016-09-09 21:47:29 +0000
+++ tests/functional/openlp_plugins/bibles/test_bibleimport.py	2017-05-10 17:04:13 +0000
@@ -22,18 +22,17 @@
 """
 This module contains tests for the bibleimport module.
 """
-
 from io import BytesIO
+from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from lxml import etree, objectify
-
-from unittest import TestCase
 from PyQt5.QtWidgets import QDialog
 
 from openlp.core.common.languages import Language
 from openlp.core.lib.exceptions import ValidationError
 from openlp.plugins.bibles.lib.bibleimport import BibleImport
 from openlp.plugins.bibles.lib.db import BibleDB
-from tests.functional import MagicMock, patch
 
 
 class TestBibleImport(TestCase):

=== modified file 'tests/functional/openlp_plugins/bibles/test_bibleserver.py'
--- tests/functional/openlp_plugins/bibles/test_bibleserver.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_bibleserver.py	2017-05-10 17:04:13 +0000
@@ -23,9 +23,10 @@
 This module contains tests for the http module of the Bibles plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
+
 from bs4 import BeautifulSoup
 
-from tests.functional import patch, MagicMock
 from openlp.plugins.bibles.lib.importers.http import BSExtract
 
 # TODO: Items left to test

=== modified file 'tests/functional/openlp_plugins/bibles/test_csvimport.py'
--- tests/functional/openlp_plugins/bibles/test_csvimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_csvimport.py	2017-05-10 17:04:13 +0000
@@ -22,14 +22,13 @@
 """
 This module contains tests for the CSV Bible importer.
 """
-
 import csv
 import json
 import os
 from collections import namedtuple
 from unittest import TestCase
+from unittest.mock import ANY, MagicMock, PropertyMock, call, patch
 
-from tests.functional import ANY, MagicMock, PropertyMock, call, patch
 from openlp.core.lib.exceptions import ValidationError
 from openlp.plugins.bibles.lib.bibleimport import BibleImport
 from openlp.plugins.bibles.lib.importers.csvbible import Book, CSVBible, Verse

=== modified file 'tests/functional/openlp_plugins/bibles/test_lib.py'
--- tests/functional/openlp_plugins/bibles/test_lib.py	2017-02-18 07:23:15 +0000
+++ tests/functional/openlp_plugins/bibles/test_lib.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 This module contains tests for the lib submodule of the Bibles plugin.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.plugins.bibles import lib
 from openlp.plugins.bibles.lib import SearchResults, get_reference_match
-from tests.functional import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/bibles/test_opensongimport.py'
--- tests/functional/openlp_plugins/bibles/test_opensongimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_opensongimport.py	2017-05-10 17:04:13 +0000
@@ -22,19 +22,19 @@
 """
 This module contains tests for the OpenSong Bible importer.
 """
-
 import json
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock, patch, call
 
 from lxml import objectify
 
-from tests.functional import MagicMock, patch, call
-from tests.helpers.testmixin import TestMixin
 from openlp.core.common import Registry
 from openlp.plugins.bibles.lib.importers.opensong import OpenSongBible, get_text, parse_chapter_number
 from openlp.plugins.bibles.lib.bibleimport import BibleImport
 
+from tests.helpers.testmixin import TestMixin
+
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                          '..', '..', '..', 'resources', 'bibles'))
 

=== modified file 'tests/functional/openlp_plugins/bibles/test_osisimport.py'
--- tests/functional/openlp_plugins/bibles/test_osisimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_osisimport.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,11 @@
 """
 This module contains tests for the OSIS Bible importer.
 """
-
 import os
 import json
 from unittest import TestCase
+from unittest.mock import MagicMock, call, patch
 
-from tests.functional import MagicMock, call, patch
 from openlp.plugins.bibles.lib.bibleimport import BibleImport
 from openlp.plugins.bibles.lib.db import BibleDB
 from openlp.plugins.bibles.lib.importers.osis import OSISBible

=== modified file 'tests/functional/openlp_plugins/bibles/test_swordimport.py'
--- tests/functional/openlp_plugins/bibles/test_swordimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_swordimport.py	2017-05-10 17:04:13 +0000
@@ -26,13 +26,14 @@
 import os
 import json
 from unittest import TestCase, skipUnless
+from unittest.mock import MagicMock, patch
 
-from tests.functional import MagicMock, patch
 try:
     from openlp.plugins.bibles.lib.importers.sword import SwordBible
     HAS_PYSWORD = True
 except ImportError:
     HAS_PYSWORD = False
+
 from openlp.plugins.bibles.lib.db import BibleDB
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__),

=== modified file 'tests/functional/openlp_plugins/bibles/test_wordprojectimport.py'
--- tests/functional/openlp_plugins/bibles/test_wordprojectimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_wordprojectimport.py	2017-05-10 17:04:13 +0000
@@ -22,15 +22,12 @@
 """
 This module contains tests for the WordProject Bible importer.
 """
-
 import os
-import json
 from unittest import TestCase
+from unittest.mock import MagicMock, patch, call
 
 from openlp.plugins.bibles.lib.importers.wordproject import WordProjectBible
-from openlp.plugins.bibles.lib.db import BibleDB
 
-from tests.functional import MagicMock, patch, call
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                          '..', '..', '..', 'resources', 'bibles'))

=== modified file 'tests/functional/openlp_plugins/bibles/test_zefaniaimport.py'
--- tests/functional/openlp_plugins/bibles/test_zefaniaimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/bibles/test_zefaniaimport.py	2017-05-10 17:04:13 +0000
@@ -22,12 +22,11 @@
 """
 This module contains tests for the Zefania Bible importer.
 """
-
 import os
 import json
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
-from tests.functional import MagicMock, patch
 from openlp.plugins.bibles.lib.importers.zefania import ZefaniaBible
 from openlp.plugins.bibles.lib.db import BibleDB
 

=== modified file 'tests/functional/openlp_plugins/custom/test_mediaitem.py'
--- tests/functional/openlp_plugins/custom/test_mediaitem.py	2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_plugins/custom/test_mediaitem.py	2017-05-10 17:04:13 +0000
@@ -1,15 +1,36 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2017 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                          #
+###############################################################################
 """
 This module contains tests for the lib submodule of the Songs plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from PyQt5 import QtCore
 
-from openlp.core.common import Registry, Settings
+from openlp.core.common import Registry
 from openlp.core.lib import ServiceItem, PluginStatus
 from openlp.plugins.custom.lib import CustomMediaItem
-from openlp.plugins.custom.lib.db import CustomSlide
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 FOOTER = ['Arky Arky (Unknown)', 'Public Domain', 'CCLI 123456']

=== modified file 'tests/functional/openlp_plugins/images/test_imagetab.py'
--- tests/functional/openlp_plugins/images/test_imagetab.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/images/test_imagetab.py	2017-05-10 17:04:13 +0000
@@ -23,15 +23,15 @@
 This module contains tests for the lib submodule of the Images plugin.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from PyQt5 import QtWidgets
 
-from openlp.core.common import Settings
-
-from openlp.core.common import Registry
+from openlp.core.common import Registry, Settings
 from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
 from openlp.plugins.images.lib.mediaitem import ImageMediaItem
 from openlp.plugins.images.lib import ImageTab
-from tests.functional import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 __default_settings__ = {

=== modified file 'tests/functional/openlp_plugins/images/test_lib.py'
--- tests/functional/openlp_plugins/images/test_lib.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/images/test_lib.py	2017-05-10 17:04:13 +0000
@@ -23,13 +23,13 @@
 This module contains tests for the lib submodule of the Images plugin.
 """
 from unittest import TestCase
+from unittest.mock import ANY, MagicMock, patch
 
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
 from openlp.plugins.images.lib.mediaitem import ImageMediaItem
-from tests.functional import ANY, MagicMock, patch
 
 
 class TestImageMediaItem(TestCase):

=== modified file 'tests/functional/openlp_plugins/media/test_mediaitem.py'
--- tests/functional/openlp_plugins/media/test_mediaitem.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/media/test_mediaitem.py	2017-05-10 17:04:13 +0000
@@ -23,15 +23,13 @@
 Test the media plugin
 """
 from unittest import TestCase
-
-from openlp.core import Registry, Settings
-from openlp.plugins.media.mediaplugin import MediaPlugin
+from unittest.mock import MagicMock, patch
+
+from PyQt5 import QtCore
+
+from openlp.core import Settings
 from openlp.plugins.media.lib.mediaitem import MediaMediaItem
-from openlp.core.ui.media.mediacontroller import MediaController
-
-from PyQt5 import QtCore
-
-from tests.functional import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 __default_settings__ = {

=== modified file 'tests/functional/openlp_plugins/media/test_mediaplugin.py'
--- tests/functional/openlp_plugins/media/test_mediaplugin.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/media/test_mediaplugin.py	2017-05-10 17:04:13 +0000
@@ -23,11 +23,11 @@
 Test the media plugin
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core import Registry
 from openlp.plugins.media.mediaplugin import MediaPlugin, process_check_binary
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/presentations/test_impresscontroller.py'
--- tests/functional/openlp_plugins/presentations/test_impresscontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_impresscontroller.py	2017-05-10 17:04:13 +0000
@@ -23,19 +23,19 @@
 Functional tests to test the Impress class and related methods.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 import os
 import shutil
 from tempfile import mkdtemp
 
-from tests.functional import patch, MagicMock
-from tests.utils.constants import TEST_RESOURCES_PATH
-from tests.helpers.testmixin import TestMixin
-
 from openlp.core.common import Settings
 from openlp.plugins.presentations.lib.impresscontroller import \
     ImpressController, ImpressDocument, TextType
 from openlp.plugins.presentations.presentationplugin import __default_settings__
 
+from tests.utils.constants import TEST_RESOURCES_PATH
+from tests.helpers.testmixin import TestMixin
+
 
 class TestImpressController(TestCase, TestMixin):
     """

=== modified file 'tests/functional/openlp_plugins/presentations/test_mediaitem.py'
--- tests/functional/openlp_plugins/presentations/test_mediaitem.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_mediaitem.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 This module contains tests for the lib submodule of the Presentations plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock, call
 
 from openlp.core.common import Registry
 from openlp.plugins.presentations.lib.mediaitem import PresentationMediaItem
-from tests.functional import patch, MagicMock, call
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/presentations/test_messagelistener.py'
--- tests/functional/openlp_plugins/presentations/test_messagelistener.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_messagelistener.py	2017-05-10 17:04:13 +0000
@@ -23,11 +23,12 @@
 This module contains tests for the lib submodule of the Presentations plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from openlp.core.common import Registry
 from openlp.plugins.presentations.lib.mediaitem import MessageListener, PresentationMediaItem
 from openlp.plugins.presentations.lib.messagelistener import Controller
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/presentations/test_pdfcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_pdfcontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_pdfcontroller.py	2017-05-10 17:04:13 +0000
@@ -24,14 +24,16 @@
 """
 import os
 import shutil
+from tempfile import mkdtemp
 from unittest import TestCase, SkipTest
-from tempfile import mkdtemp
+from unittest.mock import MagicMock, patch
+
 from PyQt5 import QtCore, QtGui
 
 from openlp.plugins.presentations.lib.pdfcontroller import PdfController, PdfDocument
-from tests.functional import MagicMock, patch
 from openlp.core.common import Settings
 from openlp.core.lib import ScreenList
+
 from tests.utils.constants import TEST_RESOURCES_PATH
 from tests.helpers.testmixin import TestMixin
 

=== modified file 'tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_powerpointcontroller.py	2017-05-10 17:04:13 +0000
@@ -1,303 +1,303 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2017 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                          #
-###############################################################################
-"""
-Functional tests to test the PowerPointController class and related methods.
-"""
-import os
-import shutil
-from unittest import TestCase
-from tempfile import mkdtemp
-
-from tests.functional import patch, MagicMock
-from tests.helpers.testmixin import TestMixin
-from tests.utils.constants import TEST_RESOURCES_PATH
-
-from openlp.plugins.presentations.lib.powerpointcontroller import PowerpointController, PowerpointDocument,\
-    _get_text_from_shapes
-from openlp.core.common import is_win, Settings
-
-if is_win():
-    import pywintypes
-
-__default_settings__ = {
-    'presentations/powerpoint slide click advance': True
-}
-
-
-class TestPowerpointController(TestCase, TestMixin):
-    """
-    Test the PowerpointController Class
-    """
-
-    def setUp(self):
-        """
-        Set up the patches and mocks need for all tests.
-        """
-        self.setup_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 test_constructor(self):
-        """
-        Test the Constructor from the PowerpointController
-        """
-        # GIVEN: No presentation controller
-        controller = None
-
-        # WHEN: The presentation controller object is created
-        controller = PowerpointController(plugin=self.mock_plugin)
-
-        # THEN: The name of the presentation controller should be correct
-        self.assertEqual('Powerpoint', controller.name,
-                         'The name of the presentation controller should be correct')
-
-
-class TestPowerpointDocument(TestCase, TestMixin):
-    """
-    Test the PowerpointDocument Class
-    """
-
-    def setUp(self):
-        """
-        Set up the patches and mocks need for all tests.
-        """
-        self.setup_application()
-        self.build_settings()
-        self.mock_plugin = MagicMock()
-        self.temp_folder = mkdtemp()
-        self.mock_plugin.settings_section = self.temp_folder
-        self.powerpoint_document_stop_presentation_patcher = patch(
-            'openlp.plugins.presentations.lib.powerpointcontroller.PowerpointDocument.stop_presentation')
-        self.presentation_document_get_temp_folder_patcher = patch(
-            'openlp.plugins.presentations.lib.powerpointcontroller.PresentationDocument.get_temp_folder')
-        self.presentation_document_setup_patcher = patch(
-            'openlp.plugins.presentations.lib.powerpointcontroller.PresentationDocument._setup')
-        self.mock_powerpoint_document_stop_presentation = self.powerpoint_document_stop_presentation_patcher.start()
-        self.mock_presentation_document_get_temp_folder = self.presentation_document_get_temp_folder_patcher.start()
-        self.mock_presentation_document_setup = self.presentation_document_setup_patcher.start()
-        self.mock_controller = MagicMock()
-        self.mock_presentation = MagicMock()
-        self.mock_presentation_document_get_temp_folder.return_value = 'temp folder'
-        self.file_name = os.path.join(TEST_RESOURCES_PATH, 'presentations', 'test.pptx')
-        self.real_controller = PowerpointController(self.mock_plugin)
-        Settings().extend_default_settings(__default_settings__)
-
-    def tearDown(self):
-        """
-        Stop the patches
-        """
-        self.powerpoint_document_stop_presentation_patcher.stop()
-        self.presentation_document_get_temp_folder_patcher.stop()
-        self.presentation_document_setup_patcher.stop()
-        self.destroy_settings()
-        shutil.rmtree(self.temp_folder)
-
-    def test_show_error_msg(self):
-        """
-        Test the PowerpointDocument.show_error_msg() method gets called on com exception
-        """
-        if is_win():
-            # GIVEN: A PowerpointDocument with mocked controller and presentation
-            with patch('openlp.plugins.presentations.lib.powerpointcontroller.critical_error_message_box') as \
-                    mocked_critical_error_message_box:
-                instance = PowerpointDocument(self.mock_controller, self.mock_presentation)
-                instance.presentation = MagicMock()
-                instance.presentation.SlideShowWindow.View.GotoSlide = MagicMock(side_effect=pywintypes.com_error('1'))
-                instance.index_map[42] = 42
-
-                # WHEN: Calling goto_slide which will throw an exception
-                instance.goto_slide(42)
-
-                # THEN: mocked_critical_error_message_box should have been called
-                mocked_critical_error_message_box.assert_called_with('Error', 'An error occurred in the PowerPoint '
-                                                                     'integration and the presentation will be stopped.'
-                                                                     ' Restart the presentation if you wish to '
-                                                                     'present it.')
-
-    # add _test to the following if necessary
-    def verify_loading_document(self):
-        """
-        Test loading a document in PowerPoint
-        """
-        if is_win() and self.real_controller.check_available():
-            # GIVEN: A PowerpointDocument and a presentation
-            doc = PowerpointDocument(self.real_controller, self.file_name)
-
-            # WHEN: loading the filename
-            doc.load_presentation()
-            result = doc.is_loaded()
-
-            # THEN: result should be true
-            self.assertEqual(result, True, 'The result should be True')
-        else:
-            self.skipTest('Powerpoint not available, skipping test.')
-
-    def test_create_titles_and_notes(self):
-        """
-        Test creating the titles from PowerPoint
-        """
-        # GIVEN: mocked save_titles_and_notes, _get_text_from_shapes and two mocked slides
-        self.doc = PowerpointDocument(self.mock_controller, self.file_name)
-        self.doc.get_slide_count = MagicMock()
-        self.doc.get_slide_count.return_value = 2
-        self.doc.index_map = {1: 1, 2: 2}
-        self.doc.save_titles_and_notes = MagicMock()
-        self.doc._PowerpointDocument__get_text_from_shapes = MagicMock()
-        slide = MagicMock()
-        slide.Shapes.Title.TextFrame.TextRange.Text = 'SlideText'
-        pres = MagicMock()
-        pres.Slides = MagicMock(side_effect=[slide, slide])
-        self.doc.presentation = pres
-
-        # WHEN reading the titles and notes
-        self.doc.create_titles_and_notes()
-
-        # THEN the save should have been called exactly once with 2 titles and 2 notes
-        self.doc.save_titles_and_notes.assert_called_once_with(['SlideText\n', 'SlideText\n'], [' ', ' '])
-
-    def test_create_titles_and_notes_with_no_slides(self):
-        """
-        Test creating the titles from PowerPoint when it returns no slides
-        """
-        # GIVEN: mocked save_titles_and_notes, _get_text_from_shapes and two mocked slides
-        doc = PowerpointDocument(self.mock_controller, self.file_name)
-        doc.save_titles_and_notes = MagicMock()
-        doc._PowerpointDocument__get_text_from_shapes = MagicMock()
-        pres = MagicMock()
-        pres.Slides = []
-        doc.presentation = pres
-
-        # WHEN reading the titles and notes
-        doc.create_titles_and_notes()
-
-        # THEN the save should have been called exactly once with empty titles and notes
-        doc.save_titles_and_notes.assert_called_once_with([], [])
-
-    def test_get_text_from_shapes(self):
-        """
-        Test getting text from powerpoint shapes
-        """
-        # GIVEN: mocked shapes
-        shape = MagicMock()
-        shape.PlaceholderFormat.Type = 2
-        shape.HasTextFrame = shape.TextFrame.HasText = True
-        shape.TextFrame.TextRange.Text = 'slideText'
-        shapes = [shape, shape]
-
-        # WHEN: getting the text
-        result = _get_text_from_shapes(shapes)
-
-        # THEN: it should return the text
-        self.assertEqual(result, 'slideText\nslideText\n', 'result should match \'slideText\nslideText\n\'')
-
-    def test_get_text_from_shapes_with_no_shapes(self):
-        """
-        Test getting text from powerpoint shapes with no shapes
-        """
-        # GIVEN: empty shapes array
-        shapes = []
-
-        # WHEN: getting the text
-        result = _get_text_from_shapes(shapes)
-
-        # THEN: it should not fail but return empty string
-        self.assertEqual(result, '', 'result should be empty')
-
-    def test_goto_slide(self):
-        """
-        Test that goto_slide goes to next effect if the slide is already displayed
-        """
-        # GIVEN: A Document with mocked controller, presentation, and mocked functions get_slide_number and next_step
-        doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
-        doc.presentation = MagicMock()
-        doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 1
-        doc.presentation.SlideShowWindow.View.GetClickCount.return_value = 2
-        doc.get_slide_number = MagicMock()
-        doc.get_slide_number.return_value = 1
-        doc.next_step = MagicMock()
-        doc.index_map[1] = 1
-
-        # WHEN: Calling goto_slide
-        doc.goto_slide(1)
-
-        # THEN: next_step() should be call to try to advance to the next effect.
-        self.assertTrue(doc.next_step.called, 'next_step() should have been called!')
-
-    def test_blank_screen(self):
-        """
-        Test that blank_screen works as expected
-        """
-        # GIVEN: A Document with mocked controller, presentation, and mocked function get_slide_number
-        doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
-        doc.presentation = MagicMock()
-        doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 3
-        doc.presentation.Application.Version = 14.0
-        doc.get_slide_number = MagicMock()
-        doc.get_slide_number.return_value = 2
-
-        # WHEN: Calling goto_slide
-        doc.blank_screen()
-
-        # THEN: The view state, doc.blank_slide and doc.blank_click should have new values
-        self.assertEquals(doc.presentation.SlideShowWindow.View.State, 3, 'The View State should be 3')
-        self.assertEquals(doc.blank_slide, 2, 'doc.blank_slide should be 2 because of the PowerPoint version')
-        self.assertEquals(doc.blank_click, 3, 'doc.blank_click should be 3 because of the PowerPoint version')
-
-    def test_unblank_screen(self):
-        """
-        Test that unblank_screen works as expected
-        """
-        # GIVEN: A Document with mocked controller, presentation, ScreenList, and mocked function get_slide_number
-        with patch('openlp.plugins.presentations.lib.powerpointcontroller.ScreenList') as mocked_screen_list:
-            mocked_screen_list_ret = MagicMock()
-            mocked_screen_list_ret.screen_list = [1]
-            mocked_screen_list.return_value = mocked_screen_list_ret
-            doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
-            doc.presentation = MagicMock()
-            doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 3
-            doc.presentation.Application.Version = 14.0
-            doc.get_slide_number = MagicMock()
-            doc.get_slide_number.return_value = 2
-            doc.index_map[1] = 1
-            doc.blank_slide = 1
-            doc.blank_click = 1
-
-            # WHEN: Calling goto_slide
-            doc.unblank_screen()
-
-            # THEN: The view state have new value, and several function should have been called
-            self.assertEquals(doc.presentation.SlideShowWindow.View.State, 1, 'The View State should be 1')
-            self.assertEquals(doc.presentation.SlideShowWindow.Activate.called, True,
-                              'SlideShowWindow.Activate should have been called')
-            self.assertEquals(doc.presentation.SlideShowWindow.View.GotoSlide.called, True,
-                              'View.GotoSlide should have been called because of the PowerPoint version')
-            self.assertEquals(doc.presentation.SlideShowWindow.View.GotoClick.called, True,
-                              'View.GotoClick should have been called because of the PowerPoint version')
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2017 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                          #
+###############################################################################
+"""
+Functional tests to test the PowerPointController class and related methods.
+"""
+import os
+import shutil
+from unittest import TestCase
+from unittest.mock import patch, MagicMock
+from tempfile import mkdtemp
+
+from openlp.plugins.presentations.lib.powerpointcontroller import PowerpointController, PowerpointDocument,\
+    _get_text_from_shapes
+from openlp.core.common import is_win, Settings
+
+from tests.helpers.testmixin import TestMixin
+from tests.utils.constants import TEST_RESOURCES_PATH
+
+if is_win():
+    import pywintypes
+
+__default_settings__ = {
+    'presentations/powerpoint slide click advance': True
+}
+
+
+class TestPowerpointController(TestCase, TestMixin):
+    """
+    Test the PowerpointController Class
+    """
+
+    def setUp(self):
+        """
+        Set up the patches and mocks need for all tests.
+        """
+        self.setup_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 test_constructor(self):
+        """
+        Test the Constructor from the PowerpointController
+        """
+        # GIVEN: No presentation controller
+        controller = None
+
+        # WHEN: The presentation controller object is created
+        controller = PowerpointController(plugin=self.mock_plugin)
+
+        # THEN: The name of the presentation controller should be correct
+        self.assertEqual('Powerpoint', controller.name,
+                         'The name of the presentation controller should be correct')
+
+
+class TestPowerpointDocument(TestCase, TestMixin):
+    """
+    Test the PowerpointDocument Class
+    """
+
+    def setUp(self):
+        """
+        Set up the patches and mocks need for all tests.
+        """
+        self.setup_application()
+        self.build_settings()
+        self.mock_plugin = MagicMock()
+        self.temp_folder = mkdtemp()
+        self.mock_plugin.settings_section = self.temp_folder
+        self.powerpoint_document_stop_presentation_patcher = patch(
+            'openlp.plugins.presentations.lib.powerpointcontroller.PowerpointDocument.stop_presentation')
+        self.presentation_document_get_temp_folder_patcher = patch(
+            'openlp.plugins.presentations.lib.powerpointcontroller.PresentationDocument.get_temp_folder')
+        self.presentation_document_setup_patcher = patch(
+            'openlp.plugins.presentations.lib.powerpointcontroller.PresentationDocument._setup')
+        self.mock_powerpoint_document_stop_presentation = self.powerpoint_document_stop_presentation_patcher.start()
+        self.mock_presentation_document_get_temp_folder = self.presentation_document_get_temp_folder_patcher.start()
+        self.mock_presentation_document_setup = self.presentation_document_setup_patcher.start()
+        self.mock_controller = MagicMock()
+        self.mock_presentation = MagicMock()
+        self.mock_presentation_document_get_temp_folder.return_value = 'temp folder'
+        self.file_name = os.path.join(TEST_RESOURCES_PATH, 'presentations', 'test.pptx')
+        self.real_controller = PowerpointController(self.mock_plugin)
+        Settings().extend_default_settings(__default_settings__)
+
+    def tearDown(self):
+        """
+        Stop the patches
+        """
+        self.powerpoint_document_stop_presentation_patcher.stop()
+        self.presentation_document_get_temp_folder_patcher.stop()
+        self.presentation_document_setup_patcher.stop()
+        self.destroy_settings()
+        shutil.rmtree(self.temp_folder)
+
+    def test_show_error_msg(self):
+        """
+        Test the PowerpointDocument.show_error_msg() method gets called on com exception
+        """
+        if is_win():
+            # GIVEN: A PowerpointDocument with mocked controller and presentation
+            with patch('openlp.plugins.presentations.lib.powerpointcontroller.critical_error_message_box') as \
+                    mocked_critical_error_message_box:
+                instance = PowerpointDocument(self.mock_controller, self.mock_presentation)
+                instance.presentation = MagicMock()
+                instance.presentation.SlideShowWindow.View.GotoSlide = MagicMock(side_effect=pywintypes.com_error('1'))
+                instance.index_map[42] = 42
+
+                # WHEN: Calling goto_slide which will throw an exception
+                instance.goto_slide(42)
+
+                # THEN: mocked_critical_error_message_box should have been called
+                mocked_critical_error_message_box.assert_called_with('Error', 'An error occurred in the PowerPoint '
+                                                                     'integration and the presentation will be stopped.'
+                                                                     ' Restart the presentation if you wish to '
+                                                                     'present it.')
+
+    # add _test to the following if necessary
+    def verify_loading_document(self):
+        """
+        Test loading a document in PowerPoint
+        """
+        if is_win() and self.real_controller.check_available():
+            # GIVEN: A PowerpointDocument and a presentation
+            doc = PowerpointDocument(self.real_controller, self.file_name)
+
+            # WHEN: loading the filename
+            doc.load_presentation()
+            result = doc.is_loaded()
+
+            # THEN: result should be true
+            self.assertEqual(result, True, 'The result should be True')
+        else:
+            self.skipTest('Powerpoint not available, skipping test.')
+
+    def test_create_titles_and_notes(self):
+        """
+        Test creating the titles from PowerPoint
+        """
+        # GIVEN: mocked save_titles_and_notes, _get_text_from_shapes and two mocked slides
+        self.doc = PowerpointDocument(self.mock_controller, self.file_name)
+        self.doc.get_slide_count = MagicMock()
+        self.doc.get_slide_count.return_value = 2
+        self.doc.index_map = {1: 1, 2: 2}
+        self.doc.save_titles_and_notes = MagicMock()
+        self.doc._PowerpointDocument__get_text_from_shapes = MagicMock()
+        slide = MagicMock()
+        slide.Shapes.Title.TextFrame.TextRange.Text = 'SlideText'
+        pres = MagicMock()
+        pres.Slides = MagicMock(side_effect=[slide, slide])
+        self.doc.presentation = pres
+
+        # WHEN reading the titles and notes
+        self.doc.create_titles_and_notes()
+
+        # THEN the save should have been called exactly once with 2 titles and 2 notes
+        self.doc.save_titles_and_notes.assert_called_once_with(['SlideText\n', 'SlideText\n'], [' ', ' '])
+
+    def test_create_titles_and_notes_with_no_slides(self):
+        """
+        Test creating the titles from PowerPoint when it returns no slides
+        """
+        # GIVEN: mocked save_titles_and_notes, _get_text_from_shapes and two mocked slides
+        doc = PowerpointDocument(self.mock_controller, self.file_name)
+        doc.save_titles_and_notes = MagicMock()
+        doc._PowerpointDocument__get_text_from_shapes = MagicMock()
+        pres = MagicMock()
+        pres.Slides = []
+        doc.presentation = pres
+
+        # WHEN reading the titles and notes
+        doc.create_titles_and_notes()
+
+        # THEN the save should have been called exactly once with empty titles and notes
+        doc.save_titles_and_notes.assert_called_once_with([], [])
+
+    def test_get_text_from_shapes(self):
+        """
+        Test getting text from powerpoint shapes
+        """
+        # GIVEN: mocked shapes
+        shape = MagicMock()
+        shape.PlaceholderFormat.Type = 2
+        shape.HasTextFrame = shape.TextFrame.HasText = True
+        shape.TextFrame.TextRange.Text = 'slideText'
+        shapes = [shape, shape]
+
+        # WHEN: getting the text
+        result = _get_text_from_shapes(shapes)
+
+        # THEN: it should return the text
+        self.assertEqual(result, 'slideText\nslideText\n', 'result should match \'slideText\nslideText\n\'')
+
+    def test_get_text_from_shapes_with_no_shapes(self):
+        """
+        Test getting text from powerpoint shapes with no shapes
+        """
+        # GIVEN: empty shapes array
+        shapes = []
+
+        # WHEN: getting the text
+        result = _get_text_from_shapes(shapes)
+
+        # THEN: it should not fail but return empty string
+        self.assertEqual(result, '', 'result should be empty')
+
+    def test_goto_slide(self):
+        """
+        Test that goto_slide goes to next effect if the slide is already displayed
+        """
+        # GIVEN: A Document with mocked controller, presentation, and mocked functions get_slide_number and next_step
+        doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
+        doc.presentation = MagicMock()
+        doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 1
+        doc.presentation.SlideShowWindow.View.GetClickCount.return_value = 2
+        doc.get_slide_number = MagicMock()
+        doc.get_slide_number.return_value = 1
+        doc.next_step = MagicMock()
+        doc.index_map[1] = 1
+
+        # WHEN: Calling goto_slide
+        doc.goto_slide(1)
+
+        # THEN: next_step() should be call to try to advance to the next effect.
+        self.assertTrue(doc.next_step.called, 'next_step() should have been called!')
+
+    def test_blank_screen(self):
+        """
+        Test that blank_screen works as expected
+        """
+        # GIVEN: A Document with mocked controller, presentation, and mocked function get_slide_number
+        doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
+        doc.presentation = MagicMock()
+        doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 3
+        doc.presentation.Application.Version = 14.0
+        doc.get_slide_number = MagicMock()
+        doc.get_slide_number.return_value = 2
+
+        # WHEN: Calling goto_slide
+        doc.blank_screen()
+
+        # THEN: The view state, doc.blank_slide and doc.blank_click should have new values
+        self.assertEquals(doc.presentation.SlideShowWindow.View.State, 3, 'The View State should be 3')
+        self.assertEquals(doc.blank_slide, 2, 'doc.blank_slide should be 2 because of the PowerPoint version')
+        self.assertEquals(doc.blank_click, 3, 'doc.blank_click should be 3 because of the PowerPoint version')
+
+    def test_unblank_screen(self):
+        """
+        Test that unblank_screen works as expected
+        """
+        # GIVEN: A Document with mocked controller, presentation, ScreenList, and mocked function get_slide_number
+        with patch('openlp.plugins.presentations.lib.powerpointcontroller.ScreenList') as mocked_screen_list:
+            mocked_screen_list_ret = MagicMock()
+            mocked_screen_list_ret.screen_list = [1]
+            mocked_screen_list.return_value = mocked_screen_list_ret
+            doc = PowerpointDocument(self.mock_controller, self.mock_presentation)
+            doc.presentation = MagicMock()
+            doc.presentation.SlideShowWindow.View.GetClickIndex.return_value = 3
+            doc.presentation.Application.Version = 14.0
+            doc.get_slide_number = MagicMock()
+            doc.get_slide_number.return_value = 2
+            doc.index_map[1] = 1
+            doc.blank_slide = 1
+            doc.blank_click = 1
+
+            # WHEN: Calling goto_slide
+            doc.unblank_screen()
+
+            # THEN: The view state have new value, and several function should have been called
+            self.assertEquals(doc.presentation.SlideShowWindow.View.State, 1, 'The View State should be 1')
+            self.assertEquals(doc.presentation.SlideShowWindow.Activate.called, True,
+                              'SlideShowWindow.Activate should have been called')
+            self.assertEquals(doc.presentation.SlideShowWindow.View.GotoSlide.called, True,
+                              'View.GotoSlide should have been called because of the PowerPoint version')
+            self.assertEquals(doc.presentation.SlideShowWindow.View.GotoClick.called, True,
+                              'View.GotoClick should have been called because of the PowerPoint version')

=== modified file 'tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py	2017-05-10 17:04:13 +0000
@@ -24,17 +24,16 @@
 """
 import os
 import shutil
-
 from tempfile import mkdtemp
 from unittest import TestCase
-
-from tests.functional import MagicMock, patch
+from unittest.mock import MagicMock, patch
+
+from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument, PptviewController
+from openlp.core.common import is_win
+
 from tests.helpers.testmixin import TestMixin
 from tests.utils.constants import TEST_RESOURCES_PATH
 
-from openlp.plugins.presentations.lib.pptviewcontroller import PptviewDocument, PptviewController
-from openlp.core.common import is_win
-
 if is_win():
     from ctypes import cdll
 

=== modified file 'tests/functional/openlp_plugins/presentations/test_presentationcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_presentationcontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/presentations/test_presentationcontroller.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 Functional tests to test the PresentationController and PresentationDocument
 classes and related methods.
 """
+import os
 from unittest import TestCase
-import os
+from unittest.mock import MagicMock, mock_open, patch
+
 from openlp.plugins.presentations.lib.presentationcontroller import PresentationController, PresentationDocument
-from tests.functional import MagicMock, mock_open, patch
 
 FOLDER_TO_PATCH = 'openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder'
 

=== modified file 'tests/functional/openlp_plugins/remotes/test_remotetab.py'
--- tests/functional/openlp_plugins/remotes/test_remotetab.py	2017-03-04 16:51:51 +0000
+++ tests/functional/openlp_plugins/remotes/test_remotetab.py	2017-05-10 17:04:13 +0000
@@ -25,13 +25,13 @@
 import os
 import re
 from unittest import TestCase
+from unittest.mock import patch
 
 from PyQt5 import QtWidgets
 
-
 from openlp.core.common import Settings
 from openlp.plugins.remotes.lib.remotetab import RemoteTab
-from tests.functional import patch
+
 from tests.helpers.testmixin import TestMixin
 
 __default_settings__ = {

=== modified file 'tests/functional/openlp_plugins/songs/test_editsongform.py'
--- tests/functional/openlp_plugins/songs/test_editsongform.py	2017-03-02 04:43:45 +0000
+++ tests/functional/openlp_plugins/songs/test_editsongform.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 This module contains tests for the lib submodule of the Songs plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from PyQt5 import QtCore
 
@@ -30,7 +31,7 @@
 from openlp.core.lib import ServiceItem
 from openlp.plugins.songs.forms.editsongform import EditSongForm
 from openlp.plugins.songs.lib.db import AuthorType
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/songs/test_editverseform.py'
--- tests/functional/openlp_plugins/songs/test_editverseform.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_editverseform.py	2017-05-10 17:04:13 +0000
@@ -23,14 +23,12 @@
 This module contains tests for the editverseform of the Songs plugin.
 """
 from unittest import TestCase
-
-from PyQt5 import QtCore, QtWidgets
-
-from openlp.core.common import Registry, Settings
-from openlp.core.lib import ServiceItem
+from unittest.mock import MagicMock
+
+from PyQt5 import QtCore
+
 from openlp.plugins.songs.forms.editverseform import EditVerseForm
-from openlp.plugins.songs.lib.db import AuthorType
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/songs/test_ewimport.py'
--- tests/functional/openlp_plugins/songs/test_ewimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_ewimport.py	2017-05-10 17:04:13 +0000
@@ -22,11 +22,9 @@
 """
 This module contains tests for the EasyWorship song importer.
 """
-
 import os
 from unittest import TestCase
-
-from tests.functional import MagicMock, patch
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry
 from openlp.plugins.songs.lib.importers.easyworship import EasyWorshipSongImport, FieldDescEntry, FieldType

=== modified file 'tests/functional/openlp_plugins/songs/test_foilpresenterimport.py'
--- tests/functional/openlp_plugins/songs/test_foilpresenterimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_foilpresenterimport.py	2017-05-10 17:04:13 +0000
@@ -22,10 +22,9 @@
 """
 This module contains tests for the SongShow Plus song importer.
 """
-
 import os
 from unittest import TestCase
-from tests.functional import patch, MagicMock
+from unittest.mock import patch, MagicMock
 
 from openlp.plugins.songs.lib.importers.foilpresenter import FoilPresenter
 

=== modified file 'tests/functional/openlp_plugins/songs/test_lib.py'
--- tests/functional/openlp_plugins/songs/test_lib.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_lib.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,10 @@
 This module contains tests for the lib submodule of the Songs plugin.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock, PropertyMock
 
 from openlp.plugins.songs.lib import VerseType, clean_string, clean_title, strip_rtf
 from openlp.plugins.songs.lib.songcompare import songs_probably_equal, _remove_typos, _op_length
-from tests.functional import patch, MagicMock, PropertyMock
 
 
 class TestLib(TestCase):

=== modified file 'tests/functional/openlp_plugins/songs/test_lyriximport.py'
--- tests/functional/openlp_plugins/songs/test_lyriximport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_lyriximport.py	2017-05-10 17:04:13 +0000
@@ -21,14 +21,10 @@
 """
 This module contains tests for the LyriX song importer.
 """
-
 import os
-from unittest import TestCase
+from unittest.mock import patch
 
 from tests.helpers.songfileimport import SongImportTestHelper
-from openlp.plugins.songs.lib.importers.opensong import OpenSongImport
-from openlp.core.common import Registry
-from tests.functional import patch, MagicMock
 
 TEST_PATH = os.path.abspath(
     os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'lyrixsongs'))

=== modified file 'tests/functional/openlp_plugins/songs/test_mediaitem.py'
--- tests/functional/openlp_plugins/songs/test_mediaitem.py	2017-01-08 19:12:12 +0000
+++ tests/functional/openlp_plugins/songs/test_mediaitem.py	2017-05-10 17:04:13 +0000
@@ -23,15 +23,15 @@
 This module contains tests for the lib submodule of the Songs plugin.
 """
 from unittest import TestCase
-from unittest.mock import call
+from unittest.mock import MagicMock, patch, call
 
 from PyQt5 import QtCore
 
 from openlp.core.common import Registry, Settings
 from openlp.core.lib import ServiceItem
+from openlp.plugins.songs.lib.db import AuthorType, Song
 from openlp.plugins.songs.lib.mediaitem import SongMediaItem
-from openlp.plugins.songs.lib.db import AuthorType, Song
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/songs/test_mediashout.py'
--- tests/functional/openlp_plugins/songs/test_mediashout.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_mediashout.py	2017-05-10 17:04:13 +0000
@@ -22,8 +22,9 @@
 """
 Test the MediaShout importer
 """
+from collections import namedtuple
 from unittest import TestCase, skipUnless
-from collections import namedtuple
+from unittest.mock import MagicMock, patch, call
 
 from openlp.core.common import Registry
 try:
@@ -32,8 +33,6 @@
 except ImportError:
     CAN_RUN_TESTS = False
 
-from tests.functional import MagicMock, patch, call
-
 
 @skipUnless(CAN_RUN_TESTS, 'Not Windows, skipping test')
 class TestMediaShoutImport(TestCase):

=== modified file 'tests/functional/openlp_plugins/songs/test_openlpimporter.py'
--- tests/functional/openlp_plugins/songs/test_openlpimporter.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_openlpimporter.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,10 @@
 This module contains tests for the OpenLP song importer.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
+from openlp.core.common import Registry
 from openlp.plugins.songs.lib.importers.openlp import OpenLPSongImport
-from openlp.core.common import Registry
-from tests.functional import patch, MagicMock
 
 
 class TestOpenLPImport(TestCase):

=== modified file 'tests/functional/openlp_plugins/songs/test_openlyricsexport.py'
--- tests/functional/openlp_plugins/songs/test_openlyricsexport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_openlyricsexport.py	2017-05-10 17:04:13 +0000
@@ -22,17 +22,17 @@
 """
 This module contains tests for the OpenLyrics song importer.
 """
-
 import os
 import shutil
+from tempfile import mkdtemp
 from unittest import TestCase
-from tempfile import mkdtemp
+from unittest.mock import MagicMock, patch
 
-from tests.functional import MagicMock, patch
-from tests.helpers.testmixin import TestMixin
 from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport
 from openlp.core.common import Registry
 
+from tests.helpers.testmixin import TestMixin
+
 
 class TestOpenLyricsExport(TestCase, TestMixin):
     """

=== modified file 'tests/functional/openlp_plugins/songs/test_openlyricsimport.py'
--- tests/functional/openlp_plugins/songs/test_openlyricsimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_openlyricsimport.py	2017-05-10 17:04:13 +0000
@@ -22,19 +22,19 @@
 """
 This module contains tests for the OpenLyrics song importer.
 """
-
 import os
 import json
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
+
 from lxml import etree, objectify
 
-from tests.functional import MagicMock, patch
-from tests.helpers.testmixin import TestMixin
 from openlp.plugins.songs.lib.importers.openlyrics import OpenLyricsImport
 from openlp.plugins.songs.lib.importers.songimport import SongImport
 from openlp.plugins.songs.lib.openlyricsxml import OpenLyrics
 from openlp.core.common import Registry, Settings
 
+from tests.helpers.testmixin import TestMixin
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                          '..', '..', '..', 'resources', 'openlyricssongs'))

=== modified file 'tests/functional/openlp_plugins/songs/test_openoffice.py'
--- tests/functional/openlp_plugins/songs/test_openoffice.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_openoffice.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 This module contains tests for the OpenOffice/LibreOffice importer.
 """
 from unittest import TestCase, SkipTest
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry
 try:
@@ -30,7 +31,6 @@
 except ImportError:
     raise SkipTest('Could not import OpenOfficeImport probably due to unavailability of uno')
 
-from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/functional/openlp_plugins/songs/test_opensongimport.py'
--- tests/functional/openlp_plugins/songs/test_opensongimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_opensongimport.py	2017-05-10 17:04:13 +0000
@@ -24,12 +24,12 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
+from openlp.core.common import Registry
 from openlp.plugins.songs.lib.importers.opensong import OpenSongImport
-from openlp.core.common import Registry
 
 from tests.helpers.songfileimport import SongImportTestHelper
-from tests.functional import patch, MagicMock
 
 TEST_PATH = os.path.abspath(
     os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'opensongsongs'))

=== modified file 'tests/functional/openlp_plugins/songs/test_opsproimport.py'
--- tests/functional/openlp_plugins/songs/test_opsproimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_opsproimport.py	2017-05-10 17:04:13 +0000
@@ -25,6 +25,7 @@
 import os
 import json
 from unittest import TestCase, skipUnless
+from unittest.mock import patch, MagicMock
 
 try:
     from openlp.core.common import Registry
@@ -33,8 +34,6 @@
 except ImportError:
     CAN_RUN_TESTS = False
 
-from tests.functional import patch, MagicMock
-
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'opsprosongs'))
 
 

=== modified file 'tests/functional/openlp_plugins/songs/test_songbeamerimport.py'
--- tests/functional/openlp_plugins/songs/test_songbeamerimport.py	2017-03-13 12:43:55 +0000
+++ tests/functional/openlp_plugins/songs/test_songbeamerimport.py	2017-05-10 17:04:13 +0000
@@ -22,15 +22,15 @@
 """
 This module contains tests for the Songbeamer song importer.
 """
-
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
-from tests.helpers.songfileimport import SongImportTestHelper
-from tests.functional import MagicMock, patch
 from openlp.plugins.songs.lib.importers.songbeamer import SongBeamerImport, SongBeamerTypes
 from openlp.core.common import Registry
 
+from tests.helpers.songfileimport import SongImportTestHelper
+
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                          '..', '..', '..', 'resources', 'songbeamersongs'))
 

=== modified file 'tests/functional/openlp_plugins/songs/test_songshowplusimport.py'
--- tests/functional/openlp_plugins/songs/test_songshowplusimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_songshowplusimport.py	2017-05-10 17:04:13 +0000
@@ -22,14 +22,14 @@
 """
 This module contains tests for the SongShow Plus song importer.
 """
-
 import os
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
-from tests.helpers.songfileimport import SongImportTestHelper
 from openlp.plugins.songs.lib import VerseType
 from openlp.plugins.songs.lib.importers.songshowplus import SongShowPlusImport
-from tests.functional import patch, MagicMock
+
+from tests.helpers.songfileimport import SongImportTestHelper
 
 TEST_PATH = os.path.abspath(
     os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'songshowplussongs'))

=== modified file 'tests/functional/openlp_plugins/songs/test_sundayplusimport.py'
--- tests/functional/openlp_plugins/songs/test_sundayplusimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_sundayplusimport.py	2017-05-10 17:04:13 +0000
@@ -19,13 +19,12 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 """
-This module contains tests for the VideoPsalm song importer.
+This module contains tests for the SundayPlus song importer.
 """
-
 import os
+from unittest.mock import patch
 
 from tests.helpers.songfileimport import SongImportTestHelper
-from tests.functional import patch
 
 TEST_PATH = os.path.abspath(
     os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'sundayplussongs'))

=== modified file 'tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py'
--- tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py	2017-05-10 17:04:13 +0000
@@ -23,6 +23,7 @@
 This module contains tests for the WorshipCenter Pro song importer.
 """
 from unittest import TestCase, skipUnless
+from unittest.mock import patch, MagicMock
 
 try:
     import pyodbc
@@ -33,9 +34,6 @@
     CAN_RUN_TESTS = False
 
 
-from tests.functional import patch, MagicMock
-
-
 class TestRecord(object):
     """
     Microsoft Access Driver is not available on non Microsoft Systems for this reason the :class:`TestRecord` is used

=== modified file 'tests/functional/openlp_plugins/songs/test_zionworximport.py'
--- tests/functional/openlp_plugins/songs/test_zionworximport.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_plugins/songs/test_zionworximport.py	2017-05-10 17:04:13 +0000
@@ -23,15 +23,15 @@
 This module contains tests for the ZionWorx song importer.
 """
 import os
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
-from tests.functional import MagicMock, patch
-from tests.helpers.songfileimport import SongImportTestHelper
 from openlp.plugins.songs.lib.importers.zionworx import ZionWorxImport
 from openlp.plugins.songs.lib.importers.songimport import SongImport
 from openlp.core.common import Registry
 
+from tests.helpers.songfileimport import SongImportTestHelper
+
 TEST_PATH = os.path.abspath(
     os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'zionworxsongs'))
 

=== modified file 'tests/functional/test_init.py'
--- tests/functional/test_init.py	2016-12-31 11:01:36 +0000
+++ tests/functional/test_init.py	2017-05-10 17:04:13 +0000
@@ -24,6 +24,7 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import MagicMock, patch, call
 
 from PyQt5 import QtCore, QtWidgets
 
@@ -31,7 +32,6 @@
 from openlp.core.common import Settings
 
 from tests.helpers.testmixin import TestMixin
-from tests.functional import MagicMock, patch, call
 
 TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'resources'))
 

=== modified file 'tests/helpers/songfileimport.py'
--- tests/helpers/songfileimport.py	2016-12-31 11:01:36 +0000
+++ tests/helpers/songfileimport.py	2017-05-10 17:04:13 +0000
@@ -26,11 +26,10 @@
 import json
 import logging
 from unittest import TestCase
+from unittest.mock import MagicMock, patch, call
 
+from openlp.core.common import Registry
 from openlp.plugins.songs.lib.importers.opensong import OpenSongImport
-from openlp.core.common import Registry
-
-from tests.functional import patch, MagicMock, call
 
 log = logging.getLogger(__name__)
 

=== modified file 'tests/interfaces/__init__.py'
--- tests/interfaces/__init__.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/__init__.py	2017-05-10 17:04:13 +0000
@@ -19,9 +19,6 @@
 # with this program; if not, write to the Free Software Foundation, Inc., 59  #
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
-import sys
-
-if sys.version_info[1] >= 3:
-    from unittest.mock import patch, MagicMock
-else:
-    from mock import patch, MagicMock
+"""
+Interface tests
+"""

=== modified file 'tests/interfaces/openlp_core_lib/test_pluginmanager.py'
--- tests/interfaces/openlp_core_lib/test_pluginmanager.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_lib/test_pluginmanager.py	2017-05-10 17:04:13 +0000
@@ -27,12 +27,13 @@
 import gc
 from tempfile import mkdtemp
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtWidgets
 
 from openlp.core.common import Registry, Settings
 from openlp.core.lib.pluginmanager import PluginManager
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_filerenamedialog.py'
--- tests/interfaces/openlp_core_ui/test_filerenamedialog.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_filerenamedialog.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,13 @@
     Package to test the openlp.core.ui package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtTest, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.ui import filerenameform
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_mainwindow.py'
--- tests/interfaces/openlp_core_ui/test_mainwindow.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_mainwindow.py	2017-05-10 17:04:13 +0000
@@ -23,11 +23,11 @@
 Package to test the openlp.core.ui.mainwindow package.
 """
 from unittest import TestCase
-
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry
 from openlp.core.ui.mainwindow import MainWindow
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_projectoreditform.py'
--- tests/interfaces/openlp_core_ui/test_projectoreditform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_projectoreditform.py	2017-05-10 17:04:13 +0000
@@ -25,12 +25,12 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import patch
 
 from openlp.core.common import Registry
 from openlp.core.lib.projector.db import Projector, ProjectorDB
 from openlp.core.ui import ProjectorEditForm
 
-from tests.functional import patch
 from tests.helpers.testmixin import TestMixin
 from tests.resources.projector.data import TEST_DB, TEST1_DATA, TEST2_DATA
 

=== modified file 'tests/interfaces/openlp_core_ui/test_projectormanager.py'
--- tests/interfaces/openlp_core_ui/test_projectormanager.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_projectormanager.py	2017-05-10 17:04:13 +0000
@@ -24,14 +24,13 @@
 """
 import os
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from openlp.core.common import Registry, Settings
-from tests.functional import patch, MagicMock
-from tests.helpers.testmixin import TestMixin
-
 from openlp.core.ui import ProjectorManager, ProjectorEditForm
 from openlp.core.lib.projector.db import Projector, ProjectorDB
 
+from tests.helpers.testmixin import TestMixin
 from tests.resources.projector.data import TEST_DB, TEST1_DATA, TEST2_DATA, TEST3_DATA
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_projectorsourceform.py'
--- tests/interfaces/openlp_core_ui/test_projectorsourceform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_projectorsourceform.py	2017-05-10 17:04:13 +0000
@@ -24,24 +24,21 @@
 
 Tests for the Projector Source Select form.
 """
-import logging
-log = logging.getLogger(__name__)
-log.debug('test_projectorsourceform loaded')
 import os
 import time
 from unittest import TestCase
+from unittest.mock import patch
 
 from PyQt5.QtWidgets import QDialog
 
-from tests.functional import patch
-from tests.helpers.testmixin import TestMixin
-from tests.resources.projector.data import TEST_DB, TEST1_DATA
-
 from openlp.core.common import Registry, Settings
 from openlp.core.lib.projector.db import ProjectorDB, Projector
 from openlp.core.lib.projector.constants import PJLINK_DEFAULT_CODES, PJLINK_DEFAULT_SOURCES
 from openlp.core.ui.projector.sourceselectform import source_group, SourceSelectSingle
 
+from tests.helpers.testmixin import TestMixin
+from tests.resources.projector.data import TEST_DB, TEST1_DATA
+
 
 def build_source_dict():
     """

=== modified file 'tests/interfaces/openlp_core_ui/test_servicemanager.py'
--- tests/interfaces/openlp_core_ui/test_servicemanager.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_servicemanager.py	2017-05-10 17:04:13 +0000
@@ -22,13 +22,13 @@
 """
     Package to test the openlp.core.lib package.
 """
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry
 from openlp.core.lib import ScreenList, ServiceItem, ItemCapabilities
 from openlp.core.ui.mainwindow import MainWindow
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_servicenotedialog.py'
--- tests/interfaces/openlp_core_ui/test_servicenotedialog.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_servicenotedialog.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,13 @@
 Package to test the openlp.core.ui package.
 """
 from unittest import TestCase
+from unittest.mock import patch
 
 from PyQt5 import QtCore, QtTest, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.ui import servicenoteform
-from tests.interfaces import patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_settings_form.py'
--- tests/interfaces/openlp_core_ui/test_settings_form.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_settings_form.py	2017-05-10 17:04:13 +0000
@@ -23,13 +23,14 @@
 Package to test the openlp.core.lib.settingsform package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore, QtTest
 
 from openlp.core.common import Registry
 from openlp.core.ui import settingsform
 from openlp.core.lib import ScreenList
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 SCREEN = {

=== modified file 'tests/interfaces/openlp_core_ui/test_shortcutlistform.py'
--- tests/interfaces/openlp_core_ui/test_shortcutlistform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_shortcutlistform.py	2017-05-10 17:04:13 +0000
@@ -23,13 +23,13 @@
 Package to test the openlp.core.ui.shortcutform package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore, QtGui, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.ui.shortcutlistform import ShortcutListForm
 
-from tests.interfaces import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_starttimedialog.py'
--- tests/interfaces/openlp_core_ui/test_starttimedialog.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_starttimedialog.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,13 @@
 Package to test the openlp.core.ui package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtCore, QtTest, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.ui import starttimeform
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui/test_thememanager.py'
--- tests/interfaces/openlp_core_ui/test_thememanager.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui/test_thememanager.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,11 @@
 Interface tests to test the themeManager class and related methods.
 """
 from unittest import TestCase
+from unittest.mock import patch, MagicMock
 
 from openlp.core.common import Registry, Settings
 from openlp.core.ui import ThemeManager, ThemeForm, FileRenameForm
-from tests.functional import patch, MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_core_ui_lib/test_listpreviewwidget.py'
--- tests/interfaces/openlp_core_ui_lib/test_listpreviewwidget.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_core_ui_lib/test_listpreviewwidget.py	2017-05-10 17:04:13 +0000
@@ -22,15 +22,15 @@
 """
     Package to test the openlp.core.ui.lib.listpreviewwidget.
 """
-
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtGui, QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.lib import ServiceItem
 from openlp.core.ui.lib import ListWidgetWithDnD, ListPreviewWidget
-from tests.interfaces import MagicMock, patch
+
 from tests.utils.osdinteraction import read_service_from_file
 from tests.helpers.testmixin import TestMixin
 

=== modified file 'tests/interfaces/openlp_plugins/bibles/test_lib_http.py'
--- tests/interfaces/openlp_plugins/bibles/test_lib_http.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/bibles/test_lib_http.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,10 @@
     Package to test the openlp.plugin.bible.lib.https package.
 """
 from unittest import TestCase, skip
+from unittest.mock import MagicMock
 
 from openlp.core.common import Registry
 from openlp.plugins.bibles.lib.importers.http import BGExtract, CWExtract, BSExtract
-from tests.interfaces import MagicMock
 
 
 class TestBibleHTTP(TestCase):

=== modified file 'tests/interfaces/openlp_plugins/bibles/test_lib_manager.py'
--- tests/interfaces/openlp_plugins/bibles/test_lib_manager.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/bibles/test_lib_manager.py	2017-05-10 17:04:13 +0000
@@ -23,10 +23,10 @@
 Functional tests to test the Bible Manager class and related methods.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry, Settings
 from openlp.plugins.bibles.lib import BibleManager, LanguageSelection
-from tests.interfaces import MagicMock, patch
 
 from tests.utils.constants import TEST_RESOURCES_PATH
 from tests.helpers.testmixin import TestMixin

=== modified file 'tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py'
--- tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py	2017-05-10 17:04:13 +0000
@@ -23,7 +23,7 @@
 This module contains tests for the lib submodule of the Bibles plugin.
 """
 from unittest import TestCase
-from tests.interfaces import MagicMock, patch
+from unittest.mock import MagicMock, patch
 
 from openlp.core.common import Registry, Settings
 from openlp.plugins.bibles.lib import BibleManager, parse_reference, LanguageSelection

=== modified file 'tests/interfaces/openlp_plugins/custom/forms/test_customform.py'
--- tests/interfaces/openlp_plugins/custom/forms/test_customform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/custom/forms/test_customform.py	2017-05-10 17:04:13 +0000
@@ -23,14 +23,14 @@
 Module to test the EditCustomForm.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtTest, QtCore, QtWidgets
 
 from openlp.core.common import Registry
-# TODO: FIXME: Import needed due to horrible bad imports
 from openlp.plugins.custom.lib.mediaitem import CustomMediaItem
 from openlp.plugins.custom.forms.editcustomform import EditCustomForm
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_plugins/custom/forms/test_customslideform.py'
--- tests/interfaces/openlp_plugins/custom/forms/test_customslideform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/custom/forms/test_customslideform.py	2017-05-10 17:04:13 +0000
@@ -23,12 +23,13 @@
 Module to test the EditCustomSlideForm.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock, patch
 
 from PyQt5 import QtWidgets
 
 from openlp.core.common import Registry
 from openlp.plugins.custom.forms.editcustomslideform import EditCustomSlideForm
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_plugins/media/forms/test_mediaclipselectorform.py'
--- tests/interfaces/openlp_plugins/media/forms/test_mediaclipselectorform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/media/forms/test_mediaclipselectorform.py	2017-05-10 17:04:13 +0000
@@ -22,9 +22,10 @@
 """
 Module to test the MediaClipSelectorForm.
 """
-
 import os
 from unittest import TestCase, SkipTest
+from unittest.mock import MagicMock, patch
+
 from openlp.core.ui.media.vlcplayer import get_vlc
 
 if os.name == 'nt' and not get_vlc():
@@ -34,7 +35,7 @@
 
 from openlp.core.common import Registry
 from openlp.plugins.media.forms.mediaclipselectorform import MediaClipSelectorForm
-from tests.interfaces import MagicMock, patch
+
 from tests.helpers.testmixin import TestMixin
 
 

=== modified file 'tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py'
--- tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py	2016-12-31 11:01:36 +0000
+++ tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py	2017-05-10 17:04:13 +0000
@@ -23,13 +23,14 @@
 Package to test the openlp.plugins.songs.forms.editsongform package.
 """
 from unittest import TestCase
+from unittest.mock import MagicMock
 
 from PyQt5 import QtWidgets
 
 from openlp.core.common import Registry
 from openlp.core.common.uistrings import UiStrings
 from openlp.plugins.songs.forms.editsongform import EditSongForm
-from tests.interfaces import MagicMock
+
 from tests.helpers.testmixin import TestMixin
 
 


Follow ups