forked from openlp/openlp
623 lines
19 KiB
Python
623 lines
19 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
##########################################################################
|
|
# OpenLP - Open Source Lyrics Projection #
|
|
# ---------------------------------------------------------------------- #
|
|
# Copyright (c) 2008-2021 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/>. #
|
|
##########################################################################
|
|
"""
|
|
Package to test the openlp.core.widgets.fontselect package.
|
|
"""
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from openlp.core.pages.fontselect import FontSelectPage
|
|
|
|
|
|
def test_init_(settings):
|
|
"""
|
|
Test the initialisation of FontSelectPage
|
|
"""
|
|
# GIVEN: The FontSelectPage class
|
|
# WHEN: Initialising FontSelectPage
|
|
# THEN: We should have an instance of the widget with no errors
|
|
FontSelectPage()
|
|
|
|
|
|
def test_font_name_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "font_name_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.font_name_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_font_name_changed('Sans serif')
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.font_name_changed.emit.assert_called_once_with('Sans serif')
|
|
|
|
|
|
def test_font_name_changed_int(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "font_name_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.font_name_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_font_name_changed(5)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
assert instance.font_name_changed.emit.call_count == 0
|
|
|
|
|
|
def test_font_color_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "font_color_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.font_color_changed = MagicMock()
|
|
|
|
# WHEN: The font color changes
|
|
instance._on_font_color_changed('#fff')
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.font_color_changed.emit.assert_called_once_with('#fff')
|
|
|
|
|
|
def test_is_bold_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "is_bold_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.is_bold_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_style_bold_toggled(True)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.is_bold_changed.emit.assert_called_once_with(True)
|
|
|
|
|
|
def test_is_italic_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "style_italic_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.is_italic_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_style_italic_toggled(False)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.is_italic_changed.emit.assert_called_once_with(False)
|
|
|
|
|
|
def test_font_size_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "font_size_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.font_size_changed = MagicMock()
|
|
|
|
# WHEN: The font size changes
|
|
instance._on_font_size_changed(14)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.font_size_changed.emit.assert_called_once_with(14)
|
|
|
|
|
|
def test_line_spacing_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "line_spacing_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.line_spacing_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_line_spacing_changed(1)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.line_spacing_changed.emit.assert_called_once_with(1)
|
|
|
|
|
|
def test_is_outline_enabled_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "outline_enabled_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.is_outline_enabled_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_outline_toggled(True)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.is_outline_enabled_changed.emit.assert_called_once_with(True)
|
|
|
|
|
|
def test_outline_color_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "outline_color_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.outline_color_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_outline_color_changed('#000')
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.outline_color_changed.emit.assert_called_once_with('#000')
|
|
|
|
|
|
def test_outline_size_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "outline_size_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.outline_size_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_outline_size_changed(2)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.outline_size_changed.emit.assert_called_once_with(2)
|
|
|
|
|
|
def test_is_shadow_enabled_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "is_shadow_enabled_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.is_shadow_enabled_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_shadow_toggled(False)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.is_shadow_enabled_changed.emit.assert_called_once_with(False)
|
|
|
|
|
|
def test_shadow_color_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "shadow_color_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.shadow_color_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_shadow_color_changed('#000')
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.shadow_color_changed.emit.assert_called_once_with('#000')
|
|
|
|
|
|
def test_shadow_size_changed(settings):
|
|
# GIVEN: An instance of FontSelectPage with a mocked out "shadow_size_changed" signal
|
|
instance = FontSelectPage()
|
|
instance.shadow_size_changed = MagicMock()
|
|
|
|
# WHEN: The font name changes
|
|
instance._on_shadow_size_changed(5)
|
|
|
|
# THEN: The signal should be emitted with the correct value
|
|
instance.shadow_size_changed.emit.assert_called_once_with(5)
|
|
|
|
|
|
def test_enable_features(settings):
|
|
"""
|
|
Test that the `enable_features` method correctly enables widgets based on features
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
mock_label = MagicMock()
|
|
mock_control = MagicMock()
|
|
instance.feature_widgets = {'test': [mock_label, mock_control]}
|
|
|
|
# WHEN: The "test" feature is enabled
|
|
instance.enable_features('test')
|
|
|
|
# THEN: "show()" is called on all the widgets
|
|
mock_label.show.assert_called_once()
|
|
mock_control.show.assert_called_once()
|
|
|
|
|
|
def test_enable_missing_features(settings):
|
|
"""
|
|
Test that the `enable_features` method correctly raises an error on a non-existent feature
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
mock_label = MagicMock()
|
|
mock_control = MagicMock()
|
|
instance.feature_widgets = {'test1': [mock_label, mock_control]}
|
|
|
|
# WHEN: The "test" feature is enabled
|
|
with pytest.raises(KeyError, match='No such feature'):
|
|
instance.enable_features('test2')
|
|
|
|
|
|
def test_disable_features(settings):
|
|
"""
|
|
Test that the `disable_features` method correctly disables widgets based on features
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
mock_label = MagicMock()
|
|
mock_control = MagicMock()
|
|
instance.feature_widgets = {'test': [mock_label, mock_control]}
|
|
|
|
# WHEN: The "test" feature is disabled
|
|
instance.disable_features('test')
|
|
|
|
# THEN: "show()" is called on all the widgets
|
|
mock_label.hide.assert_called_once()
|
|
mock_control.hide.assert_called_once()
|
|
|
|
|
|
def test_disable_missing_features(settings):
|
|
"""
|
|
Test that the `disable_features` method correctly raises an error on a non-existent feature
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
mock_label = MagicMock()
|
|
mock_control = MagicMock()
|
|
instance.feature_widgets = {'test1': [mock_label, mock_control]}
|
|
|
|
# WHEN: The "test" feature is disabled
|
|
with pytest.raises(KeyError, match='No such feature'):
|
|
instance.disable_features('test2')
|
|
|
|
|
|
def test_get_font_name_property(settings):
|
|
"""
|
|
Test the `font_name` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.font_name_combobox.currentFont = MagicMock(
|
|
return_value=MagicMock(**{'family.return_value': 'Sans serif'}))
|
|
|
|
# WHEN: The `font_name` propert is accessed
|
|
result = instance.font_name
|
|
|
|
# THEN: The value should be correct
|
|
assert result == 'Sans serif'
|
|
|
|
|
|
def test_set_font_name_property(settings):
|
|
"""
|
|
Test setting the `font_name` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.font_name_combobox.setCurrentFont = MagicMock()
|
|
|
|
# WHEN: The `font_name` property is set
|
|
with patch('openlp.core.pages.fontselect.QtGui.QFont') as MockFont:
|
|
mocked_font = MagicMock()
|
|
MockFont.return_value = mocked_font
|
|
instance.font_name = 'Serif'
|
|
|
|
# THEN: The correct value should be set
|
|
MockFont.assert_called_once_with('Serif')
|
|
instance.font_name_combobox.setCurrentFont.assert_called_once_with(mocked_font)
|
|
|
|
|
|
def test_get_font_color_property(settings):
|
|
"""
|
|
Test the `font_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.font_color_button.color = '#000'
|
|
|
|
# WHEN: The `font_color` propert is accessed
|
|
result = instance.font_color
|
|
|
|
# THEN: The value should be correct
|
|
assert result == '#000'
|
|
|
|
|
|
def test_set_font_color_property(settings):
|
|
"""
|
|
Test setting the `font_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
|
|
# WHEN: The `font_color` property is set
|
|
instance.font_color = '#fff'
|
|
|
|
# THEN: The correct value should be set
|
|
assert instance.font_color_button.color == '#fff'
|
|
|
|
|
|
def test_get_is_bold_property(settings):
|
|
"""
|
|
Test the `is_bold` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.style_bold_button.isChecked = MagicMock(return_value=False)
|
|
|
|
# WHEN: The `is_bold` propert is accessed
|
|
result = instance.is_bold
|
|
|
|
# THEN: The value should be correct
|
|
assert result is False
|
|
|
|
|
|
def test_set_is_bold_property(settings):
|
|
"""
|
|
Test setting the `is_bold` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.style_bold_button.setChecked = MagicMock()
|
|
|
|
# WHEN: The `is_bold` property is set
|
|
instance.is_bold = True
|
|
|
|
# THEN: The correct value should be set
|
|
instance.style_bold_button.setChecked.assert_called_once_with(True)
|
|
|
|
|
|
def test_get_is_italic_property(settings):
|
|
"""
|
|
Test the `is_italic` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.style_italic_button.isChecked = MagicMock(return_value=True)
|
|
|
|
# WHEN: The `is_italic` propert is accessed
|
|
result = instance.is_italic
|
|
|
|
# THEN: The value should be correct
|
|
assert result is True
|
|
|
|
|
|
def test_set_is_italic_property(settings):
|
|
"""
|
|
Test setting the `is_italic` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.style_italic_button.setChecked = MagicMock()
|
|
|
|
# WHEN: The `is_italic` property is set
|
|
instance.is_italic = False
|
|
|
|
# THEN: The correct value should be set
|
|
instance.style_italic_button.setChecked.assert_called_once_with(False)
|
|
|
|
|
|
def test_get_font_size_property(settings):
|
|
"""
|
|
Test the `font_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.font_size_spinbox.value = MagicMock(return_value=16)
|
|
|
|
# WHEN: The `font_size` propert is accessed
|
|
result = instance.font_size
|
|
|
|
# THEN: The value should be correct
|
|
assert result == 16
|
|
|
|
|
|
def test_set_font_size_property(settings):
|
|
"""
|
|
Test setting the `font_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.font_size_spinbox.setValue = MagicMock()
|
|
|
|
# WHEN: The `font_size` property is set
|
|
instance.font_size = 18
|
|
|
|
# THEN: The correct value should be set
|
|
instance.font_size_spinbox.setValue.assert_called_once_with(18)
|
|
|
|
|
|
def test_get_line_spacing_property(settings):
|
|
"""
|
|
Test the `line_spacing` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.line_spacing_spinbox.value = MagicMock(return_value=1)
|
|
|
|
# WHEN: The `line_spacing` propert is accessed
|
|
result = instance.line_spacing
|
|
|
|
# THEN: The value should be correct
|
|
assert result == 1
|
|
|
|
|
|
def test_set_line_spacing_property(settings):
|
|
"""
|
|
Test setting the `line_spacing` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.line_spacing_spinbox.setValue = MagicMock()
|
|
|
|
# WHEN: The `line_spacing` property is set
|
|
instance.line_spacing = 2
|
|
|
|
# THEN: The correct value should be set
|
|
instance.line_spacing_spinbox.setValue.assert_called_once_with(2)
|
|
|
|
|
|
def test_get_is_outline_enabled_property(settings):
|
|
"""
|
|
Test the `is_outline_enabled` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.outline_groupbox.isChecked = MagicMock(return_value=True)
|
|
|
|
# WHEN: The `is_outline_enabled` propert is accessed
|
|
result = instance.is_outline_enabled
|
|
|
|
# THEN: The value should be correct
|
|
assert result is True
|
|
|
|
|
|
def test_set_is_outline_enabled_property(settings):
|
|
"""
|
|
Test setting the `is_outline_enabled` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.outline_groupbox.setChecked = MagicMock()
|
|
|
|
# WHEN: The `is_outline_enabled` property is set
|
|
instance.is_outline_enabled = False
|
|
|
|
# THEN: The correct value should be set
|
|
instance.outline_groupbox.setChecked.assert_called_once_with(False)
|
|
|
|
|
|
def test_get_outline_color_property(settings):
|
|
"""
|
|
Test the `outline_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.outline_color_button.color = '#fff'
|
|
|
|
# WHEN: The `outline_color` propert is accessed
|
|
result = instance.outline_color
|
|
|
|
# THEN: The value should be correct
|
|
assert result == '#fff'
|
|
|
|
|
|
def test_set_outline_color_property(settings):
|
|
"""
|
|
Test setting the `outline_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
|
|
# WHEN: The `outline_color` property is set
|
|
instance.outline_color = '#000'
|
|
|
|
# THEN: The correct value should be set
|
|
assert instance.outline_color_button.color == '#000'
|
|
|
|
|
|
def test_get_outline_size_property(settings):
|
|
"""
|
|
Test the `outline_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.outline_size_spinbox.value = MagicMock(return_value=2)
|
|
|
|
# WHEN: The `outline_size` propert is accessed
|
|
result = instance.outline_size
|
|
|
|
# THEN: The value should be correct
|
|
assert result == 2
|
|
|
|
|
|
def test_set_outline_size_property(settings):
|
|
"""
|
|
Test setting the `outline_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.outline_size_spinbox.setValue = MagicMock()
|
|
|
|
# WHEN: The `outline_size` property is set
|
|
instance.outline_size = 1
|
|
|
|
# THEN: The correct value should be set
|
|
instance.outline_size_spinbox.setValue.assert_called_once_with(1)
|
|
|
|
|
|
def test_get_is_shadow_enabled_property(settings):
|
|
"""
|
|
Test the `is_shadow_enabled` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.shadow_groupbox.isChecked = MagicMock(return_value=False)
|
|
|
|
# WHEN: The `is_shadow_enabled` propert is accessed
|
|
result = instance.is_shadow_enabled
|
|
|
|
# THEN: The value should be correct
|
|
assert result is False
|
|
|
|
|
|
def test_set_is_shadow_enabled_property(settings):
|
|
"""
|
|
Test setting the `is_shadow_enabled` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.shadow_groupbox.setChecked = MagicMock()
|
|
|
|
# WHEN: The `is_shadow_enabled` property is set
|
|
instance.is_shadow_enabled = True
|
|
|
|
# THEN: The correct value should be set
|
|
instance.shadow_groupbox.setChecked.assert_called_once_with(True)
|
|
|
|
|
|
def test_get_shadow_color_property(settings):
|
|
"""
|
|
Test the `shadow_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.shadow_color_button.color = '#000'
|
|
|
|
# WHEN: The `shadow_color` propert is accessed
|
|
result = instance.shadow_color
|
|
|
|
# THEN: The value should be correct
|
|
assert result == '#000'
|
|
|
|
|
|
def test_set_shadow_color_property(settings):
|
|
"""
|
|
Test setting the `shadow_color` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
|
|
# WHEN: The `shadow_color` property is set
|
|
instance.shadow_color = '#fff'
|
|
|
|
# THEN: The correct value should be set
|
|
instance.shadow_color_button.color == '#fff'
|
|
|
|
|
|
def test_get_shadow_size_property(settings):
|
|
"""
|
|
Test the `shadow_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.shadow_size_spinbox.value = MagicMock(return_value=5)
|
|
|
|
# WHEN: The `shadow_size` propert is accessed
|
|
result = instance.shadow_size
|
|
|
|
# THEN: The value should be correct
|
|
assert result == 5
|
|
|
|
|
|
def test_set_shadow_size_property(settings):
|
|
"""
|
|
Test setting the `shadow_size` property
|
|
"""
|
|
# GIVEN: An instance of FontSelectPage with some mocks
|
|
instance = FontSelectPage()
|
|
instance.shadow_size_spinbox.setValue = MagicMock()
|
|
|
|
# WHEN: The `shadow_size` property is set
|
|
instance.shadow_size = 10
|
|
|
|
# THEN: The correct value should be set
|
|
instance.shadow_size_spinbox.setValue.assert_called_once_with(10)
|