예제 #1
0
class TestSongBeamerImport(TestCase):
    """
    Test the functions in the :mod:`songbeamerimport` module.
    """
    def setUp(self):
        """
        Create the registry
        """
        Registry.create()
        self.song_import_patcher = patch(
            'openlp.plugins.songs.lib.importers.songbeamer.SongImport')
        self.song_import_patcher.start()
        mocked_manager = MagicMock()
        self.importer = SongBeamerImport(mocked_manager, file_paths=[])

    def tearDown(self):
        """
        Clean up
        """
        self.song_import_patcher.stop()

    def test_create_importer(self):
        """
        Test creating an instance of the SongBeamer file importer
        """
        # GIVEN: A mocked out SongImport class, and a mocked out "manager"
        with patch('openlp.plugins.songs.lib.importers.songbeamer.SongImport'):
            mocked_manager = MagicMock()

            # WHEN: An importer object is created
            importer = SongBeamerImport(mocked_manager, file_paths=[])

            # THEN: The importer object should not be None
            assert importer is not None, 'Import should not be none'

    def test_invalid_import_source(self):
        """
        Test SongBeamerImport.do_import handles different invalid import_source values
        """
        # GIVEN: A mocked out import wizard
        mocked_import_wizard = MagicMock()
        self.importer.import_wizard = mocked_import_wizard
        self.importer.stop_import_flag = True

        # WHEN: Import source is not a list
        for source in ['not a list', 0]:
            self.importer.import_source = source

            # THEN: do_import should return none and the progress bar maximum should not be set.
            assert self.importer.do_import() is None, \
                'do_import should return None when import_source is not a list'
            assert mocked_import_wizard.progress_bar.setMaximum.called is False, \
                'setMaxium on import_wizard.progress_bar should not have been called'

    def test_valid_import_source(self):
        """
        Test SongBeamerImport.do_import handles different invalid import_source values
        """
        # GIVEN: A mocked out import wizard
        mocked_import_wizard = MagicMock()
        self.importer.import_wizard = mocked_import_wizard
        self.importer.stop_import_flag = True

        # WHEN: Import source is a list
        self.importer.import_source = ['List', 'of', 'files']

        # THEN: do_import should return none and the progress bar setMaximum should be called with the length of
        #       import_source.
        assert self.importer.do_import() is None, \
            'do_import should return None when import_source is a list and stop_import_flag is True'
        mocked_import_wizard.progress_bar.setMaximum.assert_called_with(
            len(self.importer.import_source))

    def test_check_verse_marks(self):
        """
        Tests different lines to see if a verse mark is detected or not
        """

        # GIVEN: line with unnumbered verse-type
        line = 'Refrain'
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back true and c as self.importer.current_verse_type
        assert result is True, 'Versemark for <Refrain> should be found, value true'
        assert self.importer.current_verse_type == 'c', '<Refrain> should be interpreted as <c>'

        # GIVEN: line with unnumbered verse-type and trailing space
        line = 'ReFrain '
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back true and c as self.importer.current_verse_type
        assert result is True, 'Versemark for <ReFrain > should be found, value true'
        assert self.importer.current_verse_type == 'c', '<ReFrain > should be interpreted as <c>'

        # GIVEN: line with numbered verse-type
        line = 'VersE 1'
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back true and v1 as self.importer.current_verse_type
        assert result is True, 'Versemark for <VersE 1> should be found, value true'
        assert self.importer.current_verse_type == 'v1', u'<VersE 1> should be interpreted as <v1>'

        # GIVEN: line with special unnumbered verse-mark (used in Songbeamer to allow usage of non-supported tags)
        line = '$$M=special'
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back true and o as self.importer.current_verse_type
        assert result is True, 'Versemark for <$$M=special> should be found, value true'
        assert self.importer.current_verse_type == 'o', u'<$$M=special> should be interpreted as <o>'

        # GIVEN: line with song-text with 3 words
        line = 'Jesus my saviour'
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back false and none as self.importer.current_verse_type
        assert result is False, 'No versemark for <Jesus my saviour> should be found, value false'
        assert self.importer.current_verse_type is None, '<Jesus my saviour> should be interpreted as none versemark'

        # GIVEN: line with song-text with 2 words
        line = 'Praise him'
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back false and none as self.importer.current_verse_type
        assert result is False, 'No versemark for <Praise him> should be found, value false'
        assert self.importer.current_verse_type is None, '<Praise him> should be interpreted as none versemark'

        # GIVEN: line with only a space (could occur, nothing regular)
        line = ' '
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back false and none as self.importer.current_verse_type
        assert result is False, 'No versemark for < > should be found, value false'
        assert self.importer.current_verse_type is None, '< > should be interpreted as none versemark'

        # GIVEN: blank line (could occur, nothing regular)
        line = ''
        self.importer.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = self.importer.check_verse_marks(line)
        # THEN: we should get back false and none as self.importer.current_verse_type
        assert result is False, 'No versemark for <> should be found, value false'
        assert self.importer.current_verse_type is None, '<> should be interpreted as none versemark'

    def test_verse_marks_defined_in_lowercase(self):
        """
        Test that the verse marks are all defined in lowercase
        """
        # GIVEN: SongBeamber MarkTypes
        for tag in SongBeamerTypes.MarkTypes.keys():
            # THEN: tag should be defined in lowercase
            assert tag == tag.lower(), 'Tags should be defined in lowercase'
