From 9ff655ba0ef8db4abae5d5f3247ffd590c5b5ff6 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Wed, 19 Dec 2018 15:10:09 -0600 Subject: 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 --- tests/settings/manager_test.py | 61 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) (limited to 'tests') 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 """ -- cgit v1.2.3