Review: Needs Fixing

Very nice.
3 Minor questions.

Diff comments:

> 
> === modified file 'openlp/core/ui/mainwindow.py'
> --- openlp/core/ui/mainwindow.py      2017-12-29 09:15:48 +0000
> +++ openlp/core/ui/mainwindow.py      2018-01-07 05:37:57 +0000
> @@ -1063,8 +1074,8 @@
>          :param save_settings: Switch to prevent saving settings. Defaults to 
> **True**.
>          """
>          self.image_manager.stop_manager = True
> -        while self.image_manager.image_thread.isRunning():
> -            time.sleep(0.1)
> +        # while self.image_manager.image_thread.isRunning():
> +        #     time.sleep(0.1)

Should this be here or removed?

>          if save_settings:
>              if Settings().value('advanced/save current plugin'):
>                  Settings().setValue('advanced/current media plugin', 
> self.media_tool_box.currentIndex())
> 
> === added file 'tests/functional/openlp_core/test_threading.py'
> --- tests/functional/openlp_core/test_threading.py    1970-01-01 00:00:00 
> +0000
> +++ tests/functional/openlp_core/test_threading.py    2018-01-07 05:37:57 
> +0000
> @@ -0,0 +1,89 @@
> +# -*- 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                                  
>  #

Wrong year!

> +# 
> --------------------------------------------------------------------------- #
> +# 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.threading package.
> +"""
> +from unittest.mock import MagicMock, call, patch
> +
> +from openlp.core.version import run_thread
> +
> +
> +def test_run_thread_no_name():
> +    """
> +    Test that trying to run a thread without a name results in an exception 
> being thrown
> +    """
> +    # GIVEN: A fake worker
> +    # WHEN: run_thread() is called without a name
> +    try:
> +        run_thread(MagicMock(), '')
> +        assert False, 'A ValueError should have been thrown to prevent blank 
> names'
> +    except ValueError:
> +        # THEN: A ValueError should have been thrown
> +        assert True, 'A ValueError was correctly thrown'
> +
> +
> +@patch('openlp.core.threading.Registry')
> +def test_run_thread_exists(MockRegistry):
> +    """
> +    Test that trying to run a thread with a name that already exists will 
> throw a KeyError
> +    """
> +    # GIVEN: A mocked registry with a main window object
> +    mocked_main_window = MagicMock()
> +    mocked_main_window.threads = {'test_thread': MagicMock()}
> +    MockRegistry.return_value.get.return_value = mocked_main_window
> +
> +    # WHEN: run_thread() is called
> +    try:
> +        run_thread(MagicMock(), 'test_thread')
> +        assert False, 'A KeyError should have been thrown to show that a 
> thread with this name already exists'
> +    except KeyError:
> +        assert True, 'A KeyError was correctly thrown'
> +
> +
> +@patch('openlp.core.threading.QtCore.QThread')
> +@patch('openlp.core.threading.Registry')
> +def test_run_thread(MockRegistry, MockQThread):
> +    """
> +    Test that running a thread works correctly
> +    """
> +    # GIVEN: A mocked registry with a main window object
> +    mocked_main_window = MagicMock()
> +    mocked_main_window.threads = {}
> +    MockRegistry.return_value.get.return_value = mocked_main_window
> +
> +    # WHEN: run_thread() is called
> +    run_thread(MagicMock(), 'test_thread')
> +
> +    # THEN: The thread should be in the threads list and the correct methods 
> should have been called
> +    assert len(mocked_main_window.threads.keys()) == 1, 'There should be 1 
> item in the list of threads'
> +    assert list(mocked_main_window.threads.keys()) == ['test_thread'], 'The 
> test_thread item should be in the list'
> +    mocked_worker = mocked_main_window.threads['test_thread']['worker']
> +    mocked_thread = mocked_main_window.threads['test_thread']['thread']
> +    mocked_worker.moveToThread.assert_called_once_with(mocked_thread)
> +    
> mocked_thread.started.connect.assert_called_once_with(mocked_worker.start)
> +    expected_quit_calls = [call(mocked_thread.quit), 
> call(mocked_worker.deleteLater)]
> +    assert mocked_worker.quit.connect.call_args_list == expected_quit_calls, 
> \
> +        'The workers quit signal should be connected twice'
> +    assert mocked_thread.finished.connect.call_args_list[0] == 
> call(mocked_thread.deleteLater), \
> +        'The threads finished signal should be connected to its deleteLater 
> slot'
> +    assert mocked_thread.finished.connect.call_count == 2, 'The signal 
> should have been connected twice'
> +    mocked_thread.start.assert_called_once_with()
> 
> === removed file 'tests/functional/openlp_core/ui/media/test_systemplayer.py'

Why? no comments as to why?



-- 
https://code.launchpad.net/~raoul-snyman/openlp/better-threading/+merge/335801
Your team OpenLP Core is subscribed to branch lp:openlp.

_______________________________________________
Mailing list: https://launchpad.net/~openlp-core
Post to     : openlp-core@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openlp-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to