openlp/tests/functional/openlp_core/ui/media/test_vlcplayer.py

959 lines
41 KiB
Python
Raw Normal View History

# -*- 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/>. #
##########################################################################
"""
Package to test the openlp.core.ui.media.vlcplayer package.
"""
import os
import sys
2017-12-20 17:24:56 +00:00
from datetime import timedelta
2015-11-21 08:31:17 +00:00
from unittest import TestCase, skip
2018-10-02 04:39:42 +00:00
from unittest.mock import MagicMock, call, patch
2017-10-07 07:05:07 +00:00
from openlp.core.common.registry import Registry
2015-05-01 15:05:42 +00:00
from openlp.core.ui.media import MediaState, MediaType
2019-05-31 20:19:15 +00:00
from openlp.core.ui.media.vlcplayer import VlcPlayer, get_vlc
2015-05-01 15:05:42 +00:00
from tests.helpers import MockDateTime
from tests.helpers.testmixin import TestMixin
class TestVLCPlayer(TestCase, TestMixin):
"""
Test the functions in the :mod:`vlcplayer` module.
"""
2015-04-28 14:01:09 +00:00
def setUp(self):
"""
Common setup for all the tests
"""
if 'VLC_PLUGIN_PATH' in os.environ:
del os.environ['VLC_PLUGIN_PATH']
if 'openlp.core.ui.media.vendor.vlc' in sys.modules:
del sys.modules['openlp.core.ui.media.vendor.vlc']
2015-05-01 15:05:42 +00:00
MockDateTime.revert()
2015-11-21 08:31:17 +00:00
@skip('No way to test this')
@patch('openlp.core.ui.media.vlcplayer.vlc')
2016-05-31 21:40:13 +00:00
def test_get_vlc_fails_and_removes_module(self, mocked_vlc):
2015-11-21 08:31:17 +00:00
"""
Test that when the VLC import fails, it removes the module from sys.modules
"""
# GIVEN: We're on OS X and we don't have the VLC plugin path set
mocked_vlc.Instance.side_effect = NameError
mocked_vlc.libvlc_get_version.return_value = b'0.0.0'
# WHEN: An checking if the player is available
get_vlc()
# THEN: The extra environment variable should be there
2017-12-20 17:24:56 +00:00
assert 'openlp.core.ui.media.vendor.vlc' not in sys.modules
2015-11-21 08:31:17 +00:00
2015-05-01 15:05:42 +00:00
@patch.dict(os.environ)
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
2016-05-31 21:40:13 +00:00
def test_not_osx_fix_vlc_22_plugin_path(self, mocked_is_macosx):
2015-05-01 15:05:42 +00:00
"""
Test that on Linux or some other non-OS X we do not set the VLC plugin path
"""
# GIVEN: We're not on OS X and we don't have the VLC plugin path set
mocked_is_macosx.return_value = False
# WHEN: An checking if the player is available
get_vlc()
# THEN: The extra environment variable should NOT be there
2017-12-22 10:45:39 +00:00
assert 'VLC_PLUGIN_PATH' not in os.environ, 'The plugin path should NOT be in the environment variables'
2015-04-28 14:01:09 +00:00
2016-05-31 21:40:13 +00:00
def test_init(self):
2015-04-27 23:04:16 +00:00
"""
Test that the VLC player class initialises correctly
"""
# GIVEN: A mocked out list of extensions
# TODO: figure out how to mock out the lists of extensions
# WHEN: The VlcPlayer class is instantiated
vlc_player = VlcPlayer(None)
# THEN: The correct variables are set
2017-12-20 17:24:56 +00:00
assert 'VLC' == vlc_player.original_name
assert '&VLC' == vlc_player.display_name
assert vlc_player.parent is None
assert vlc_player.can_folder is True
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2015-11-07 00:49:40 +00:00
@patch('openlp.core.ui.media.vlcplayer.QtWidgets')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.Settings')
2016-05-31 21:40:13 +00:00
def test_setup(self, MockedSettings, MockedQtWidgets, mocked_get_vlc, mocked_is_macosx, mocked_is_win):
2015-04-28 14:01:09 +00:00
"""
Test the setup method
"""
# GIVEN: A bunch of mocked out stuff and a VlcPlayer object
mocked_is_macosx.return_value = False
mocked_is_win.return_value = False
mocked_settings = MagicMock()
2019-04-21 08:53:59 +00:00
mocked_settings.value.return_value = ''
2015-04-28 14:01:09 +00:00
MockedSettings.return_value = mocked_settings
mocked_qframe = MagicMock()
mocked_qframe.winId.return_value = 2
2015-11-07 00:49:40 +00:00
MockedQtWidgets.QFrame.NoFrame = 1
MockedQtWidgets.QFrame.return_value = mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_media_player_new = MagicMock()
mocked_instance = MagicMock()
mocked_instance.media_player_new.return_value = mocked_media_player_new
mocked_vlc = MagicMock()
mocked_vlc.Instance.return_value = mocked_instance
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_controller = MagicMock()
mocked_controller.is_live = True
mocked_output_display.size.return_value = (10, 10)
2015-04-28 14:01:09 +00:00
vlc_player = VlcPlayer(None)
# WHEN: setup() is run
2019-03-27 17:46:12 +00:00
vlc_player.setup(mocked_output_display, mocked_controller)
2015-04-28 14:01:09 +00:00
# THEN: The VLC widget should be set up correctly
2019-03-27 17:46:12 +00:00
assert mocked_output_display.vlc_widget == mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_qframe.setFrameStyle.assert_called_with(1)
2019-04-21 08:53:59 +00:00
mocked_settings.value.assert_any_call('advanced/hide mouse')
2019-05-04 19:47:06 +00:00
mocked_settings.value.assert_any_call('media/vlc arguments')
2019-04-21 08:53:59 +00:00
mocked_vlc.Instance.assert_called_with('--no-video-title-show ')
2019-03-27 17:46:12 +00:00
assert mocked_output_display.vlc_instance == mocked_instance
2015-04-28 14:01:09 +00:00
mocked_instance.media_player_new.assert_called_with()
2019-03-27 17:46:12 +00:00
assert mocked_output_display.vlc_media_player == mocked_media_player_new
mocked_output_display.size.assert_called_with()
2015-04-28 14:01:09 +00:00
mocked_qframe.resize.assert_called_with((10, 10))
mocked_qframe.raise_.assert_called_with()
mocked_qframe.hide.assert_called_with()
mocked_media_player_new.set_xwindow.assert_called_with(2)
2017-12-20 17:24:56 +00:00
assert vlc_player.has_own_widget is True
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2015-11-07 00:49:40 +00:00
@patch('openlp.core.ui.media.vlcplayer.QtWidgets')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.Settings')
2016-05-31 21:40:13 +00:00
def test_setup_has_audio(self, MockedSettings, MockedQtWidgets, mocked_get_vlc, mocked_is_macosx, mocked_is_win):
2015-04-28 14:01:09 +00:00
"""
Test the setup method when has_audio is True
"""
# GIVEN: A bunch of mocked out stuff and a VlcPlayer object
mocked_is_macosx.return_value = False
mocked_is_win.return_value = False
mocked_settings = MagicMock()
2019-04-21 08:53:59 +00:00
mocked_settings.value.return_value = ''
2015-04-28 14:01:09 +00:00
MockedSettings.return_value = mocked_settings
mocked_qframe = MagicMock()
mocked_qframe.winId.return_value = 2
2015-11-07 00:49:40 +00:00
MockedQtWidgets.QFrame.NoFrame = 1
MockedQtWidgets.QFrame.return_value = mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_media_player_new = MagicMock()
mocked_instance = MagicMock()
mocked_instance.media_player_new.return_value = mocked_media_player_new
mocked_vlc = MagicMock()
mocked_vlc.Instance.return_value = mocked_instance
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_controller = MagicMock()
mocked_controller.is_live = True
mocked_output_display.size.return_value = (10, 10)
2015-04-28 14:01:09 +00:00
vlc_player = VlcPlayer(None)
# WHEN: setup() is run
2019-03-27 17:46:12 +00:00
vlc_player.setup(mocked_output_display, mocked_controller)
2015-04-28 14:01:09 +00:00
2015-04-28 14:06:36 +00:00
# THEN: The VLC instance should be created with the correct options
2019-04-21 08:53:59 +00:00
mocked_vlc.Instance.assert_called_with('--no-video-title-show ')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2015-11-07 00:49:40 +00:00
@patch('openlp.core.ui.media.vlcplayer.QtWidgets')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.Settings')
2016-05-31 21:40:13 +00:00
def test_setup_visible_mouse(self, MockedSettings, MockedQtWidgets, mocked_get_vlc, mocked_is_macosx,
2015-11-07 00:49:40 +00:00
mocked_is_win):
2015-04-28 14:01:09 +00:00
"""
Test the setup method when Settings().value("hide mouse") is False
"""
# GIVEN: A bunch of mocked out stuff and a VlcPlayer object
mocked_is_macosx.return_value = False
mocked_is_win.return_value = False
mocked_settings = MagicMock()
2019-04-21 08:53:59 +00:00
mocked_settings.value.return_value = ''
2015-04-28 14:01:09 +00:00
MockedSettings.return_value = mocked_settings
mocked_qframe = MagicMock()
mocked_qframe.winId.return_value = 2
2015-11-07 00:49:40 +00:00
MockedQtWidgets.QFrame.NoFrame = 1
MockedQtWidgets.QFrame.return_value = mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_media_player_new = MagicMock()
mocked_instance = MagicMock()
mocked_instance.media_player_new.return_value = mocked_media_player_new
mocked_vlc = MagicMock()
mocked_vlc.Instance.return_value = mocked_instance
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_controller = MagicMock()
mocked_controller.is_live = True
mocked_output_display.size.return_value = (10, 10)
2015-04-28 14:01:09 +00:00
vlc_player = VlcPlayer(None)
# WHEN: setup() is run
2019-03-27 17:46:12 +00:00
vlc_player.setup(mocked_output_display, mocked_controller)
2015-04-28 14:01:09 +00:00
2015-04-28 14:06:36 +00:00
# THEN: The VLC instance should be created with the correct options
2019-04-21 08:53:59 +00:00
mocked_vlc.Instance.assert_called_with('--no-video-title-show ')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2015-11-07 00:49:40 +00:00
@patch('openlp.core.ui.media.vlcplayer.QtWidgets')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.Settings')
2016-05-31 21:40:13 +00:00
def test_setup_windows(self, MockedSettings, MockedQtWidgets, mocked_get_vlc, mocked_is_macosx, mocked_is_win):
2015-04-28 14:01:09 +00:00
"""
Test the setup method when running on Windows
"""
# GIVEN: A bunch of mocked out stuff and a VlcPlayer object
mocked_is_macosx.return_value = False
mocked_is_win.return_value = True
mocked_settings = MagicMock()
mocked_settings.value.return_value = False
MockedSettings.return_value = mocked_settings
mocked_qframe = MagicMock()
mocked_qframe.winId.return_value = 2
2015-11-07 00:49:40 +00:00
MockedQtWidgets.QFrame.NoFrame = 1
MockedQtWidgets.QFrame.return_value = mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_media_player_new = MagicMock()
mocked_instance = MagicMock()
mocked_instance.media_player_new.return_value = mocked_media_player_new
mocked_vlc = MagicMock()
mocked_vlc.Instance.return_value = mocked_instance
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_controller = MagicMock()
mocked_controller.is_live = True
mocked_output_display.size.return_value = (10, 10)
2015-04-28 14:01:09 +00:00
vlc_player = VlcPlayer(None)
# WHEN: setup() is run
2019-03-27 17:46:12 +00:00
vlc_player.setup(mocked_output_display, mocked_controller)
2015-04-28 14:01:09 +00:00
2015-04-28 14:06:36 +00:00
# THEN: set_hwnd should be called
2015-04-28 14:01:09 +00:00
mocked_media_player_new.set_hwnd.assert_called_with(2)
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2015-11-07 00:49:40 +00:00
@patch('openlp.core.ui.media.vlcplayer.QtWidgets')
2015-04-28 14:01:09 +00:00
@patch('openlp.core.ui.media.vlcplayer.Settings')
2016-05-31 21:40:13 +00:00
def test_setup_osx(self, MockedSettings, MockedQtWidgets, mocked_get_vlc, mocked_is_macosx, mocked_is_win):
2015-04-28 14:01:09 +00:00
"""
Test the setup method when running on OS X
"""
# GIVEN: A bunch of mocked out stuff and a VlcPlayer object
mocked_is_macosx.return_value = True
mocked_is_win.return_value = False
mocked_settings = MagicMock()
mocked_settings.value.return_value = False
MockedSettings.return_value = mocked_settings
mocked_qframe = MagicMock()
mocked_qframe.winId.return_value = 2
2015-11-07 00:49:40 +00:00
MockedQtWidgets.QFrame.NoFrame = 1
MockedQtWidgets.QFrame.return_value = mocked_qframe
2015-04-28 14:01:09 +00:00
mocked_media_player_new = MagicMock()
mocked_instance = MagicMock()
mocked_instance.media_player_new.return_value = mocked_media_player_new
mocked_vlc = MagicMock()
mocked_vlc.Instance.return_value = mocked_instance
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_controller = MagicMock()
mocked_controller.is_live = True
mocked_output_display.size.return_value = (10, 10)
2015-04-28 14:01:09 +00:00
vlc_player = VlcPlayer(None)
# WHEN: setup() is run
2019-03-27 17:46:12 +00:00
vlc_player.setup(mocked_output_display, mocked_controller)
2015-04-28 14:01:09 +00:00
2015-04-28 14:06:36 +00:00
# THEN: set_nsobject should be called
2015-04-28 14:01:09 +00:00
mocked_media_player_new.set_nsobject.assert_called_with(2)
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_check_available(self, mocked_get_vlc):
"""
Check that when the "vlc" module is available, then VLC is set as available
"""
# GIVEN: A mocked out get_vlc() method and a VlcPlayer instance
mocked_get_vlc.return_value = MagicMock()
vlc_player = VlcPlayer(None)
# WHEN: vlc
is_available = vlc_player.check_available()
# THEN: VLC should be available
2017-12-20 17:24:56 +00:00
assert is_available is True
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_check_not_available(self, mocked_get_vlc):
"""
Check that when the "vlc" module is not available, then VLC is set as unavailable
"""
# GIVEN: A mocked out get_vlc() method and a VlcPlayer instance
mocked_get_vlc.return_value = None
vlc_player = VlcPlayer(None)
# WHEN: vlc
is_available = vlc_player.check_available()
# THEN: VLC should NOT be available
2017-12-20 17:24:56 +00:00
assert is_available is False
2015-05-01 20:00:52 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.os.path.normcase')
2016-05-31 21:40:13 +00:00
def test_load(self, mocked_normcase, mocked_get_vlc):
2015-05-01 20:00:52 +00:00
"""
Test loading a video into VLC
"""
# GIVEN: A mocked out get_vlc() method
media_path = '/path/to/media.mp4'
mocked_normcase.side_effect = lambda x: x
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_display = MagicMock()
mocked_display.media_info.volume = 100
mocked_display.media_info.media_type = MediaType.Video
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
2015-05-01 20:00:52 +00:00
mocked_vlc_media = MagicMock()
mocked_media = MagicMock()
mocked_media.get_duration.return_value = 10000
mocked_display.vlc_instance.media_new_path.return_value = mocked_vlc_media
mocked_display.vlc_media_player.get_media.return_value = mocked_media
vlc_player = VlcPlayer(None)
# WHEN: A video is loaded into VLC
with patch.object(vlc_player, 'volume') as mocked_volume:
2018-12-13 19:29:13 +00:00
result = vlc_player.load(mocked_display, media_path)
2015-05-01 20:00:52 +00:00
# THEN: The video should be loaded
mocked_normcase.assert_called_with(media_path)
mocked_display.vlc_instance.media_new_path.assert_called_with(media_path)
2017-12-20 17:24:56 +00:00
assert mocked_vlc_media == mocked_display.vlc_media
2015-05-01 20:00:52 +00:00
mocked_display.vlc_media_player.set_media.assert_called_with(mocked_vlc_media)
mocked_vlc_media.parse.assert_called_with()
2019-03-27 18:59:03 +00:00
mocked_volume.assert_called_with(mocked_display, 100)
2017-12-20 17:24:56 +00:00
assert result is True
2015-05-01 20:00:52 +00:00
2015-05-07 21:53:19 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
2015-05-01 20:00:52 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.os.path.normcase')
2016-05-31 21:40:13 +00:00
def test_load_audio_cd(self, mocked_normcase, mocked_get_vlc, mocked_is_win):
2015-05-01 20:00:52 +00:00
"""
Test loading an audio CD into VLC
"""
# GIVEN: A mocked out get_vlc() method
2015-05-07 21:53:19 +00:00
mocked_is_win.return_value = False
2015-05-01 20:00:52 +00:00
media_path = '/dev/sr0'
mocked_normcase.side_effect = lambda x: x
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_display = MagicMock()
mocked_display.media_info.volume = 100
mocked_display.media_info.media_type = MediaType.CD
mocked_display.media_info.title_track = 1
2015-05-01 20:00:52 +00:00
mocked_vlc_media = MagicMock()
mocked_media = MagicMock()
mocked_media.get_duration.return_value = 10000
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
mocked_display.vlc_media_player.get_media.return_value = mocked_media
mocked_subitems = MagicMock()
mocked_subitems.count.return_value = 1
mocked_subitems.item_at_index.return_value = mocked_vlc_media
2015-05-02 20:36:07 +00:00
mocked_vlc_media.subitems.return_value = mocked_subitems
2015-05-01 20:00:52 +00:00
vlc_player = VlcPlayer(None)
2015-05-02 20:36:07 +00:00
# WHEN: An audio CD is loaded into VLC
with patch.object(vlc_player, 'volume') as mocked_volume, \
2018-10-27 01:40:20 +00:00
patch.object(vlc_player, 'media_state_wait'):
2018-12-13 19:29:13 +00:00
result = vlc_player.load(mocked_display, media_path)
2015-05-01 20:00:52 +00:00
# THEN: The video should be loaded
mocked_normcase.assert_called_with(media_path)
2015-05-02 20:36:07 +00:00
mocked_display.vlc_instance.media_new_location.assert_called_with('cdda://' + media_path)
2017-12-20 17:24:56 +00:00
assert mocked_vlc_media == mocked_display.vlc_media
2015-05-02 20:36:07 +00:00
mocked_display.vlc_media_player.set_media.assert_called_with(mocked_vlc_media)
mocked_vlc_media.parse.assert_called_with()
mocked_volume.assert_called_with(mocked_display, 100)
2017-12-20 17:24:56 +00:00
assert result is True
2015-05-02 20:36:07 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.os.path.normcase')
2016-05-31 21:40:13 +00:00
def test_load_audio_cd_on_windows(self, mocked_normcase, mocked_get_vlc, mocked_is_win):
2015-05-02 20:36:07 +00:00
"""
Test loading an audio CD into VLC on Windows
"""
# GIVEN: A mocked out get_vlc() method
mocked_is_win.return_value = True
media_path = '/dev/sr0'
mocked_normcase.side_effect = lambda x: x
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_display = MagicMock()
mocked_display.media_info.volume = 100
mocked_display.media_info.media_type = MediaType.CD
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
mocked_display.media_info.title_track = 1
2015-05-02 20:36:07 +00:00
mocked_vlc_media = MagicMock()
mocked_media = MagicMock()
mocked_media.get_duration.return_value = 10000
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
mocked_display.vlc_media_player.get_media.return_value = mocked_media
mocked_subitems = MagicMock()
mocked_subitems.count.return_value = 1
mocked_subitems.item_at_index.return_value = mocked_vlc_media
mocked_vlc_media.subitems.return_value = mocked_subitems
vlc_player = VlcPlayer(None)
# WHEN: An audio CD is loaded into VLC
with patch.object(vlc_player, 'volume') as mocked_volume, \
2018-10-27 01:40:20 +00:00
patch.object(vlc_player, 'media_state_wait'):
2018-12-13 19:29:13 +00:00
result = vlc_player.load(mocked_display, media_path)
2015-05-02 20:36:07 +00:00
# THEN: The video should be loaded
mocked_normcase.assert_called_with(media_path)
mocked_display.vlc_instance.media_new_location.assert_called_with('cdda:///' + media_path)
2017-12-20 17:24:56 +00:00
assert mocked_vlc_media == mocked_display.vlc_media
2015-05-01 20:00:52 +00:00
mocked_display.vlc_media_player.set_media.assert_called_with(mocked_vlc_media)
mocked_vlc_media.parse.assert_called_with()
mocked_volume.assert_called_with(mocked_display, 100)
2017-12-20 17:24:56 +00:00
assert result is True
2015-05-02 20:36:07 +00:00
2015-05-07 21:53:19 +00:00
@patch('openlp.core.ui.media.vlcplayer.is_win')
2015-05-02 20:36:07 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.os.path.normcase')
2016-05-31 21:40:13 +00:00
def test_load_audio_cd_no_tracks(self, mocked_normcase, mocked_get_vlc, mocked_is_win):
2015-05-02 20:36:07 +00:00
"""
Test loading an audio CD that has no tracks into VLC
"""
# GIVEN: A mocked out get_vlc() method
2015-05-07 21:53:19 +00:00
mocked_is_win.return_value = False
2015-05-02 20:36:07 +00:00
media_path = '/dev/sr0'
mocked_normcase.side_effect = lambda x: x
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_display = MagicMock()
mocked_display.media_info.volume = 100
mocked_display.media_info.media_type = MediaType.CD
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
mocked_display.media_info.title_track = 1
2015-05-02 20:36:07 +00:00
mocked_vlc_media = MagicMock()
mocked_media = MagicMock()
mocked_media.get_duration.return_value = 10000
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
mocked_display.vlc_media_player.get_media.return_value = mocked_media
mocked_subitems = MagicMock()
mocked_subitems.count.return_value = 0
mocked_subitems.item_at_index.return_value = mocked_vlc_media
mocked_vlc_media.subitems.return_value = mocked_subitems
vlc_player = VlcPlayer(None)
# WHEN: An audio CD is loaded into VLC
2018-10-27 01:40:20 +00:00
with patch.object(vlc_player, 'volume'), patch.object(vlc_player, 'media_state_wait'):
2018-12-13 19:29:13 +00:00
result = vlc_player.load(mocked_display, media_path)
2015-05-02 20:36:07 +00:00
# THEN: The video should be loaded
mocked_normcase.assert_called_with(media_path)
mocked_display.vlc_instance.media_new_location.assert_called_with('cdda://' + media_path)
2017-12-20 17:24:56 +00:00
assert mocked_vlc_media == mocked_display.vlc_media
assert 0 == mocked_subitems.item_at_index.call_count
2015-05-02 20:36:07 +00:00
mocked_display.vlc_media_player.set_media.assert_called_with(mocked_vlc_media)
2017-12-20 17:24:56 +00:00
assert 0 == mocked_vlc_media.parse.call_count
assert result is False
2015-05-01 20:00:52 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.datetime', MockDateTime)
2016-05-31 21:40:13 +00:00
def test_media_state_wait(self, mocked_get_vlc):
"""
Check that waiting for a state change works
"""
# GIVEN: A mocked out get_vlc method
mocked_vlc = MagicMock()
mocked_vlc.State.Error = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 2
Registry.create()
mocked_application = MagicMock()
Registry().register('application', mocked_application)
vlc_player = VlcPlayer(None)
# WHEN: media_state_wait() is called
result = vlc_player.media_state_wait(mocked_display, 2)
# THEN: The results should be True
2017-12-20 17:24:56 +00:00
assert result is True
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.datetime', MockDateTime)
2016-05-31 21:40:13 +00:00
def test_media_state_wait_error(self, mocked_get_vlc):
"""
Check that getting an error when waiting for a state change returns False
"""
# GIVEN: A mocked out get_vlc method
mocked_vlc = MagicMock()
mocked_vlc.State.Error = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 1
Registry.create()
mocked_application = MagicMock()
Registry().register('application', mocked_application)
vlc_player = VlcPlayer(None)
# WHEN: media_state_wait() is called
result = vlc_player.media_state_wait(mocked_display, 2)
# THEN: The results should be True
2017-12-20 17:24:56 +00:00
assert result is False
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
@patch('openlp.core.ui.media.vlcplayer.datetime', MockDateTime)
2016-05-31 21:40:13 +00:00
def test_media_state_wait_times_out(self, mocked_get_vlc):
"""
Check that waiting for a state returns False when it times out after 60 seconds
"""
# GIVEN: A mocked out get_vlc method
2015-05-01 15:05:42 +00:00
timeout = MockDateTime.return_values[0] + timedelta(seconds=61)
MockDateTime.return_values.append(timeout)
mocked_vlc = MagicMock()
mocked_vlc.State.Error = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 2
Registry.create()
mocked_application = MagicMock()
Registry().register('application', mocked_application)
vlc_player = VlcPlayer(None)
# WHEN: media_state_wait() is called
result = vlc_player.media_state_wait(mocked_display, 3)
# THEN: The results should be True
2017-12-20 17:24:56 +00:00
assert result is False
2016-05-31 21:40:13 +00:00
def test_resize(self):
"""
Test resizing the player
"""
# GIVEN: A display object and a VlcPlayer instance
mocked_display = MagicMock()
mocked_display.size.return_value = (10, 10)
vlc_player = VlcPlayer(None)
# WHEN: resize is called
vlc_player.resize(mocked_display)
# THEN: The right methods should have been called
mocked_display.size.assert_called_with()
mocked_display.vlc_widget.resize.assert_called_with((10, 10))
2015-05-02 22:17:33 +00:00
@patch('openlp.core.ui.media.vlcplayer.threading')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_play(self, mocked_get_vlc, mocked_threading):
2015-05-02 22:17:33 +00:00
"""
Test the play() method
"""
# GIVEN: A bunch of mocked out things
mocked_thread = MagicMock()
mocked_threading.Thread.return_value = mocked_thread
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
2019-03-27 17:46:12 +00:00
mocked_display = MagicMock()
mocked_media = MagicMock()
mocked_media.get_duration.return_value = 50000
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_output_display.media_info.start_time = 0
mocked_output_display.media_info.media_type = MediaType.Video
mocked_output_display.media_info.volume = 100
mocked_output_display.vlc_media_player.get_media.return_value = mocked_media
2015-05-02 22:17:33 +00:00
vlc_player = VlcPlayer(None)
2019-03-27 17:46:12 +00:00
vlc_player.set_state(MediaState.Paused, mocked_output_display)
2015-05-02 22:17:33 +00:00
# WHEN: play() is called
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait, \
patch.object(vlc_player, 'volume') as mocked_volume:
mocked_media_state_wait.return_value = True
2019-03-27 17:46:12 +00:00
result = vlc_player.play(mocked_display, mocked_output_display)
2015-05-02 22:17:33 +00:00
# THEN: A bunch of things should happen to play the media
mocked_thread.start.assert_called_with()
2019-03-27 17:46:12 +00:00
mocked_volume.assert_called_with(mocked_output_display, 100)
2017-12-20 17:24:56 +00:00
assert MediaState.Playing == vlc_player.get_live_state()
2019-03-27 17:46:12 +00:00
mocked_output_display.vlc_widget.raise_.assert_called_with()
2017-12-20 17:24:56 +00:00
assert result is True, 'The value returned from play() should be True'
2015-05-07 16:44:55 +00:00
@patch('openlp.core.ui.media.vlcplayer.threading')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_play_media_wait_state_not_playing(self, mocked_get_vlc, mocked_threading):
2015-05-07 16:44:55 +00:00
"""
Test the play() method when media_wait_state() returns False
"""
# GIVEN: A bunch of mocked out things
mocked_thread = MagicMock()
mocked_threading.Thread.return_value = mocked_thread
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
mocked_controller = MagicMock()
mocked_controller.media_info.start_time = 0
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
2015-05-07 16:44:55 +00:00
vlc_player = VlcPlayer(None)
2019-03-27 17:46:12 +00:00
vlc_player.set_state(MediaState.Paused, mocked_output_display)
2015-05-07 16:44:55 +00:00
# WHEN: play() is called
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait, \
2018-10-27 01:40:20 +00:00
patch.object(vlc_player, 'volume'):
2015-05-07 16:44:55 +00:00
mocked_media_state_wait.return_value = False
2019-03-27 17:46:12 +00:00
result = vlc_player.play(mocked_controller, mocked_output_display)
2015-05-07 16:44:55 +00:00
# THEN: A thread should be started, but the method should return False
mocked_thread.start.assert_called_with()
2017-12-20 17:24:56 +00:00
assert result is False
2015-05-07 16:44:55 +00:00
@patch('openlp.core.ui.media.vlcplayer.threading')
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_play_dvd(self, mocked_get_vlc, mocked_threading):
2015-05-07 16:44:55 +00:00
"""
Test the play() method with a DVD
"""
# GIVEN: A bunch of mocked out things
mocked_thread = MagicMock()
mocked_threading.Thread.return_value = mocked_thread
mocked_vlc = MagicMock()
mocked_get_vlc.return_value = mocked_vlc
mocked_controller = MagicMock()
2019-03-27 17:46:12 +00:00
mocked_output_display = MagicMock()
mocked_output_display.media_info.start_time = 0
mocked_output_display.media_info.end_time = 50
mocked_output_display.media_info.media_type = MediaType.DVD
mocked_output_display.media_info.volume = 100
mocked_output_display.media_info.title_track = 1
mocked_output_display.media_info.audio_track = 1
mocked_output_display.media_info.subtitle_track = 1
2015-05-07 16:44:55 +00:00
vlc_player = VlcPlayer(None)
2019-03-27 17:46:12 +00:00
vlc_player.set_state(MediaState.Paused, mocked_output_display)
2015-05-07 16:44:55 +00:00
# WHEN: play() is called
2018-10-27 01:40:20 +00:00
with patch.object(vlc_player, 'media_state_wait', return_value=True), \
2017-12-04 20:32:02 +00:00
patch.object(vlc_player, 'volume') as mocked_volume, \
patch.object(vlc_player, 'get_live_state', return_value=MediaState.Loaded):
2019-03-27 17:46:12 +00:00
result = vlc_player.play(mocked_controller, mocked_output_display)
2015-05-07 16:44:55 +00:00
# THEN: A bunch of things should happen to play the media
mocked_thread.start.assert_called_with()
2019-03-27 17:46:12 +00:00
mocked_output_display.vlc_media_player.set_title.assert_called_with(1)
mocked_output_display.vlc_media_player.play.assert_called_with()
mocked_output_display.vlc_media_player.audio_set_track.assert_called_with(1)
mocked_output_display.vlc_media_player.video_set_spu.assert_called_with(1)
mocked_volume.assert_called_with(mocked_output_display, 100)
2017-12-20 17:24:56 +00:00
assert MediaState.Playing == vlc_player.get_live_state()
2019-03-27 17:46:12 +00:00
mocked_output_display.vlc_widget.raise_.assert_called_with()
2017-12-20 17:24:56 +00:00
assert result is True, 'The value returned from play() should be True'
2015-05-02 22:17:33 +00:00
2015-05-01 13:05:38 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_pause(self, mocked_get_vlc):
2015-05-01 13:05:38 +00:00
"""
Test that the pause method works correctly
"""
# GIVEN: A mocked out get_vlc method
mocked_vlc = MagicMock()
mocked_vlc.State.Playing = 1
mocked_vlc.State.Paused = 2
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 1
vlc_player = VlcPlayer(None)
# WHEN: The media is paused
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait:
mocked_media_state_wait.return_value = True
vlc_player.pause(mocked_display)
# THEN: The pause method should exit early
mocked_display.vlc_media.get_state.assert_called_with()
mocked_display.vlc_media_player.pause.assert_called_with()
mocked_media_state_wait.assert_called_with(mocked_display, 2)
2017-12-20 17:24:56 +00:00
assert MediaState.Paused == vlc_player.get_live_state()
2015-05-01 13:05:38 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_pause_not_playing(self, mocked_get_vlc):
2015-05-01 13:05:38 +00:00
"""
Test the pause method when the player is not playing
"""
# GIVEN: A mocked out get_vlc method
mocked_vlc = MagicMock()
mocked_vlc.State.Playing = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 2
vlc_player = VlcPlayer(None)
# WHEN: The media is paused
vlc_player.pause(mocked_display)
# THEN: The pause method should exit early
mocked_display.vlc_media.get_state.assert_called_with()
2017-12-20 17:24:56 +00:00
assert 0 == mocked_display.vlc_media_player.pause.call_count
2015-05-01 13:05:38 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_pause_fail(self, mocked_get_vlc):
2015-05-01 13:05:38 +00:00
"""
Test the pause method when the player fails to pause the media
"""
# GIVEN: A mocked out get_vlc method
mocked_vlc = MagicMock()
mocked_vlc.State.Playing = 1
mocked_vlc.State.Paused = 2
mocked_get_vlc.return_value = mocked_vlc
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 1
vlc_player = VlcPlayer(None)
# WHEN: The media is paused
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait:
mocked_media_state_wait.return_value = False
vlc_player.pause(mocked_display)
# THEN: The pause method should exit early
mocked_display.vlc_media.get_state.assert_called_with()
mocked_display.vlc_media_player.pause.assert_called_with()
mocked_media_state_wait.assert_called_with(mocked_display, 2)
2017-12-20 17:24:56 +00:00
assert MediaState.Paused is not vlc_player.state
2015-05-01 13:05:38 +00:00
@patch('openlp.core.ui.media.vlcplayer.threading')
2016-05-31 21:40:13 +00:00
def test_stop(self, mocked_threading):
"""
Test stopping the current item
"""
# GIVEN: A display object and a VlcPlayer instance and some mocked threads
mocked_thread = MagicMock()
mocked_threading.Thread.return_value = mocked_thread
mocked_stop = MagicMock()
mocked_display = MagicMock()
mocked_display.vlc_media_player.stop = mocked_stop
vlc_player = VlcPlayer(None)
# WHEN: stop is called
vlc_player.stop(mocked_display)
# THEN: A thread should have been started to stop VLC
mocked_threading.Thread.assert_called_with(target=mocked_stop)
mocked_thread.start.assert_called_with()
2017-12-20 17:24:56 +00:00
assert MediaState.Stopped == vlc_player.get_live_state()
2016-05-31 21:40:13 +00:00
def test_volume(self):
"""
Test setting the volume
"""
# GIVEN: A display object and a VlcPlayer instance
mocked_display = MagicMock()
mocked_display.has_audio = True
vlc_player = VlcPlayer(None)
# WHEN: The volume is set
vlc_player.volume(mocked_display, 10)
# THEN: The volume should have been set
mocked_display.vlc_media_player.audio_set_volume.assert_called_with(10)
2016-05-31 21:40:13 +00:00
def test_volume_no_audio(self):
"""
Test setting the volume when there's no audio
"""
# GIVEN: A display object and a VlcPlayer instance
mocked_display = MagicMock()
mocked_display.has_audio = False
vlc_player = VlcPlayer(None)
# WHEN: The volume is set
vlc_player.volume(mocked_display, 10)
# THEN: The volume should NOT have been set
2017-12-20 17:24:56 +00:00
assert 0 == mocked_display.vlc_media_player.audio_set_volume.call_count
2016-05-31 21:40:13 +00:00
def test_seek_unseekable_media(self):
2015-05-01 15:05:42 +00:00
"""
Test seeking something that can't be seeked
"""
# GIVEN: Unseekable media
mocked_display = MagicMock()
mocked_display.controller.media_info.media_type = MediaType.Audio
mocked_display.vlc_media_player.is_seekable.return_value = False
vlc_player = VlcPlayer(None)
2015-05-01 15:05:42 +00:00
# WHEN: seek() is called
vlc_player.seek(mocked_display, 100)
2015-05-01 15:05:42 +00:00
# THEN: nothing should happen
mocked_display.vlc_media_player.is_seekable.assert_called_with()
2017-12-20 17:24:56 +00:00
assert 0 == mocked_display.vlc_media_player.set_time.call_count
2016-05-31 21:40:13 +00:00
def test_seek_seekable_media(self):
"""
2015-05-01 15:05:42 +00:00
Test seeking something that is seekable, but not a DVD
"""
2015-05-01 15:05:42 +00:00
# GIVEN: Unseekable media
mocked_display = MagicMock()
mocked_display.controller.media_info.media_type = MediaType.Audio
mocked_display.vlc_media_player.is_seekable.return_value = True
vlc_player = VlcPlayer(None)
2015-05-01 15:05:42 +00:00
# WHEN: seek() is called
vlc_player.seek(mocked_display, 100)
2015-05-01 15:05:42 +00:00
# THEN: nothing should happen
mocked_display.vlc_media_player.is_seekable.assert_called_with()
mocked_display.vlc_media_player.set_time.assert_called_with(100)
2016-05-31 21:40:13 +00:00
def test_seek_dvd(self):
2015-05-01 15:05:42 +00:00
"""
Test seeking a DVD
"""
# GIVEN: Unseekable media
mocked_display = MagicMock()
mocked_display.controller.media_info.media_type = MediaType.DVD
mocked_display.vlc_media_player.is_seekable.return_value = True
2017-12-04 20:32:02 +00:00
mocked_display.controller.media_info.start_time = 3000
2015-05-01 15:05:42 +00:00
vlc_player = VlcPlayer(None)
# WHEN: seek() is called
vlc_player.seek(mocked_display, 2000)
2015-04-27 23:04:16 +00:00
2015-05-01 15:05:42 +00:00
# THEN: nothing should happen
mocked_display.vlc_media_player.is_seekable.assert_called_with()
2019-04-21 08:53:59 +00:00
mocked_display.vlc_media_player.set_time.assert_called_with(2000)
2015-05-01 15:09:32 +00:00
2016-05-31 21:40:13 +00:00
def test_reset(self):
2015-05-01 15:09:32 +00:00
"""
Test the reset() method
"""
# GIVEN: Some mocked out stuff
mocked_display = MagicMock()
vlc_player = VlcPlayer(None)
# WHEN: reset() is called
vlc_player.reset(mocked_display)
2016-02-27 14:03:52 +00:00
# THEN: The media should be stopped and invisible
2015-05-01 15:09:32 +00:00
mocked_display.vlc_media_player.stop.assert_called_with()
mocked_display.vlc_widget.setVisible.assert_called_with(False)
2017-12-20 17:24:56 +00:00
assert MediaState.Off == vlc_player.get_live_state()
2015-05-01 15:15:14 +00:00
2016-05-31 21:40:13 +00:00
def test_set_visible_has_own_widget(self):
2015-05-01 15:15:14 +00:00
"""
Test the set_visible() method when the player has its own widget
"""
# GIVEN: Some mocked out stuff
mocked_display = MagicMock()
vlc_player = VlcPlayer(None)
vlc_player.has_own_widget = True
# WHEN: reset() is called
vlc_player.set_visible(mocked_display, True)
# THEN: The media should be stopped and invsibile
mocked_display.vlc_widget.setVisible.assert_called_with(True)
2016-05-31 21:40:13 +00:00
def test_set_visible_no_widget(self):
2015-05-01 15:15:14 +00:00
"""
Test the set_visible() method when the player doesn't have a widget
"""
# GIVEN: Some mocked out stuff
mocked_display = MagicMock()
vlc_player = VlcPlayer(None)
vlc_player.has_own_widget = False
# WHEN: reset() is called
vlc_player.set_visible(mocked_display, True)
# THEN: The media should be stopped and invsibile
2017-12-20 17:24:56 +00:00
assert 0 == mocked_display.vlc_widget.setVisible.call_count
2015-05-01 15:56:16 +00:00
2015-05-02 21:15:50 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_update_ui(self, mocked_get_vlc):
2015-05-02 21:15:50 +00:00
"""
Test updating the UI
"""
# GIVEN: A whole bunch of mocks
mocked_vlc = MagicMock()
mocked_vlc.State.Ended = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_controller = MagicMock()
mocked_controller.media_info.end_time = 300
mocked_controller.seek_slider.isSliderDown.return_value = False
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 1
mocked_display.vlc_media_player.get_time.return_value = 400000
vlc_player = VlcPlayer(None)
# WHEN: update_ui() is called
with patch.object(vlc_player, 'stop') as mocked_stop, \
patch.object(vlc_player, 'set_visible') as mocked_set_visible:
2019-03-27 17:46:12 +00:00
vlc_player.update_ui(mocked_controller, mocked_display)
2015-05-02 21:15:50 +00:00
# THEN: Certain methods should be called
mocked_stop.assert_called_with(mocked_display)
2017-12-22 10:45:39 +00:00
assert 2 == mocked_stop.call_count
2015-05-02 21:15:50 +00:00
mocked_display.vlc_media_player.get_time.assert_called_with()
mocked_set_visible.assert_called_with(mocked_display, False)
mocked_controller.seek_slider.setSliderPosition.assert_called_with(400000)
expected_calls = [call(True), call(False)]
2017-12-20 17:24:56 +00:00
assert expected_calls == mocked_controller.seek_slider.blockSignals.call_args_list
2015-05-02 21:15:50 +00:00
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
2016-05-31 21:40:13 +00:00
def test_update_ui_dvd(self, mocked_get_vlc):
2015-05-02 21:15:50 +00:00
"""
Test updating the UI for a CD or DVD
"""
# GIVEN: A whole bunch of mocks
mocked_vlc = MagicMock()
mocked_vlc.State.Ended = 1
mocked_get_vlc.return_value = mocked_vlc
mocked_controller = MagicMock()
mocked_controller.media_info.start_time = 100
mocked_controller.media_info.end_time = 300
mocked_controller.seek_slider.isSliderDown.return_value = False
mocked_display = MagicMock()
mocked_display.vlc_media.get_state.return_value = 1
2019-03-27 17:46:12 +00:00
mocked_display.vlc_media_player.get_time.return_value = 300
2015-05-02 21:15:50 +00:00
mocked_display.controller.media_info.media_type = MediaType.DVD
vlc_player = VlcPlayer(None)
# WHEN: update_ui() is called
2019-03-27 18:59:03 +00:00
with patch.object(vlc_player, 'stop') as mocked_stop:
2019-03-27 17:46:12 +00:00
vlc_player.update_ui(mocked_controller, mocked_display)
2015-05-02 21:15:50 +00:00
# THEN: Certain methods should be called
mocked_stop.assert_called_with(mocked_display)
2019-03-27 17:46:12 +00:00
assert 1 == mocked_stop.call_count
2015-05-02 21:15:50 +00:00
mocked_display.vlc_media_player.get_time.assert_called_with()
2017-12-04 20:32:02 +00:00
mocked_controller.seek_slider.setSliderPosition.assert_called_with(300)
2015-05-02 21:15:50 +00:00
expected_calls = [call(True), call(False)]
2017-12-20 17:24:56 +00:00
assert expected_calls == mocked_controller.seek_slider.blockSignals.call_args_list