4
4
###############################################################################
5
5
# OpenLP - Open Source Lyrics Projection #
6
6
# --------------------------------------------------------------------------- #
7
# Copyright (c) 2008-2018 OpenLP Developers #
7
# Copyright (c) 2008-2019 OpenLP Developers #
8
8
# --------------------------------------------------------------------------- #
9
9
# This program is free software; you can redistribute it and/or modify it #
10
10
# under the terms of the GNU General Public License as published by the Free #
27
27
from datetime import timedelta
28
28
from unittest import TestCase, skip
29
from unittest.mock import MagicMock, patch, call
29
from unittest.mock import MagicMock, call, patch
31
31
from openlp.core.common.registry import Registry
32
32
from openlp.core.ui.media import MediaState, MediaType
138
138
mocked_vlc = MagicMock()
139
139
mocked_vlc.Instance.return_value = mocked_instance
140
140
mocked_get_vlc.return_value = mocked_vlc
141
mocked_display = MagicMock()
142
mocked_display.has_audio = False
143
mocked_display.controller.is_live = True
144
mocked_display.size.return_value = (10, 10)
141
mocked_output_display = MagicMock()
142
mocked_controller = MagicMock()
143
mocked_controller.is_live = True
144
mocked_output_display.size.return_value = (10, 10)
145
145
vlc_player = VlcPlayer(None)
147
147
# WHEN: setup() is run
148
vlc_player.setup(mocked_display)
148
vlc_player.setup(mocked_output_display, mocked_controller)
150
150
# THEN: The VLC widget should be set up correctly
151
assert mocked_display.vlc_widget == mocked_qframe
151
assert mocked_output_display.vlc_widget == mocked_qframe
152
152
mocked_qframe.setFrameStyle.assert_called_with(1)
153
153
mocked_settings.value.assert_called_with('advanced/hide mouse')
154
mocked_vlc.Instance.assert_called_with('--no-video-title-show --no-audio --no-video-title-show '
155
'--mouse-hide-timeout=0')
156
assert mocked_display.vlc_instance == mocked_instance
154
mocked_vlc.Instance.assert_called_with('--no-video-title-show --mouse-hide-timeout=0')
155
assert mocked_output_display.vlc_instance == mocked_instance
157
156
mocked_instance.media_player_new.assert_called_with()
158
assert mocked_display.vlc_media_player == mocked_media_player_new
159
mocked_display.size.assert_called_with()
157
assert mocked_output_display.vlc_media_player == mocked_media_player_new
158
mocked_output_display.size.assert_called_with()
160
159
mocked_qframe.resize.assert_called_with((10, 10))
161
160
mocked_qframe.raise_.assert_called_with()
162
161
mocked_qframe.hide.assert_called_with()
188
187
mocked_vlc = MagicMock()
189
188
mocked_vlc.Instance.return_value = mocked_instance
190
189
mocked_get_vlc.return_value = mocked_vlc
191
mocked_display = MagicMock()
192
mocked_display.has_audio = True
193
mocked_display.controller.is_live = True
194
mocked_display.size.return_value = (10, 10)
190
mocked_output_display = MagicMock()
191
mocked_controller = MagicMock()
192
mocked_controller.is_live = True
193
mocked_output_display.size.return_value = (10, 10)
195
194
vlc_player = VlcPlayer(None)
197
196
# WHEN: setup() is run
198
vlc_player.setup(mocked_display)
197
vlc_player.setup(mocked_output_display, mocked_controller)
200
199
# THEN: The VLC instance should be created with the correct options
201
200
mocked_vlc.Instance.assert_called_with('--no-video-title-show --mouse-hide-timeout=0')
226
225
mocked_vlc = MagicMock()
227
226
mocked_vlc.Instance.return_value = mocked_instance
228
227
mocked_get_vlc.return_value = mocked_vlc
229
mocked_display = MagicMock()
230
mocked_display.has_audio = False
231
mocked_display.controller.is_live = True
232
mocked_display.size.return_value = (10, 10)
228
mocked_output_display = MagicMock()
229
mocked_controller = MagicMock()
230
mocked_controller.is_live = True
231
mocked_output_display.size.return_value = (10, 10)
233
232
vlc_player = VlcPlayer(None)
235
234
# WHEN: setup() is run
236
vlc_player.setup(mocked_display)
235
vlc_player.setup(mocked_output_display, mocked_controller)
238
237
# THEN: The VLC instance should be created with the correct options
239
mocked_vlc.Instance.assert_called_with('--no-video-title-show --no-audio --no-video-title-show')
238
mocked_vlc.Instance.assert_called_with('--no-video-title-show')
241
240
@patch('openlp.core.ui.media.vlcplayer.is_win')
242
241
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
263
262
mocked_vlc = MagicMock()
264
263
mocked_vlc.Instance.return_value = mocked_instance
265
264
mocked_get_vlc.return_value = mocked_vlc
266
mocked_display = MagicMock()
267
mocked_display.has_audio = False
268
mocked_display.controller.is_live = True
269
mocked_display.size.return_value = (10, 10)
265
mocked_output_display = MagicMock()
266
mocked_controller = MagicMock()
267
mocked_controller.is_live = True
268
mocked_output_display.size.return_value = (10, 10)
270
269
vlc_player = VlcPlayer(None)
272
271
# WHEN: setup() is run
273
vlc_player.setup(mocked_display)
272
vlc_player.setup(mocked_output_display, mocked_controller)
275
274
# THEN: set_hwnd should be called
276
275
mocked_media_player_new.set_hwnd.assert_called_with(2)
300
299
mocked_vlc = MagicMock()
301
300
mocked_vlc.Instance.return_value = mocked_instance
302
301
mocked_get_vlc.return_value = mocked_vlc
303
mocked_display = MagicMock()
304
mocked_display.has_audio = False
305
mocked_display.controller.is_live = True
306
mocked_display.size.return_value = (10, 10)
302
mocked_output_display = MagicMock()
303
mocked_controller = MagicMock()
304
mocked_controller.is_live = True
305
mocked_output_display.size.return_value = (10, 10)
307
306
vlc_player = VlcPlayer(None)
309
308
# WHEN: setup() is run
310
vlc_player.setup(mocked_display)
309
vlc_player.setup(mocked_output_display, mocked_controller)
312
311
# THEN: set_nsobject should be called
313
312
mocked_media_player_new.set_nsobject.assert_called_with(2)
353
352
mocked_normcase.side_effect = lambda x: x
354
353
mocked_vlc = MagicMock()
355
354
mocked_get_vlc.return_value = mocked_vlc
356
mocked_controller = MagicMock()
357
mocked_controller.media_info.volume = 100
358
mocked_controller.media_info.media_type = MediaType.Video
359
mocked_controller.media_info.file_info.absoluteFilePath.return_value = media_path
355
mocked_display = MagicMock()
356
mocked_display.media_info.volume = 100
357
mocked_display.media_info.media_type = MediaType.Video
358
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
360
359
mocked_vlc_media = MagicMock()
361
360
mocked_media = MagicMock()
362
361
mocked_media.get_duration.return_value = 10000
363
mocked_display = MagicMock()
364
mocked_display.controller = mocked_controller
365
362
mocked_display.vlc_instance.media_new_path.return_value = mocked_vlc_media
366
363
mocked_display.vlc_media_player.get_media.return_value = mocked_media
367
364
vlc_player = VlcPlayer(None)
369
366
# WHEN: A video is loaded into VLC
370
367
with patch.object(vlc_player, 'volume') as mocked_volume:
371
result = vlc_player.load(mocked_display)
368
result = vlc_player.load(mocked_display, media_path)
373
370
# THEN: The video should be loaded
374
371
mocked_normcase.assert_called_with(media_path)
392
389
mocked_normcase.side_effect = lambda x: x
393
390
mocked_vlc = MagicMock()
394
391
mocked_get_vlc.return_value = mocked_vlc
395
mocked_controller = MagicMock()
396
mocked_controller.media_info.volume = 100
397
mocked_controller.media_info.media_type = MediaType.CD
398
mocked_controller.media_info.file_info.absoluteFilePath.return_value = media_path
399
mocked_controller.media_info.title_track = 1
392
mocked_display = MagicMock()
393
mocked_display.media_info.volume = 100
394
mocked_display.media_info.media_type = MediaType.CD
395
mocked_display.media_info.title_track = 1
400
396
mocked_vlc_media = MagicMock()
401
397
mocked_media = MagicMock()
402
398
mocked_media.get_duration.return_value = 10000
403
mocked_display = MagicMock()
404
mocked_display.controller = mocked_controller
405
399
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
406
400
mocked_display.vlc_media_player.get_media.return_value = mocked_media
407
401
mocked_subitems = MagicMock()
413
407
# WHEN: An audio CD is loaded into VLC
414
408
with patch.object(vlc_player, 'volume') as mocked_volume, \
415
patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait:
416
result = vlc_player.load(mocked_display)
409
patch.object(vlc_player, 'media_state_wait'):
410
result = vlc_player.load(mocked_display, media_path)
418
412
# THEN: The video should be loaded
419
413
mocked_normcase.assert_called_with(media_path)
437
431
mocked_normcase.side_effect = lambda x: x
438
432
mocked_vlc = MagicMock()
439
433
mocked_get_vlc.return_value = mocked_vlc
440
mocked_controller = MagicMock()
441
mocked_controller.media_info.volume = 100
442
mocked_controller.media_info.media_type = MediaType.CD
443
mocked_controller.media_info.file_info.absoluteFilePath.return_value = media_path
444
mocked_controller.media_info.title_track = 1
434
mocked_display = MagicMock()
435
mocked_display.media_info.volume = 100
436
mocked_display.media_info.media_type = MediaType.CD
437
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
438
mocked_display.media_info.title_track = 1
445
439
mocked_vlc_media = MagicMock()
446
440
mocked_media = MagicMock()
447
441
mocked_media.get_duration.return_value = 10000
448
mocked_display = MagicMock()
449
mocked_display.controller = mocked_controller
450
442
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
451
443
mocked_display.vlc_media_player.get_media.return_value = mocked_media
452
444
mocked_subitems = MagicMock()
458
450
# WHEN: An audio CD is loaded into VLC
459
451
with patch.object(vlc_player, 'volume') as mocked_volume, \
460
patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait:
461
result = vlc_player.load(mocked_display)
452
patch.object(vlc_player, 'media_state_wait'):
453
result = vlc_player.load(mocked_display, media_path)
463
455
# THEN: The video should be loaded
464
456
mocked_normcase.assert_called_with(media_path)
482
474
mocked_normcase.side_effect = lambda x: x
483
475
mocked_vlc = MagicMock()
484
476
mocked_get_vlc.return_value = mocked_vlc
485
mocked_controller = MagicMock()
486
mocked_controller.media_info.volume = 100
487
mocked_controller.media_info.media_type = MediaType.CD
488
mocked_controller.media_info.file_info.absoluteFilePath.return_value = media_path
489
mocked_controller.media_info.title_track = 1
477
mocked_display = MagicMock()
478
mocked_display.media_info.volume = 100
479
mocked_display.media_info.media_type = MediaType.CD
480
mocked_display.media_info.file_info.absoluteFilePath.return_value = media_path
481
mocked_display.media_info.title_track = 1
490
482
mocked_vlc_media = MagicMock()
491
483
mocked_media = MagicMock()
492
484
mocked_media.get_duration.return_value = 10000
493
mocked_display = MagicMock()
494
mocked_display.controller = mocked_controller
495
485
mocked_display.vlc_instance.media_new_location.return_value = mocked_vlc_media
496
486
mocked_display.vlc_media_player.get_media.return_value = mocked_media
497
487
mocked_subitems = MagicMock()
501
491
vlc_player = VlcPlayer(None)
503
493
# WHEN: An audio CD is loaded into VLC
504
with patch.object(vlc_player, 'volume') as mocked_volume, \
505
patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait:
506
result = vlc_player.load(mocked_display)
494
with patch.object(vlc_player, 'volume'), patch.object(vlc_player, 'media_state_wait'):
495
result = vlc_player.load(mocked_display, media_path)
508
497
# THEN: The video should be loaded
509
498
mocked_normcase.assert_called_with(media_path)
612
601
mocked_threading.Thread.return_value = mocked_thread
613
602
mocked_vlc = MagicMock()
614
603
mocked_get_vlc.return_value = mocked_vlc
615
mocked_controller = MagicMock()
616
mocked_controller.media_info.start_time = 0
617
mocked_controller.media_info.media_type = MediaType.Video
618
mocked_controller.media_info.volume = 100
604
mocked_display = MagicMock()
619
605
mocked_media = MagicMock()
620
606
mocked_media.get_duration.return_value = 50000
621
mocked_display = MagicMock()
622
mocked_display.controller = mocked_controller
623
mocked_display.vlc_media_player.get_media.return_value = mocked_media
607
mocked_output_display = MagicMock()
608
mocked_output_display.media_info.start_time = 0
609
mocked_output_display.media_info.media_type = MediaType.Video
610
mocked_output_display.media_info.volume = 100
611
mocked_output_display.vlc_media_player.get_media.return_value = mocked_media
624
612
vlc_player = VlcPlayer(None)
625
vlc_player.set_state(MediaState.Paused, mocked_display)
613
vlc_player.set_state(MediaState.Paused, mocked_output_display)
627
615
# WHEN: play() is called
628
616
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait, \
629
617
patch.object(vlc_player, 'volume') as mocked_volume:
630
618
mocked_media_state_wait.return_value = True
631
result = vlc_player.play(mocked_display)
619
result = vlc_player.play(mocked_display, mocked_output_display)
633
621
# THEN: A bunch of things should happen to play the media
634
622
mocked_thread.start.assert_called_with()
635
mocked_volume.assert_called_with(mocked_display, 100)
623
mocked_volume.assert_called_with(mocked_output_display, 100)
636
624
assert MediaState.Playing == vlc_player.get_live_state()
637
mocked_display.vlc_widget.raise_.assert_called_with()
625
mocked_output_display.vlc_widget.raise_.assert_called_with()
638
626
assert result is True, 'The value returned from play() should be True'
640
628
@patch('openlp.core.ui.media.vlcplayer.threading')
650
638
mocked_get_vlc.return_value = mocked_vlc
651
639
mocked_controller = MagicMock()
652
640
mocked_controller.media_info.start_time = 0
653
mocked_display = MagicMock()
654
mocked_display.controller = mocked_controller
641
mocked_output_display = MagicMock()
655
642
vlc_player = VlcPlayer(None)
656
vlc_player.set_state(MediaState.Paused, mocked_display)
643
vlc_player.set_state(MediaState.Paused, mocked_output_display)
658
645
# WHEN: play() is called
659
646
with patch.object(vlc_player, 'media_state_wait') as mocked_media_state_wait, \
660
patch.object(vlc_player, 'volume') as mocked_volume:
647
patch.object(vlc_player, 'volume'):
661
648
mocked_media_state_wait.return_value = False
662
result = vlc_player.play(mocked_display)
649
result = vlc_player.play(mocked_controller, mocked_output_display)
664
651
# THEN: A thread should be started, but the method should return False
665
652
mocked_thread.start.assert_called_with()
677
664
mocked_vlc = MagicMock()
678
665
mocked_get_vlc.return_value = mocked_vlc
679
666
mocked_controller = MagicMock()
680
mocked_controller.media_info.start_time = 0
681
mocked_controller.media_info.end_time = 50
682
mocked_controller.media_info.media_type = MediaType.DVD
683
mocked_controller.media_info.volume = 100
684
mocked_controller.media_info.title_track = 1
685
mocked_controller.media_info.audio_track = 1
686
mocked_controller.media_info.subtitle_track = 1
687
mocked_display = MagicMock()
688
mocked_display.controller = mocked_controller
667
mocked_output_display = MagicMock()
668
mocked_output_display.media_info.start_time = 0
669
mocked_output_display.media_info.end_time = 50
670
mocked_output_display.media_info.media_type = MediaType.DVD
671
mocked_output_display.media_info.volume = 100
672
mocked_output_display.media_info.title_track = 1
673
mocked_output_display.media_info.audio_track = 1
674
mocked_output_display.media_info.subtitle_track = 1
689
675
vlc_player = VlcPlayer(None)
690
vlc_player.set_state(MediaState.Paused, mocked_display)
676
vlc_player.set_state(MediaState.Paused, mocked_output_display)
692
678
# WHEN: play() is called
693
with patch.object(vlc_player, 'media_state_wait', return_value=True) as mocked_media_state_wait, \
679
with patch.object(vlc_player, 'media_state_wait', return_value=True), \
694
680
patch.object(vlc_player, 'volume') as mocked_volume, \
695
681
patch.object(vlc_player, 'get_live_state', return_value=MediaState.Loaded):
696
result = vlc_player.play(mocked_display)
682
result = vlc_player.play(mocked_controller, mocked_output_display)
698
684
# THEN: A bunch of things should happen to play the media
699
685
mocked_thread.start.assert_called_with()
700
mocked_display.vlc_media_player.set_title.assert_called_with(1)
701
mocked_display.vlc_media_player.play.assert_called_with()
702
mocked_display.vlc_media_player.audio_set_track.assert_called_with(1)
703
mocked_display.vlc_media_player.video_set_spu.assert_called_with(1)
704
mocked_volume.assert_called_with(mocked_display, 100)
686
mocked_output_display.vlc_media_player.set_title.assert_called_with(1)
687
mocked_output_display.vlc_media_player.play.assert_called_with()
688
mocked_output_display.vlc_media_player.audio_set_track.assert_called_with(1)
689
mocked_output_display.vlc_media_player.video_set_spu.assert_called_with(1)
690
mocked_volume.assert_called_with(mocked_output_display, 100)
705
691
assert MediaState.Playing == vlc_player.get_live_state()
706
mocked_display.vlc_widget.raise_.assert_called_with()
692
mocked_output_display.vlc_widget.raise_.assert_called_with()
707
693
assert result is True, 'The value returned from play() should be True'
709
695
@patch('openlp.core.ui.media.vlcplayer.get_vlc')
946
931
# WHEN: update_ui() is called
947
932
with patch.object(vlc_player, 'stop') as mocked_stop, \
948
933
patch.object(vlc_player, 'set_visible') as mocked_set_visible:
949
vlc_player.update_ui(mocked_display)
934
vlc_player.update_ui(mocked_controller, mocked_display)
951
936
# THEN: Certain methods should be called
952
937
mocked_stop.assert_called_with(mocked_display)
971
956
mocked_controller.media_info.end_time = 300
972
957
mocked_controller.seek_slider.isSliderDown.return_value = False
973
958
mocked_display = MagicMock()
974
mocked_display.controller = mocked_controller
975
959
mocked_display.vlc_media.get_state.return_value = 1
976
mocked_display.vlc_media_player.get_time.return_value = 400
960
mocked_display.vlc_media_player.get_time.return_value = 300
977
961
mocked_display.controller.media_info.media_type = MediaType.DVD
978
962
vlc_player = VlcPlayer(None)
980
964
# WHEN: update_ui() is called
981
with patch.object(vlc_player, 'stop') as mocked_stop, \
982
patch.object(vlc_player, 'set_visible') as mocked_set_visible:
983
vlc_player.update_ui(mocked_display)
965
with patch.object(vlc_player, 'stop') as mocked_stop:
966
vlc_player.update_ui(mocked_controller, mocked_display)
985
968
# THEN: Certain methods should be called
986
969
mocked_stop.assert_called_with(mocked_display)
987
assert 2 == mocked_stop.call_count
970
assert 1 == mocked_stop.call_count
988
971
mocked_display.vlc_media_player.get_time.assert_called_with()
989
mocked_set_visible.assert_called_with(mocked_display, False)
990
972
mocked_controller.seek_slider.setSliderPosition.assert_called_with(300)
991
973
expected_calls = [call(True), call(False)]
992
974
assert expected_calls == mocked_controller.seek_slider.blockSignals.call_args_list