예제 #2
0
    def check_verse_marks_test(self):
        """
        Tests different lines to see if a verse mark is detected or not
        """

        # GIVEN: line with unnumbered verse-type
        line = 'Refrain'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and c as self.current_verse_type
        self.assertTrue(result, 'Versemark for <Refrain> should be found, value true')
        self.assertEqual(self.current_verse_type, 'c', '<Refrain> should be interpreted as <c>')

        # GIVEN: line with unnumbered verse-type and trailing space
        line = 'Refrain '
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and c as self.current_verse_type
        self.assertTrue(result, 'Versemark for <Refrain > should be found, value true')
        self.assertEqual(self.current_verse_type, 'c', '<Refrain > should be interpreted as <c>')

        # GIVEN: line with numbered verse-type
        line = 'Verse 1'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and v1 as self.current_verse_type
        self.assertTrue(result, 'Versemark for <Verse 1> should be found, value true')
        self.assertEqual(self.current_verse_type, 'v1', u'<Verse 1> should be interpreted as <v1>')

        # GIVEN: line with special unnumbered verse-mark (used in Songbeamer to allow usage of non-supported tags)
        line = '$$M=special'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and o as self.current_verse_type
        self.assertTrue(result, 'Versemark for <$$M=special> should be found, value true')
        self.assertEqual(self.current_verse_type, 'o', u'<$$M=special> should be interpreted as <o>')

        # GIVEN: line with song-text with 3 words
        line = 'Jesus my saviour'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result, 'No versemark for <Jesus my saviour> should be found, value false')
        self.assertIsNone(self.current_verse_type, '<Jesus my saviour> should be interpreted as none versemark')

        # GIVEN: line with song-text with 2 words
        line = 'Praise him'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result, 'No versemark for <Praise him> should be found, value false')
        self.assertIsNone(self.current_verse_type, '<Praise him> should be interpreted as none versemark')

        # GIVEN: line with only a space (could occur, nothing regular)
        line = ' '
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result, 'No versemark for < > should be found, value false')
        self.assertIsNone(self.current_verse_type, '< > should be interpreted as none versemark')

        # GIVEN: blank line (could occur, nothing regular)
        line = ''
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result, 'No versemark for <> should be found, value false')
        self.assertIsNone(self.current_verse_type, '<> should be interpreted as none versemark')
예제 #3
0
    def check_verse_marks_test(self):
        """
        Tests different lines to see if a verse mark is detected or not
        """

        # GIVEN: line with unnumbered verse-type
        line = 'Refrain'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and c as self.current_verse_type
        self.assertTrue(result,
                        'Versemark for <Refrain> should be found, value true')
        self.assertEqual(self.current_verse_type, 'c',
                         '<Refrain> should be interpreted as <c>')

        # GIVEN: line with unnumbered verse-type and trailing space
        line = 'Refrain '
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and c as self.current_verse_type
        self.assertTrue(
            result, 'Versemark for <Refrain > should be found, value true')
        self.assertEqual(self.current_verse_type, 'c',
                         '<Refrain > should be interpreted as <c>')

        # GIVEN: line with numbered verse-type
        line = 'Verse 1'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and v1 as self.current_verse_type
        self.assertTrue(result,
                        'Versemark for <Verse 1> should be found, value true')
        self.assertEqual(self.current_verse_type, 'v1',
                         u'<Verse 1> should be interpreted as <v1>')

        # GIVEN: line with special unnumbered verse-mark (used in Songbeamer to allow usage of non-supported tags)
        line = '$$M=special'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back true and o as self.current_verse_type
        self.assertTrue(
            result, 'Versemark for <$$M=special> should be found, value true')
        self.assertEqual(self.current_verse_type, 'o',
                         u'<$$M=special> should be interpreted as <o>')

        # GIVEN: line with song-text with 3 words
        line = 'Jesus my saviour'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(
            result,
            'No versemark for <Jesus my saviour> should be found, value false')
        self.assertIsNone(
            self.current_verse_type,
            '<Jesus my saviour> should be interpreted as none versemark')

        # GIVEN: line with song-text with 2 words
        line = 'Praise him'
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(
            result,
            'No versemark for <Praise him> should be found, value false')
        self.assertIsNone(
            self.current_verse_type,
            '<Praise him> should be interpreted as none versemark')

        # GIVEN: line with only a space (could occur, nothing regular)
        line = ' '
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result,
                         'No versemark for < > should be found, value false')
        self.assertIsNone(self.current_verse_type,
                          '< > should be interpreted as none versemark')

        # GIVEN: blank line (could occur, nothing regular)
        line = ''
        self.current_verse_type = None
        # WHEN: line is being checked for verse marks
        result = SongBeamerImport.check_verse_marks(self, line)
        # THEN: we should get back false and none as self.current_verse_type
        self.assertFalse(result,
                         'No versemark for <> should be found, value false')
        self.assertIsNone(self.current_verse_type,
                          '<> should be interpreted as none versemark')