Barry Warsaw pushed to branch master at mailman / Mailman

Commits:
1602cecd by Barry Warsaw at 2015-12-29T17:23:54Z
Coverage improvements.

 * Boost coverage.
 * Don't report coverage on the test modules.
 * In one test, when acquiring the lock, set a timeout.  Hopefully this will
   eliminate the occasional test deadlock.
 * Fix a buglet in wrap()

- - - - -
8e69b848 by Barry Warsaw at 2015-12-29T17:56:10Z
More coverage.

- - - - -


11 changed files:

- coverage.ini
- src/mailman/app/tests/test_lifecycle.py
- src/mailman/bin/tests/test_master.py
- src/mailman/model/tests/test_uid.py
- src/mailman/model/tests/test_workflow.py
- src/mailman/model/uid.py
- src/mailman/testing/nose.py
- src/mailman/utilities/modules.py
- src/mailman/utilities/string.py
- src/mailman/utilities/tests/test_import.py
- + src/mailman/utilities/tests/test_string.py


Changes:

=====================================
coverage.ini
=====================================
--- a/coverage.ini
+++ b/coverage.ini
@@ -5,6 +5,7 @@ omit =
      setup*
      */showme.py
     .tox/coverage/lib/python3.5/site-packages/*
+    */test_*.py
 
 [paths]
 source =


=====================================
src/mailman/app/tests/test_lifecycle.py
=====================================
--- a/src/mailman/app/tests/test_lifecycle.py
+++ b/src/mailman/app/tests/test_lifecycle.py
@@ -28,8 +28,10 @@ import unittest
 
 from mailman.interfaces.address import InvalidEmailAddressError
 from mailman.interfaces.domain import BadDomainSpecificationError
+from mailman.interfaces.listmanager import IListManager
 from mailman.app.lifecycle import create_list, remove_list
 from mailman.testing.layers import ConfigLayer
+from zope.component import getUtility
 
 
 
@@ -55,3 +57,16 @@ class TestLifecycle(unittest.TestCase):
         self.addCleanup(shutil.rmtree, mlist.data_path)
         self.assertRaises(OSError, remove_list, mlist)
         os.chmod(mlist.data_path, 0o777)
+
+    def test_create_no_such_style(self):
+        mlist = create_list('a...@example.com', style_name='bogus')
+        # The MailmanList._preferred_language column isn't set so there's no
+        # valid mapping to an ILanguage.  Therefore this call will produce a
+        # KeyError.
+        self.assertRaises(KeyError, getattr, mlist, 'preferred_language')
+
+    def test_remove_list_without_data_path(self):
+        mlist = create_list('a...@example.com')
+        shutil.rmtree(mlist.data_path)
+        remove_list(mlist)
+        self.assertIsNone(getUtility(IListManager).get('a...@example.com'))


=====================================
src/mailman/bin/tests/test_master.py
=====================================
--- 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:


=====================================
src/mailman/model/tests/test_uid.py
=====================================
--- a/src/mailman/model/tests/test_uid.py
+++ b/src/mailman/model/tests/test_uid.py
@@ -85,3 +85,9 @@ class TestUID(unittest.TestCase):
         # And all the users still exist.
         non_orphans = set(user.user_id for user in manager.users)
         self.assertEqual(uids, non_orphans)
+
+    def test_repr(self):
+        uid = UID(uuid.UUID(int=1))
+        self.assertTrue(repr(uid).startswith(
+            '<UID 00000000-0000-0000-0000-000000000001 at '))
+        self.assertTrue(repr(uid).endswith('>'))


=====================================
src/mailman/model/tests/test_workflow.py
=====================================
--- a/src/mailman/model/tests/test_workflow.py
+++ b/src/mailman/model/tests/test_workflow.py
@@ -146,3 +146,7 @@ class TestWorkflow(unittest.TestCase):
         self.assertEqual(state.step, 'three')
         state = self._manager.restore('bee', 'nekot')
         self.assertEqual(state.step, 'four')
+
+    def test_discard_missing_workflow(self):
+        self._manager.discard('bogus-name', 'bogus-token')
+        self.assertEqual(self._manager.count, 0)


=====================================
src/mailman/model/uid.py
=====================================
--- a/src/mailman/model/uid.py
+++ b/src/mailman/model/uid.py
@@ -50,12 +50,12 @@ class UID(Model):
 
     @dbconnection
     def __init__(self, store, uid):
-        super(UID, self).__init__()
+        super().__init__()
         self.uid = uid
         store.add(self)
 
     def __repr__(self):
-        return '<UID {0} at {1}>'.format(self.uid, id(self))
+        return '<UID {} at {}>'.format(self.uid, id(self))
 
     @staticmethod
     @dbconnection


=====================================
src/mailman/testing/nose.py
=====================================
--- 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):


=====================================
src/mailman/utilities/modules.py
=====================================
--- 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
 


=====================================
src/mailman/utilities/string.py
=====================================
--- 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]


=====================================
src/mailman/utilities/tests/test_import.py
=====================================
--- 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))


=====================================
src/mailman/utilities/tests/test_string.py
=====================================
--- /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')



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/39fd2905cc34221ca2907f14f3f018190a3f62c5...8e69b848270da6ba4852f8c6dfdeeed8124ab024
_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to