openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #29836
[Merge] lp:~alisonken1/openlp/strings-templates into lp:openlp
Ken Roberts has proposed merging lp:~alisonken1/openlp/strings-templates into lp:openlp.
Commit message:
String conversions with templates part 1
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~alisonken1/openlp/strings-templates/+merge/296485
String conversions with templates part 1
- Fix string format key error in first time wizard from previous string conversion
- Fix projector pjlink1 test to use MagicMock
- Part 1 string conversions where format template is a string variable that's filled later
- Update projectordb test
- Fix a test on htmlbuilder string formatting
--------------------------------
lp:~alisonken1/openlp/strings-templates (revision 2675)
[SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/1588/
[SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/1499/
[SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1437/
[SUCCESS] https://ci.openlp.io/job/Branch-04a-Windows_Functional_Tests/1216/
[SUCCESS] https://ci.openlp.io/job/Branch-04b-Windows_Interface_Tests/806/
[SUCCESS] https://ci.openlp.io/job/Branch-05a-Code_Analysis/874/
[SUCCESS] https://ci.openlp.io/job/Branch-05b-Test_Coverage/742/
--
Your team OpenLP Core is requested to review the proposed merge of lp:~alisonken1/openlp/strings-templates into lp:openlp.
=== modified file 'openlp/core/common/uistrings.py'
--- openlp/core/common/uistrings.py 2016-05-14 04:24:46 +0000
+++ openlp/core/common/uistrings.py 2016-06-04 05:45:00 +0000
@@ -80,8 +80,9 @@
self.Export = translate('OpenLP.Ui', 'Export')
self.File = translate('OpenLP.Ui', 'File')
self.FileNotFound = translate('OpenLP.Ui', 'File Not Found')
- # TODO: Check before converting to python3 string
- self.FileNotFoundMessage = translate('OpenLP.Ui', 'File %s not found.\nPlease try selecting it individually.')
+ # TODO: Passed nose - verify in real life example
+ self.FileNotFoundMessage = translate('OpenLP.Ui',
+ 'File {name} not found.\nPlease try selecting it individually.')
self.FontSizePtUnit = translate('OpenLP.Ui', 'pt', 'Abbreviated font pointsize unit')
self.Help = translate('OpenLP.Ui', 'Help')
self.Hours = translate('OpenLP.Ui', 'h', 'The abbreviated unit for hours')
@@ -140,8 +141,8 @@
self.Split = translate('OpenLP.Ui', 'Optional &Split')
self.SplitToolTip = translate('OpenLP.Ui',
'Split a slide into two only if it does not fit on the screen as one slide.')
- # TODO: Check before converting to python3 string
- self.StartTimeCode = translate('OpenLP.Ui', 'Start %s')
+ # TODO: WHERE is this used at? cannot find where it's used at in code.
+ self.StartTimeCode = translate('OpenLP.Ui', 'Start {code}')
self.StopPlaySlidesInLoop = translate('OpenLP.Ui', 'Stop Play Slides in Loop')
self.StopPlaySlidesToEnd = translate('OpenLP.Ui', 'Stop Play Slides to End')
self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular')
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py 2016-05-21 05:02:31 +0000
+++ openlp/core/lib/__init__.py 2016-06-04 05:45:00 +0000
@@ -323,8 +323,7 @@
return ''
elif len(string_list) == 1:
return string_list[0]
- # TODO:
- # Cannot convert these strings to python3 yet until I can figure out how to mock translate() with the new format
+ # TODO: Verify mocking of translate() test before conversion
elif len(string_list) == 2:
return translate('OpenLP.core.lib', '%s and %s',
'Locale list separator: 2 items') % (string_list[0], string_list[1])
=== modified file 'openlp/core/lib/filedialog.py'
--- openlp/core/lib/filedialog.py 2016-05-15 17:33:42 +0000
+++ openlp/core/lib/filedialog.py 2016-06-04 05:45:00 +0000
@@ -51,9 +51,9 @@
file = parse.unquote(file)
if not os.path.exists(file):
log.error('File {text} not found.'.format(text=file))
- # TODO: Test with UiStrings() before converting to python3 strings
+ # TODO: Should work - need to verify
QtWidgets.QMessageBox.information(parent, UiStrings().FileNotFound,
- UiStrings().FileNotFoundMessage % file)
+ UiStrings().FileNotFoundMessage.format(name=file))
continue
file_list.append(file)
return file_list
=== modified file 'openlp/core/lib/htmlbuilder.py'
--- openlp/core/lib/htmlbuilder.py 2016-05-17 13:21:29 +0000
+++ openlp/core/lib/htmlbuilder.py 2016-06-04 05:45:00 +0000
@@ -396,74 +396,74 @@
log = logging.getLogger(__name__)
-# TODO: Verify where this is used before converting to python3
+# TODO: Tested at home
HTMLSRC = """
<!DOCTYPE html>
<html>
<head>
<title>OpenLP Display</title>
<style>
-*{
+*{{
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
-webkit-user-select: none;
-}
-body {
- %s;
-}
-.size {
+}}
+body {{
+ {background_css};
+}}
+.size {{
position: absolute;
left: 0px;
top: 0px;
- width: 100%%;
- height: 100%%;
-}
-#black {
+ width: 100%;
+ height: 100%;
+}}
+#black {{
z-index: 8;
background-color: black;
display: none;
-}
-#bgimage {
+}}
+#bgimage {{
z-index: 1;
-}
-#image {
+}}
+#image {{
z-index: 2;
-}
-%s
-#footer {
+}}
+{additions}
+#footer {{
position: absolute;
z-index: 6;
- %s
-}
+ {footer_css}
+}}
/* lyric css */
-%s
-sup {
+{lyrics_css}
+sup {{
font-size: 0.6em;
vertical-align: top;
position: relative;
top: -0.3em;
-}
+}}
</style>
<script>
var timer = null;
- var transition = %s;
- %s
+ var transition = {transitions};
+ {js_additions}
- function show_image(src){
+ function show_image(src){{
var img = document.getElementById('image');
img.src = src;
if(src == '')
img.style.display = 'none';
else
img.style.display = 'block';
- }
+ }}
- function show_blank(state){
+ function show_blank(state){{
var black = 'none';
var lyrics = '';
- switch(state){
+ switch(state){{
case 'theme':
lyrics = 'hidden';
break;
@@ -472,18 +472,18 @@
break;
case 'desktop':
break;
- }
+ }}
document.getElementById('black').style.display = black;
document.getElementById('lyricsmain').style.visibility = lyrics;
document.getElementById('image').style.visibility = lyrics;
document.getElementById('footer').style.visibility = lyrics;
- }
+ }}
- function show_footer(footertext){
+ function show_footer(footertext){{
document.getElementById('footer').innerHTML = footertext;
- }
+ }}
- function show_text(new_text){
+ function show_text(new_text){{
var match = /-webkit-text-fill-color:[^;\"]+/gi;
if(timer != null)
clearTimeout(timer);
@@ -493,35 +493,35 @@
but only in this scenario.
*/
var txt = document.getElementById('lyricsmain');
- if(window.getComputedStyle(txt).textAlign == 'justify'){
- if(window.getComputedStyle(txt).webkitTextStrokeWidth != '0px'){
+ if(window.getComputedStyle(txt).textAlign == 'justify'){{
+ if(window.getComputedStyle(txt).webkitTextStrokeWidth != '0px'){{
new_text = new_text.replace(/(\s| )+(?![^<]*>)/g,
- function(match) {
+ function(match) {{
return '</span>' + match + '<span>';
- });
+ }});
new_text = '<span>' + new_text + '</span>';
- }
- }
+ }}
+ }}
text_fade('lyricsmain', new_text);
- }
+ }}
- function text_fade(id, new_text){
+ function text_fade(id, new_text){{
/*
Show the text.
*/
var text = document.getElementById(id);
if(text == null) return;
- if(!transition){
+ if(!transition){{
text.innerHTML = new_text;
return;
- }
+ }}
// Fade text out. 0.1 to minimize the time "nothing" is shown on the screen.
text.style.opacity = '0.1';
// Fade new text in after the old text has finished fading out.
- timer = window.setTimeout(function(){_show_text(text, new_text)}, 400);
- }
+ timer = window.setTimeout(function(){{_show_text(text, new_text)}}, 400);
+ }}
- function _show_text(text, new_text) {
+ function _show_text(text, new_text) {{
/*
Helper function to show the new_text delayed.
*/
@@ -529,18 +529,18 @@
text.style.opacity = '1';
// Wait until the text is completely visible. We want to save the timer id, to be able to call
// clearTimeout(timer) when the text has changed before finishing fading.
- timer = window.setTimeout(function(){timer = null;}, 400);
- }
+ timer = window.setTimeout(function(){{timer = null;}}, 400);
+ }}
- function show_text_completed(){
+ function show_text_completed(){{
return (timer == null);
- }
+ }}
</script>
</head>
<body>
-<img id="bgimage" class="size" %s />
-<img id="image" class="size" %s />
-%s
+<img id="bgimage" class="size" {bgimage} />
+<img id="image" class="size" {image} />
+{html_additions}
<div class="lyricstable"><div id="lyricsmain" style="opacity:1" class="lyricscell lyricsmain"></div></div>
<div id="footer" class="footer"></div>
<div id="black" class="size"></div>
@@ -582,17 +582,17 @@
css_additions += plugin.get_display_css()
js_additions += plugin.get_display_javascript()
html_additions += plugin.get_display_html()
- html = HTMLSRC % (
- build_background_css(item, width),
- css_additions,
- build_footer_css(item, height),
- build_lyrics_css(item),
- 'true' if theme_data and theme_data.display_slide_transition and is_live else 'false',
- js_additions,
- bgimage_src,
- image_src,
- html_additions
- )
+ html = HTMLSRC.format(background_css=build_background_css(item, width),
+ additions=css_additions,
+ footer_css=build_footer_css(item, height),
+ lyrics_css=build_lyrics_css(item),
+ transitions='true' if (theme_data and
+ theme_data.display_slide_transition and
+ is_live) else 'false',
+ js_additions=js_additions,
+ bgimage=bgimage_src,
+ image=image_src,
+ html_additions=html_additions)
return html
@@ -650,23 +650,23 @@
:param item: Service Item containing theme and location information
"""
- # TODO: Verify this before converting to python3
+ # TODO: Tested at home
style = """
-.lyricstable {
+.lyricstable {{
z-index: 5;
position: absolute;
display: table;
- %s
-}
-.lyricscell {
+ {stable}
+}}
+.lyricscell {{
display: table-cell;
word-wrap: break-word;
-webkit-transition: opacity 0.4s ease;
- %s
-}
-.lyricsmain {
- %s
-}
+ {lyrics}
+}}
+.lyricsmain {{
+ {main}
+}}
"""
theme_data = item.theme_data
lyricstable = ''
@@ -680,7 +680,7 @@
lyricsmain += ' text-shadow: {theme} {shadow}px ' \
'{shadow}px;'.format(theme=theme_data.font_main_shadow_color,
shadow=theme_data.font_main_shadow_size)
- lyrics_css = style % (lyricstable, lyrics, lyricsmain)
+ lyrics_css = style.format(stable=lyricstable, lyrics=lyrics, main=lyricsmain)
return lyrics_css
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2016-05-15 17:33:42 +0000
+++ openlp/core/lib/renderer.py 2016-06-04 05:45:00 +0000
@@ -370,21 +370,22 @@
self.web.resize(self.page_width, self.page_height)
self.web_frame = self.web.page().mainFrame()
# Adjust width and height to account for shadow. outline done in css.
- # TODO: Verify before converting to python3 strings
+ # TODO: Tested at home
html = """<!DOCTYPE html><html><head><script>
- function show_text(newtext) {
+ function show_text(newtext) {{
var main = document.getElementById('main');
main.innerHTML = newtext;
// We need to be sure that the page is loaded, that is why we
// return the element's height (even though we do not use the
// returned value).
return main.offsetHeight;
- }
- </script><style>*{margin: 0; padding: 0; border: 0;}
- #main {position: absolute; top: 0px; %s %s}</style></head><body>
- <div id="main"></div></body></html>""" % \
- (build_lyrics_format_css(theme_data, self.page_width, self.page_height),
- build_lyrics_outline_css(theme_data))
+ }}
+ </script><style>*{{margin: 0; padding: 0; border: 0;}}
+ #main {{position: absolute; top: 0px; {format_css} {outline_css}}}</style></head><body>
+ <div id="main"></div></body></html>""".format(format_css=build_lyrics_format_css(theme_data,
+ self.page_width,
+ self.page_height),
+ outline_css=build_lyrics_outline_css(theme_data))
self.web.setHtml(html)
self.empty_height = self.web_frame.contentsSize().height()
=== modified file 'openlp/core/lib/theme.py'
--- openlp/core/lib/theme.py 2016-05-15 17:33:42 +0000
+++ openlp/core/lib/theme.py 2016-06-04 05:45:00 +0000
@@ -513,8 +513,8 @@
theme_strings = []
for key in dir(self):
if key[0:1] != '_':
- # TODO: Verify spacing format before converting to python3 string
- theme_strings.append('%30s: %s' % (key, getattr(self, key)))
+ # TODO: Tested at home
+ theme_strings.append('{key:>30}: {value}'.format(key=key, value=getattr(self, key)))
return '\n'.join(theme_strings)
def _build_xml_from_attrs(self):
=== modified file 'openlp/core/ui/exceptionform.py'
--- openlp/core/ui/exceptionform.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/exceptionform.py 2016-06-04 05:45:00 +0000
@@ -91,13 +91,13 @@
super(ExceptionForm, self).__init__(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
self.setupUi(self)
self.settings_section = 'crashreport'
- # TODO: Need to see how to format strings when string with tags is actually a variable
+ # TODO: Should work - need to test
self.report_text = '**OpenLP Bug Report**\n' \
- 'Version: %s\n\n' \
- '--- Details of the Exception. ---\n\n%s\n\n ' \
- '--- Exception Traceback ---\n%s\n' \
- '--- System information ---\n%s\n' \
- '--- Library Versions ---\n%s\n'
+ 'Version: {version}\n\n' \
+ '--- Details of the Exception. ---\n\n{description}\n\n ' \
+ '--- Exception Traceback ---\n{traceback}\n' \
+ '--- System information ---\n{system}\n' \
+ '--- Library Versions ---\n{libs}\n'
def exec(self):
"""
@@ -133,7 +133,15 @@
system += 'Desktop: GNOME\n'
elif os.environ.get('DESKTOP_SESSION') == 'xfce':
system += 'Desktop: Xfce\n'
- return openlp_version, description, traceback, system, libraries
+ # NOTE: This needs to return a string that format() will use. See __init__.self.report_text for names.
+ return ("version='{version}', "
+ "description='{description}', "
+ "traceback='{traceback}', "
+ "libs='{libs}'").format(version=openlp_version,
+ description=description,
+ traceback=traceback,
+ system=system,
+ libs=libraries)
def on_save_report_button_clicked(self):
"""
@@ -147,7 +155,8 @@
if filename:
filename = str(filename).replace('/', os.path.sep)
Settings().setValue(self.settings_section + '/last directory', os.path.dirname(filename))
- report_text = self.report_text % self._create_report()
+ # NOTE: self._create_report() should return a string with the key names for format()
+ report_text = self.report_text.format(self._create_report())
try:
report_file = open(filename, 'w')
try:
@@ -167,6 +176,7 @@
"""
Opening systems default email client and inserting exception log and system information.
"""
+ # NOTE: self._create_report() should return a string with keys for format()
content = self._create_report()
source = ''
exception = ''
@@ -178,8 +188,8 @@
subject = 'Bug report: {error} in {source}'.format(error=exception, source=source)
mail_urlquery = QtCore.QUrlQuery()
mail_urlquery.addQueryItem('subject', subject)
- # TODO: Find out how to format() text that is in a variable
- mail_urlquery.addQueryItem('body', self.report_text % content)
+ # TODO: Should be good - need to test
+ mail_urlquery.addQueryItem('body', self.report_text.format(content))
if self.file_attachment:
mail_urlquery.addQueryItem('attach', self.file_attachment)
mail_to_url = QtCore.QUrl('mailto:bugs@xxxxxxxxxx')
=== modified file 'openlp/core/ui/firsttimeform.py'
--- openlp/core/ui/firsttimeform.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/firsttimeform.py 2016-06-04 05:45:00 +0000
@@ -207,8 +207,8 @@
trace_error_handler(log)
self.update_screen_list_combo()
self.application.process_events()
- # TODO: Figure out how to use a variable with format()
- self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading %s...')
+ # TODO: Tested at home
+ self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading {name}...')
if self.has_run_wizard:
self.songs_check_box.setChecked(self.plugin_manager.get_plugin_by_name('songs').is_active())
self.bible_check_box.setChecked(self.plugin_manager.get_plugin_by_name('bibles').is_active())
@@ -564,7 +564,7 @@
self.progress_bar.setValue(self.progress_bar.maximum())
if self.has_run_wizard:
text = translate('OpenLP.FirstTimeWizard',
- 'Download complete. Click the {button} button to return to OpenLP.'
+ 'Download complete. Click the {text} button to return to OpenLP.'
).format(text=clean_button_text(self.buttonText(QtWidgets.QWizard.FinishButton)))
self.progress_label.setText(text)
else:
@@ -632,7 +632,8 @@
item = self.songs_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked:
filename, sha256 = item.data(QtCore.Qt.UserRole)
- self._increment_progress_bar(self.downloading % filename, 0)
+ # TODO: Tested at home
+ self._increment_progress_bar(self.downloading.format(name=filename), 0)
self.previous_size = 0
destination = os.path.join(songs_destination, str(filename))
if not self.url_get_file('{path}{name}'.format(path=self.songs_url, name=filename),
@@ -644,7 +645,8 @@
item = bibles_iterator.value()
if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
bible, sha256 = item.data(0, QtCore.Qt.UserRole)
- self._increment_progress_bar(self.downloading % bible, 0)
+ # TODO: Tested at home
+ self._increment_progress_bar(self.downloading.format(name=bible), 0)
self.previous_size = 0
if not self.url_get_file('{path}{name}'.format(path=self.bibles_url, name=bible),
os.path.join(bibles_destination, bible),
@@ -656,8 +658,8 @@
item = self.themes_list_widget.item(i)
if item.checkState() == QtCore.Qt.Checked:
theme, sha256 = item.data(QtCore.Qt.UserRole)
- # TODO: Verify how to use format() with strings in a variable
- self._increment_progress_bar(self.downloading % theme, 0)
+ # TODO: Tested at home
+ self._increment_progress_bar(self.downloading.format(name=theme), 0)
self.previous_size = 0
if not self.url_get_file('{path}{name}'.format(path=self.themes_url, name=theme),
os.path.join(themes_destination, theme),
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/mainwindow.py 2016-06-04 05:45:00 +0000
@@ -1334,7 +1334,7 @@
self.recent_files_menu.clear()
for file_id, filename in enumerate(recent_files_to_display):
log.debug('Recent file name: {name}'.format(name=filename))
- # TODO: Verify ''.format() before committing
+ # TODO: Should be good
action = create_action(self, '',
text='&{n} {name}'.format(n=file_id + 1,
name=os.path.splitext(os.path.basename(str(filename)))[0]),
=== modified file 'openlp/core/ui/pluginform.py'
--- openlp/core/ui/pluginform.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/pluginform.py 2016-06-04 05:45:00 +0000
@@ -60,7 +60,7 @@
self._clear_details()
self.programatic_change = True
plugin_list_width = 0
- # TODO: See how to use format() with variables
+ # TODO: Tested at home
for plugin in self.plugin_manager.plugins:
item = QtWidgets.QListWidgetItem(self.plugin_list_widget)
# We do this just to make 100% sure the status is an integer as
@@ -68,19 +68,19 @@
plugin.status = int(plugin.status)
# Set the little status text in brackets next to the plugin name.
if plugin.status == PluginStatus.Disabled:
- status_text = translate('OpenLP.PluginForm', '%s (Disabled)')
+ status_text = translate('OpenLP.PluginForm', '{name} (Disabled)')
elif plugin.status == PluginStatus.Active:
- status_text = translate('OpenLP.PluginForm', '%s (Active)')
+ status_text = translate('OpenLP.PluginForm', '{name} (Active)')
else:
# PluginStatus.Inactive
- status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
- item.setText(status_text % plugin.name_strings['singular'])
+ status_text = translate('OpenLP.PluginForm', '{name} (Inactive)')
+ item.setText(status_text.format(name=plugin.name_strings['singular']))
# If the plugin has an icon, set it!
if plugin.icon:
item.setIcon(plugin.icon)
self.plugin_list_widget.addItem(item)
plugin_list_width = max(plugin_list_width, self.fontMetrics().width(
- translate('OpenLP.PluginForm', '%s (Inactive)') % plugin.name_strings['singular']))
+ translate('OpenLP.PluginForm', '{name} (Inactive)').format(name=plugin.name_strings['singular'])))
self.plugin_list_widget.setFixedWidth(plugin_list_width + self.plugin_list_widget.iconSize().width() + 48)
def _clear_details(self):
@@ -137,13 +137,13 @@
self.active_plugin.app_startup()
else:
self.active_plugin.toggle_status(PluginStatus.Inactive)
- # TODO: Verify using format() with a variable
- status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
+ # TODO: Tested at home
+ status_text = translate('OpenLP.PluginForm', '{name} (Inactive)')
if self.active_plugin.status == PluginStatus.Active:
- status_text = translate('OpenLP.PluginForm', '%s (Active)')
+ status_text = translate('OpenLP.PluginForm', '{name} (Active)')
elif self.active_plugin.status == PluginStatus.Inactive:
- status_text = translate('OpenLP.PluginForm', '%s (Inactive)')
+ status_text = translate('OpenLP.PluginForm', '{name} (Inactive)')
elif self.active_plugin.status == PluginStatus.Disabled:
- status_text = translate('OpenLP.PluginForm', '%s (Disabled)')
+ status_text = translate('OpenLP.PluginForm', '{name} (Disabled)')
self.plugin_list_widget.currentItem().setText(
- status_text % self.active_plugin.name_strings['singular'])
+ status_text.format(name=self.active_plugin.name_strings['singular']))
=== modified file 'openlp/core/ui/themeform.py'
--- openlp/core/ui/themeform.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/themeform.py 2016-06-04 05:45:00 +0000
@@ -464,9 +464,9 @@
"""
Background video button pushed.
"""
- # TODO: Check this before converting
- visible_formats = '(%s)' % '; '.join(VIDEO_EXT)
- actual_formats = '(%s)' % ' '.join(VIDEO_EXT)
+ # TODO: Should work
+ visible_formats = '({name})'.format(name='; '.join(VIDEO_EXT))
+ actual_formats = '({name})'.format(name=' '.join(VIDEO_EXT))
video_filter = '{trans} {visible} {actual}'.format(trans=translate('OpenLP', 'Video Files'),
visible=visible_formats, actual=actual_formats)
video_filter = '{video};;{ui} (*.*)'.format(video=video_filter, ui=UiStrings().AllFiles)
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2016-05-20 16:22:06 +0000
+++ openlp/core/ui/thememanager.py 2016-06-04 05:45:00 +0000
@@ -769,7 +769,7 @@
'{count} time(s) by {plugin}'
).format(name=used_count,
plugin=plugin.name)))
- plugin_usage = "%s\n" % plugin_usage
+ plugin_usage = "{text}\n".format(text=plugin_usage)
if plugin_usage:
critical_error_message_box(translate('OpenLP.ThemeManager', 'Unable to delete theme'),
translate('OpenLP.ThemeManager',
=== modified file 'tests/functional/openlp_core_common/test_registryproperties.py'
--- tests/functional/openlp_core_common/test_registryproperties.py 2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_core_common/test_registryproperties.py 2016-06-04 05:45:00 +0000
@@ -75,4 +75,3 @@
# THEN the application should be none
self.assertEqual(self.application, application, 'The application value should match')
-
=== modified file 'tests/functional/openlp_core_lib/test_file_dialog.py'
--- tests/functional/openlp_core_lib/test_file_dialog.py 2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_core_lib/test_file_dialog.py 2016-06-04 05:45:00 +0000
@@ -60,7 +60,7 @@
self.mocked_os.path.exists.side_effect = lambda file_name: file_name in [
'/Valid File', '/url encoded file #1']
self.mocked_ui_strings().FileNotFound = 'File Not Found'
- self.mocked_ui_strings().FileNotFoundMessage = 'File %s not found.\nPlease try selecting it individually.'
+ self.mocked_ui_strings().FileNotFoundMessage = 'File {name} not found.\nPlease try selecting it individually.'
# WHEN: FileDialog.getOpenFileNames is called
result = FileDialog.getOpenFileNames(self.mocked_parent)
=== modified file 'tests/functional/openlp_core_lib/test_projector_pjlink1.py'
--- tests/functional/openlp_core_lib/test_projector_pjlink1.py 2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_core_lib/test_projector_pjlink1.py 2016-06-04 05:45:00 +0000
@@ -29,26 +29,12 @@
from openlp.core.lib.projector.constants import E_PARAMETER, ERROR_STRING, S_OFF, S_STANDBY, S_WARMUP, S_ON, \
S_COOLDOWN, PJLINK_POWR_STATUS
-from tests.functional import patch
+from tests.functional import MagicMock, patch
from tests.resources.projector.data import TEST_PIN, TEST_SALT, TEST_CONNECT_AUTHENTICATE
pjlink_test = PJLink1(name='test', ip='127.0.0.1', pin=TEST_PIN, no_poll=True)
-class DummyTimer(object):
- '''
- Dummy class to fake timers
- '''
- def __init__(self, *args, **kwargs):
- pass
-
- def start(self, *args, **kwargs):
- pass
-
- def stop(self, *args, **kwargs):
- pass
-
-
class TestPJLink(TestCase):
"""
Tests for the PJLink module
@@ -308,8 +294,8 @@
pjlink.other_info = 'ANOTHER TEST'
pjlink.send_queue = True
pjlink.send_busy = True
- pjlink.timer = DummyTimer()
- pjlink.socket_timer = DummyTimer()
+ pjlink.timer = MagicMock()
+ pjlink.socket_timer = MagicMock()
# WHEN: reset_information() is called
with patch.object(pjlink.timer, 'stop') as mock_timer:
=== modified file 'tests/functional/openlp_core_lib/test_projectordb.py'
--- tests/functional/openlp_core_lib/test_projectordb.py 2016-05-31 21:40:13 +0000
+++ tests/functional/openlp_core_lib/test_projectordb.py 2016-06-04 05:45:00 +0000
@@ -284,3 +284,16 @@
self.assertEqual(str(source),
'<ProjectorSource(id="1", code="11", text="First RGB source", projector_id="1")>',
'ProjectorSource.__repr__)_ should have returned a proper representation string')
+
+ def test_get_projector_by_id_none(self):
+ """
+ Test get_projector_by_id returns None if no db entry
+ """
+ # GIVEN: Test object and data
+ projector = self.projector
+
+ # WHEN: DB search for entry not saved
+ results = projector.get_projector_by_id(dbid=123134556409824506)
+
+ # THEN: Verify return was None
+ self.assertEqual(results, None, 'Returned results should have equaled None')
=== modified file 'tests/functional/openlp_plugins/bibles/test_lib.py'
--- tests/functional/openlp_plugins/bibles/test_lib.py 2016-06-01 23:14:58 +0000
+++ tests/functional/openlp_plugins/bibles/test_lib.py 2016-06-04 05:45:00 +0000
@@ -43,6 +43,7 @@
separators = {'sep_r': '\\s*(?:e)\\s*', 'sep_e_default': 'end', 'sep_v_display': 'w', 'sep_l_display': 'r',
'sep_v_default': ':|v|V|verse|verses', 'sep_l': '\\s*(?:r)\\s*', 'sep_l_default': ',|and',
'sep_e': '\\s*(?:t)\\s*', 'sep_v': '\\s*(?:w)\\s*', 'sep_r_display': 'e', 'sep_r_default': '-|to'}
+
def _update_side_effect():
"""
Update the references after mocking out the method
=== modified file 'tests/functional/openlp_plugins/songs/test_opsproimport.py'
--- tests/functional/openlp_plugins/songs/test_opsproimport.py 2016-06-01 23:14:58 +0000
+++ tests/functional/openlp_plugins/songs/test_opsproimport.py 2016-06-04 05:45:00 +0000
@@ -171,4 +171,3 @@
result_data = json.loads(result_file.read().decode())
self.assertListEqual(importer.verses, _get_item(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, _get_item(result_data, 'verse_order_list'))
-
Follow ups