summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailman/bin/tests/test_master.py5
-rw-r--r--src/mailman/testing/nose.py2
-rw-r--r--src/mailman/utilities/modules.py2
-rw-r--r--src/mailman/utilities/string.py8
-rw-r--r--src/mailman/utilities/tests/test_import.py10
-rw-r--r--src/mailman/utilities/tests/test_string.py36
6 files changed, 53 insertions, 10 deletions
diff --git a/src/mailman/bin/tests/test_master.py b/src/mailman/bin/tests/test_master.py
index 371f48502..d0c3279ac 100644
--- a/src/mailman/bin/tests/test_master.py
+++ b/src/mailman/bin/tests/test_master.py
@@ -27,6 +27,7 @@ import errno
import tempfile
import unittest
+from datetime import timedelta
from flufl.lock import Lock
from mailman.bin import master
@@ -60,8 +61,8 @@ class TestMasterLock(unittest.TestCase):
state, lock = master.master_state(self.lock_file)
self.assertEqual(state, master.WatcherState.none)
# Acquire the lock as if another process had already started the
- # master.
- my_lock.lock()
+ # master. Use a timeout to avoid this test deadlocking.
+ my_lock.lock(timedelta(seconds=60))
try:
state, lock = master.master_state(self.lock_file)
finally:
diff --git a/src/mailman/testing/nose.py b/src/mailman/testing/nose.py
index 1e96e643f..e3ce9c3c7 100644
--- a/src/mailman/testing/nose.py
+++ b/src/mailman/testing/nose.py
@@ -43,7 +43,7 @@ class NosePlugin(Plugin):
configSection = 'mailman'
def __init__(self):
- super(NosePlugin, self).__init__()
+ super().__init__()
self.patterns = []
self.stderr = False
def set_stderr(ignore):
diff --git a/src/mailman/utilities/modules.py b/src/mailman/utilities/modules.py
index 7fb695afe..35b9a752b 100644
--- a/src/mailman/utilities/modules.py
+++ b/src/mailman/utilities/modules.py
@@ -78,7 +78,7 @@ def scan_module(module, interface):
for name in module.__all__:
component = getattr(module, name, missing)
assert component is not missing, (
- '%s has bad __all__: %s' % (module, name))
+ '%s has bad __all__: %s' % (module, name)) # pragma: no cover
if interface.implementedBy(component):
yield component
diff --git a/src/mailman/utilities/string.py b/src/mailman/utilities/string.py
index 478fd6574..4e7e5c0ad 100644
--- a/src/mailman/utilities/string.py
+++ b/src/mailman/utilities/string.py
@@ -117,8 +117,10 @@ def wrap(text, column=70, honor_leading_ws=True):
# This line does not constitute a paragraph break.
paragraph.append(line)
# We've consumed all the lines in the original text. Transfer the last
- # paragraph we were collecting to the full set of paragraphs.
- paragraphs.append(EMPTYSTRING.join(paragraph))
+ # paragraph we were collecting to the full set of paragraphs, but only if
+ # it's not empty.
+ if len(paragraph) > 0:
+ paragraphs.append(EMPTYSTRING.join(paragraph))
# Now iterate through all paragraphs, wrapping as necessary.
wrapped_paragraphs = []
# The dedented wrapper.
@@ -150,7 +152,7 @@ def wrap(text, column=70, honor_leading_ws=True):
# dedented. The leading whitespace on the first line of the
# original text will be used as the indentation for all lines
# in the wrapped text.
- for i, ch in enumerate(paragraph_text):
+ for i, ch in enumerate(paragraph_text): # pragma: no branch
if ch not in whitespace:
break
leading_ws = paragraph[:i]
diff --git a/src/mailman/utilities/tests/test_import.py b/src/mailman/utilities/tests/test_import.py
index e687e8a00..d83e42bc8 100644
--- a/src/mailman/utilities/tests/test_import.py
+++ b/src/mailman/utilities/tests/test_import.py
@@ -52,7 +52,8 @@ from mailman.interfaces.usermanager import IUserManager
from mailman.testing.helpers import LogFileMark
from mailman.testing.layers import ConfigLayer
from mailman.utilities.filesystem import makedirs
-from mailman.utilities.importer import import_config_pck, Import21Error
+from mailman.utilities.importer import (
+ Import21Error, check_language_code, import_config_pck)
from mailman.utilities.string import expand
from pickle import load
from pkg_resources import resource_filename
@@ -294,7 +295,7 @@ class TestBasicImport(unittest.TestCase):
except Import21Error as error:
# Check the message.
self.assertIn('[language.xx_XX]', str(error))
- else: # pragma: no cover
+ else:
self.fail('Import21Error was not raised')
def test_encode_ascii_prefixes(self):
@@ -865,7 +866,7 @@ class TestRosterImport(unittest.TestCase):
import_config_pck(self._mlist, self._pckdict)
except Import21Error as error:
self.assertIn('[language.xx_XX]', str(error))
- else: # pragma: no cover
+ else:
self.fail('Import21Error was not raised')
def test_username(self):
@@ -1136,3 +1137,6 @@ class TestPreferencesImport(unittest.TestCase):
receive_list_copy=False,
delivery_mode=DeliveryMode.plaintext_digests,
))
+
+ def test_language_code_none(self):
+ self.assertIsNone(check_language_code(None))
diff --git a/src/mailman/utilities/tests/test_string.py b/src/mailman/utilities/tests/test_string.py
new file mode 100644
index 000000000..dbbc28754
--- /dev/null
+++ b/src/mailman/utilities/tests/test_string.py
@@ -0,0 +1,36 @@
+# Copyright (C) 2015 by the Free Software Foundation, Inc.
+#
+# This file is part of GNU Mailman.
+#
+# GNU Mailman 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, either version 3 of the License, or (at your option)
+# any later version.
+#
+# GNU Mailman 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
+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
+
+"""Test the string utilities."""
+
+__all__ = [
+ 'TestString',
+ ]
+
+
+import unittest
+
+from mailman.utilities import string
+
+
+
+class TestString(unittest.TestCase):
+ def test_oneline_bogus_charset(self):
+ self.assertEqual(string.oneline('foo', 'bogus'), 'foo')
+
+ def test_wrap_blank_paragraph(self):
+ self.assertEqual(string.wrap('\n\n'), '\n\n')