summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2018-12-19 15:10:09 -0600
committerPatrick Totzke <patricktotzke@gmail.com>2018-12-22 13:35:53 +0100
commit9ff655ba0ef8db4abae5d5f3247ffd590c5b5ff6 (patch)
tree33920ddaf48320a9553d2b7f33c637d3e897919a /tests
parentdbc70433b4b910b1ee61e98958971f0d1bcee9fb (diff)
update tagstring tests for regex behavior
* Fix (invert) existing test * Add new tests based on behavior mentioned previously * test to ensure translations using re.sub work
Diffstat (limited to 'tests')
-rw-r--r--tests/settings/manager_test.py61
1 files changed, 59 insertions, 2 deletions
diff --git a/tests/settings/manager_test.py b/tests/settings/manager_test.py
index 21439403..9b1cff34 100644
--- a/tests/settings/manager_test.py
+++ b/tests/settings/manager_test.py
@@ -5,6 +5,7 @@
"""Test suite for alot.settings.manager module."""
import os
+import re
import tempfile
import textwrap
import unittest
@@ -127,7 +128,7 @@ class TestSettingsManager(unittest.TestCase):
setting = manager.get_notmuch_setting('foo', 'bar')
self.assertIsNone(setting)
- def test_dont_choke_on_regex_special_chars_in_tagstring(self):
+ def test_choke_on_invalid_regex_in_tagstring(self):
tag = 'to**do'
with tempfile.NamedTemporaryFile(mode='w+', delete=False) as f:
f.write(textwrap.dedent("""\
@@ -138,8 +139,64 @@ class TestSettingsManager(unittest.TestCase):
self.addCleanup(os.unlink, f.name)
manager = SettingsManager()
manager.read_config(f.name)
- manager.get_tagstring_representation(tag)
+ with self.assertRaises(re.error):
+ manager.get_tagstring_representation(tag)
+
+ def test_translate_tagstring_prefix(self):
+ # Test for behavior mentioned in bcb2670f56fa251c0f1624822928d664f6455902,
+ # namely that 'foo' does not match 'foobar'
+ tag = 'foobar'
+ tagprefix = 'foo'
+ with tempfile.NamedTemporaryFile(mode='w+', delete=False) as f:
+ f.write(textwrap.dedent("""\
+ [tags]
+ [[{tag}]]
+ translated = matched
+ """.format(tag=tagprefix)))
+ self.addCleanup(os.unlink, f.name)
+ manager = SettingsManager()
+ manager.read_config(f.name)
+ tagrep = manager.get_tagstring_representation(tag)
+ self.assertIs(tagrep['translated'], tag)
+ tagprefixrep = manager.get_tagstring_representation(tagprefix)
+ self.assertEqual(tagprefixrep['translated'], 'matched')
+
+ def test_translate_tagstring_prefix_regex(self):
+ # Test for behavior mentioned in bcb2670f56fa251c0f1624822928d664f6455902,
+ # namely that 'foo.*' does match 'foobar'
+ tagprefixregexp = 'foo.*'
+ with tempfile.NamedTemporaryFile(mode='w+', delete=False) as f:
+ f.write(textwrap.dedent("""\
+ [tags]
+ [[{tag}]]
+ translated = matched
+ """.format(tag=tagprefixregexp)))
+ self.addCleanup(os.unlink, f.name)
+ manager = SettingsManager()
+ manager.read_config(f.name)
+ def matched(t):
+ return manager.get_tagstring_representation(t)['translated'] == 'matched'
+ self.assertTrue(all(matched(t) for t in ['foo', 'foobar', tagprefixregexp]))
+ self.assertFalse(any(matched(t) for t in ['bar', 'barfoobar']))
+
+ def test_translate_regexp(self):
+ # Test for behavior mentioned in 108df3df8571aea2164a5d3fc42655ac2bd06c17
+ # namely that translations themselves can use regex
+ tag = "notmuch::foo"
+ section = "[[notmuch::.*]]"
+ translation = r"'notmuch::(.*)', 'nm:\1'"
+ translated_goal = "nm:foo"
+ with tempfile.NamedTemporaryFile(mode='w+', delete=False) as f:
+ f.write(textwrap.dedent("""\
+ [tags]
+ {section}
+ translation = {translation}
+ """.format(section=section, translation=translation)))
+ self.addCleanup(os.unlink, f.name)
+ manager = SettingsManager()
+ manager.read_config(f.name)
+ self.assertEqual(manager.get_tagstring_representation(tag)['translated'], translated_goal)
class TestSettingsManagerExpandEnvironment(unittest.TestCase):
""" Tests SettingsManager._expand_config_values """