def test_add_first_verse(self): """ Test the addition of a verse to the empty list """ # GIVEN: an empty list reference_list = VerseReferenceList() book = 'testBook' chapter = 1 verse = 1 version = 'testVersion' copyright_ = 'testCopyright' permission = 'testPermission' # WHEN: We add it to the verse list reference_list.add(book, chapter, verse, version, copyright_, permission) # THEN: The entries should be in the first entry of the list self.assertEqual(reference_list.current_index, 0, 'The current index should be 0') self.assertEqual(reference_list.verse_list[0]['book'], book, 'The book in first entry should be %s' % book) self.assertEqual(reference_list.verse_list[0]['chapter'], chapter, 'The chapter in first entry should be %u' % chapter) self.assertEqual(reference_list.verse_list[0]['start'], verse, 'The start in first entry should be %u' % verse) self.assertEqual(reference_list.verse_list[0]['version'], version, 'The version in first entry should be %s' % version) self.assertEqual(reference_list.verse_list[0]['end'], verse, 'The end in first entry should be %u' % verse)
def test_add_another_verse(self): """ Test the addition of a verse in another book """ # GIVEN: 1 line in the list of verses book = 'testBook' chapter = 1 verse = 1 another_book = 'testBook2' another_chapter = 2 another_verse = 5 version = 'testVersion' copyright_ = 'testCopyright' permission = 'testPermission' reference_list = VerseReferenceList() reference_list.add(book, chapter, verse, version, copyright_, permission) # WHEN: We add a verse of another book to the verse list reference_list.add(another_book, another_chapter, another_verse, version, copyright_, permission) # THEN: the current index should be 1 self.assertEqual(reference_list.current_index, 1, 'The current index should be 1')
def test_add_next_verse(self): """ Test the addition of the following verse """ # GIVEN: 1 line in the list of verses book = 'testBook' chapter = 1 verse = 1 next_verse = 2 version = 'testVersion' copyright_ = 'testCopyright' permission = 'testPermission' reference_list = VerseReferenceList() reference_list.add(book, chapter, verse, version, copyright_, permission) # WHEN: We add the following verse to the verse list reference_list.add(book, chapter, next_verse, version, copyright_, permission) # THEN: The current index should be 0 and the end pointer of the entry should be '2' self.assertEqual(reference_list.current_index, 0, 'The current index should be 0') self.assertEqual(reference_list.verse_list[0]['end'], next_verse, 'The end in first entry should be %u' % next_verse)
def generate_slide_data(self, service_item, *, item=None, remote=False, context=ServiceItemContext.Service, **kwargs): """ Generate the slide data. Needs to be implemented by the plugin. :param service_item: The service item to be built on :param item: The Song item to be used :param remote: Triggered from remote :param context: Why is it being generated :param kwargs: Consume other unused args specified by the base implementation, but not use by this one. """ log.debug('generating slide data') if item: items = item else: items = self.list_view.selectedItems() if not items: return False bible_text = '' old_chapter = -1 raw_slides = [] verses = VerseReferenceList() for bitem in items: data = bitem.data(QtCore.Qt.UserRole) verses.add( data['book'], data['chapter'], data['verse'], data['version'], data['copyright'], data['permissions']) verse_text = self.format_verse(old_chapter, data['chapter'], data['verse']) # We only support 'Verse Per Slide' when using a scond bible if data['second_bible']: second_text = self.format_verse(old_chapter, data['chapter'], data['verse']) bible_text = '{first_version}{data[text]}\n\n{second_version}{data[second_text]}'\ .format(first_version=verse_text, second_version=second_text, data=data) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Slide' then create a new slide. elif self.settings_tab.layout_style == LayoutStyle.VersePerSlide: bible_text = '{first_version}{data[text]}'.format(first_version=verse_text, data=data) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Line' then force a new line. elif self.settings_tab.layout_style == LayoutStyle.VersePerLine: bible_text = '{bible} {verse}{data[text]}\n'.format(bible=bible_text, verse=verse_text, data=data) # We have to be 'Continuous'. else: bible_text = '{bible} {verse}{data[text]}'.format(bible=bible_text, verse=verse_text, data=data) bible_text = bible_text.strip(' ') old_chapter = data['chapter'] # Add footer service_item.raw_footer.append(verses.format_verses()) if data['second_bible']: verses.add_version(data['second_version'], data['second_copyright'], data['second_permissions']) service_item.raw_footer.append(verses.format_versions()) # If there are no more items we check whether we have to add bible_text. if bible_text: raw_slides.append(bible_text.lstrip()) # Service Item: Capabilities if self.settings_tab.layout_style == LayoutStyle.Continuous and not data['second_bible']: # Split the line but do not replace line breaks in renderer. service_item.add_capability(ItemCapabilities.NoLineBreaks) service_item.add_capability(ItemCapabilities.CanPreview) service_item.add_capability(ItemCapabilities.CanLoop) service_item.add_capability(ItemCapabilities.CanWordSplit) service_item.add_capability(ItemCapabilities.CanEditTitle) # Service Item: Title service_item.title = '{verse} {version}'.format(verse=verses.format_verses(), version=verses.format_versions()) # Service Item: Theme if self.settings_tab.bible_theme: service_item.theme = self.settings_tab.bible_theme for slide in raw_slides: service_item.add_from_text(slide) return True