openlp/tests/interfaces/openlp_core/widgets/test_views.py

111 lines
4.9 KiB
Python
Raw Normal View History

2014-03-14 22:08:44 +00:00
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
2019-04-13 13:00:22 +00:00
##########################################################################
# OpenLP - Open Source Lyrics Projection #
# ---------------------------------------------------------------------- #
# Copyright (c) 2008-2019 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, either version 3 of the License, or #
# (at your option) any later version. #
# #
# 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, see <https://www.gnu.org/licenses/>. #
##########################################################################
2013-04-27 10:00:46 +00:00
"""
2017-10-23 22:09:57 +00:00
Package to test the openlp.core.widgets.views.
2013-04-27 10:00:46 +00:00
"""
from unittest import TestCase
from unittest.mock import MagicMock, patch
2013-04-27 10:00:46 +00:00
2015-11-07 00:49:40 +00:00
from PyQt5 import QtGui, QtWidgets
2013-04-27 10:00:46 +00:00
2017-10-07 07:05:07 +00:00
from openlp.core.common.registry import Registry
from openlp.core.lib.serviceitem import ServiceItem
2019-02-07 19:38:11 +00:00
from openlp.core.state import State
2017-10-23 22:09:57 +00:00
from openlp.core.widgets.views import ListPreviewWidget
2014-03-14 22:08:44 +00:00
from tests.helpers.testmixin import TestMixin
2017-12-28 08:27:44 +00:00
from tests.utils.osdinteraction import read_service_from_file
2013-04-27 10:00:46 +00:00
2014-03-14 22:08:44 +00:00
class TestListPreviewWidget(TestCase, TestMixin):
2013-04-27 10:00:46 +00:00
def setUp(self):
"""
Create the UI.
"""
Registry.create()
self.setup_application()
2019-02-07 19:38:11 +00:00
State().load_settings()
2019-02-12 20:55:58 +00:00
State().add_service("media", 0)
State().update_pre_conditions("media", True)
State().flush_preconditions()
2015-11-07 00:49:40 +00:00
self.main_window = QtWidgets.QMainWindow()
2013-04-27 10:00:46 +00:00
self.image = QtGui.QImage(1, 1, QtGui.QImage.Format_RGB32)
self.image_manager = MagicMock()
self.image_manager.get_image.return_value = self.image
2013-08-31 18:17:38 +00:00
Registry().register('image_manager', self.image_manager)
2016-04-22 19:25:28 +00:00
self.preview_widget = ListPreviewWidget(self.main_window, 2)
2013-04-27 10:00:46 +00:00
def tearDown(self):
"""
Delete all the C++ objects at the end so that we don't have a segfault.
"""
del self.preview_widget
del self.main_window
2016-05-31 21:40:13 +00:00
def test_initial_slide_count(self):
2013-04-27 10:00:46 +00:00
"""
2014-01-01 14:59:57 +00:00
Test the initial slide count .
2013-04-27 10:00:46 +00:00
"""
# GIVEN: A new ListPreviewWidget instance.
# WHEN: No SlideItem has been added yet.
# THEN: The count of items should be zero.
2017-12-23 09:09:45 +00:00
assert self.preview_widget.slide_count() == 0, 'The slide list should be empty.'
2013-04-27 10:00:46 +00:00
2016-05-31 21:40:13 +00:00
def test_initial_slide_number(self):
2013-04-27 10:00:46 +00:00
"""
2014-01-01 14:59:57 +00:00
Test the initial current slide number.
2013-04-27 10:00:46 +00:00
"""
# GIVEN: A new ListPreviewWidget instance.
# WHEN: No SlideItem has been added yet.
# THEN: The number of the current item should be -1.
2017-12-23 09:09:45 +00:00
assert self.preview_widget.current_slide_number() == -1, 'The slide number should be -1.'
2013-04-27 10:00:46 +00:00
2016-05-31 21:40:13 +00:00
def test_replace_service_item(self):
2013-04-27 10:00:46 +00:00
"""
Test item counts and current number with a service item.
"""
# GIVEN: A ServiceItem with two frames.
service_item = ServiceItem(None)
2013-08-31 18:17:38 +00:00
service = read_service_from_file('serviceitem_image_3.osj')
2013-04-27 10:00:46 +00:00
with patch('os.path.exists'):
service_item.set_from_service(service[0])
# WHEN: Added to the preview widget.
self.preview_widget.replace_service_item(service_item, 1, 1)
# THEN: The slide count and number should fit.
2017-12-23 09:09:45 +00:00
assert self.preview_widget.slide_count() == 2, 'The slide count should be 2.'
assert self.preview_widget.current_slide_number() == 1, 'The current slide number should be 1.'
2013-04-27 10:00:46 +00:00
2016-05-31 21:40:13 +00:00
def test_change_slide(self):
2013-04-27 10:00:46 +00:00
"""
Test the change_slide method.
"""
# GIVEN: A ServiceItem with two frames content.
service_item = ServiceItem(None)
2013-08-31 18:17:38 +00:00
service = read_service_from_file('serviceitem_image_3.osj')
2013-04-27 10:00:46 +00:00
with patch('os.path.exists'):
service_item.set_from_service(service[0])
# WHEN: Added to the preview widget and switched to the second frame.
self.preview_widget.replace_service_item(service_item, 1, 0)
self.preview_widget.change_slide(1)
# THEN: The current_slide_number should reflect the change.
2017-12-23 09:09:45 +00:00
assert self.preview_widget.current_slide_number() == 1, 'The current slide number should be 1.'