diff --git a/taskwiki/main.py b/taskwiki/main.py index 2a8716f24..21b1cece7 100644 --- a/taskwiki/main.py +++ b/taskwiki/main.py @@ -299,6 +299,14 @@ def task_info_or_vimwiki_follow_link(): ']]' in line, column >= line.find('[['), column <= line.find(']]') + 1 + ]) or all([ + '[' in line, + '](' in line, + ')' in line, + line.find('[') < line.find(']('), + line.find('](') < line.find(')'), + column >= line.find('['), + column <= line.find(')') + 1 ]) if inside_vimwiki_link: diff --git a/taskwiki/regexp.py b/taskwiki/regexp.py index 5d319b583..a18efac9f 100644 --- a/taskwiki/regexp.py +++ b/taskwiki/regexp.py @@ -46,8 +46,12 @@ re.compile( r'^' # Starts at the begging of the line r'(?P[=]+)' # Heading begging - r'(?P[^=\|\[\{]*)' # Name of the viewport, all before the | sign - # Cannot include '[', '=', '|', and '{' + + r'(?P([^=\|\[\{]*)|(\s*\{\{.*}}\s*)|(.*\[\[.*]].*))' + # Name of the viewport, either with + # a vimwiki link or without + # Cannot include '=' + r'\|' # Bar r'(?!\|)' # (But not two, that would be a preset) r'(?P[^=\|]*?)' # Filter @@ -68,8 +72,8 @@ re.compile( r'^' # Starts at the begging of the line r'(?P[#]+)' # Heading begging - r'(?P[^#\|\[\{]*)' # Name of the viewport, all before the | sign - # Cannot include '[', '#', '|', and '{' + r'(?P[^#\|]*)' # Name of the viewport, all before the | sign + # Cannot include '#' r'\|' # Bar r'(?!\|)' # (But not two, that would be a preset) r'(?P[^#\|]*?)' # Filter diff --git a/tests/base.py b/tests/base.py index 3eccdf3a2..3b57df860 100644 --- a/tests/base.py +++ b/tests/base.py @@ -72,7 +72,7 @@ def configure_global_variables(self): self.command('let g:taskwiki_taskrc_location="{0}"'.format(self.taskrc_path)) self.command('let g:vimwiki_list = [{"syntax": "%s", "ext": ".txt","path": "%s"}]' % (self.markup, self.dir)) - def setup(self): + def setup_method(self): assert not self.client self.generate_data() @@ -89,7 +89,7 @@ def setup(self): self.filepath = os.path.join(self.dir, 'testwiki.txt') self.client.edit(self.filepath) - def teardown(self): + def teardown_method(self): if not self.client: return @@ -213,8 +213,8 @@ def test_execute(self): success = True break else: - self.teardown() - self.setup() + self.teardown_method() + self.setup_method() if not success: self.check_sanity(soft=False) @@ -242,9 +242,9 @@ class MultiSyntaxIntegrationTest(IntegrationTest): markup = None - def setup(self): + def setup_method(self): if self.markup: - super(MultiSyntaxIntegrationTest, self).setup() + super(MultiSyntaxIntegrationTest, self).setup_method() else: pass diff --git a/tests/conftest.py b/tests/conftest.py index 41a7b1a03..036fb1629 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -37,7 +37,7 @@ def header_expand(string): inclusive. """ for header_level, format_header in format_header_dict.items(): - regex = header_level + '\((.*?)\)' + regex = header_level + r'\((.*)\)' string = re.sub(regex, lambda match: format_header % match.group(1), string) diff --git a/tests/test_preset_parsing.py b/tests/test_preset_parsing.py index 5aeac425b..40df50c97 100644 --- a/tests/test_preset_parsing.py +++ b/tests/test_preset_parsing.py @@ -4,7 +4,7 @@ class TestParsingPresetHeader(object): - def setup(self): + def setup_method(self): self.mockvim = MockVim() self.cache = MockCache() @@ -12,7 +12,7 @@ def setup(self): from taskwiki.preset import PresetHeader self.PresetHeader = PresetHeader - def teardown(self): + def teardown_method(self): self.mockvim.reset() self.cache.reset() diff --git a/tests/test_selected.py b/tests/test_selected.py index 6c19816c0..f7bc56c98 100644 --- a/tests/test_selected.py +++ b/tests/test_selected.py @@ -1,7 +1,6 @@ import re from datetime import datetime -from tasklib import local_zone from tests.base import IntegrationTest @@ -578,7 +577,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -621,7 +620,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -659,7 +658,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -696,7 +695,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -744,7 +743,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -782,7 +781,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -820,7 +819,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -899,7 +898,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "pending" @@ -1056,8 +1055,7 @@ class TestModVisibleAction(IntegrationTest): ] def execute(self): - today = local_zone.localize( - datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)) + today = datetime.now().replace(hour=0,minute=0,second=0,microsecond=0).astimezone() self.command( "TaskWikiMod due:today", @@ -1164,7 +1162,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "completed" assert self.tasks[1]['status'] == "pending" @@ -1231,7 +1229,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "pending" assert self.tasks[1]['status'] == "completed" @@ -1268,7 +1266,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "completed" assert self.tasks[1]['status'] == "completed" @@ -1315,7 +1313,7 @@ def execute(self): for task in self.tasks: task.refresh() - now = local_zone.localize(datetime.now()) + now = datetime.now().astimezone() assert self.tasks[0]['status'] == "completed" assert self.tasks[1]['status'] == "completed" diff --git a/tests/test_splits.py b/tests/test_splits.py index 13750b2df..05b0f96c4 100644 --- a/tests/test_splits.py +++ b/tests/test_splits.py @@ -1,16 +1,15 @@ import re from tests.base import IntegrationTest -from tasklib import local_zone from datetime import datetime def current_year(): - return local_zone.localize(datetime.now()).year + return datetime.now().astimezone().year def current_month(): - current_month_number = local_zone.localize(datetime.now()).month + current_month_number = datetime.now().astimezone().month months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] diff --git a/tests/test_viewport_parsing.py b/tests/test_viewport_parsing.py index 925de9a25..d44b53c95 100644 --- a/tests/test_viewport_parsing.py +++ b/tests/test_viewport_parsing.py @@ -7,7 +7,7 @@ class TestParsingVimwikiTask(object): - def setup(self): + def setup_method(self): self.mockvim = MockVim() self.cache = MockCache() @@ -19,7 +19,7 @@ def setup(self): from taskwiki.viewport import ViewPort self.ViewPort = ViewPort - def teardown(self): + def teardown_method(self): self.mockvim.reset() self.cache.reset() @@ -159,3 +159,75 @@ def test_override_default_virtual_tags_positive_without_forcing(self, test_synta assert port.defaults == {'project':'Home'} assert port.sort == DEFAULT_SORT_ORDER assert port.tw == 'default' + + def test_vimwiki_link_as_header_name_simple(self, test_syntax): + if test_syntax[0] == 'default': + example_viewport = "HEADER2([[Test|https://www.vim.org]] | project:Home)" + elif test_syntax[0] == 'markdown': + example_viewport = "HEADER2([Test](https://www.vim.org) | project:Home)" + + port = self.process_viewport(example_viewport, test_syntax) + + assert port.taskfilter == list(DEFAULT_VIEWPORT_VIRTUAL_TAGS) + ["(", "project:Home", ")"] + + if test_syntax[0] == 'default': + assert port.name == "[[Test|https://www.vim.org]]" + elif test_syntax[0] == 'markdown': + assert port.name == "[Test](https://www.vim.org)" + + assert port.defaults == {'project':'Home'} + assert port.sort == DEFAULT_SORT_ORDER + assert port.tw == 'default' + + def test_vimwiki_link_as_header_name_with_defaults(self, test_syntax): + if test_syntax[0] == 'default': + example_viewport = "HEADER2([[Test|https://www.vim.org]] | project:Home)" + elif test_syntax[0] == 'markdown': + example_viewport = "HEADER2([Test](https://www.vim.org) | project:Home)" + + port = self.process_viewport(example_viewport, test_syntax) + + assert port.taskfilter == list(DEFAULT_VIEWPORT_VIRTUAL_TAGS) + ["(", "project:Home", ")"] + if test_syntax[0] == 'default': + assert port.name == "[[Test|https://www.vim.org]]" + elif test_syntax[0] == 'markdown': + assert port.name == "[Test](https://www.vim.org)" + assert port.defaults == {'project':'Home'} + assert port.sort == DEFAULT_SORT_ORDER + assert port.tw == 'default' + + def test_vimwiki_link_in_header_name_simple(self, test_syntax): + if test_syntax[0] == 'default': + example_viewport = "HEADER2(Link to [[this|https://www.vim.org]] | project:Home)" + elif test_syntax[0] == 'markdown': + example_viewport = "HEADER2(Link to [this](https://www.vim.org) | project:Home)" + + port = self.process_viewport(example_viewport, test_syntax) + + assert port.taskfilter == list(DEFAULT_VIEWPORT_VIRTUAL_TAGS) + ["(", "project:Home", ")"] + + if test_syntax[0] == 'default': + assert port.name == "Link to [[this|https://www.vim.org]]" + elif test_syntax[0] == 'markdown': + assert port.name == "Link to [this](https://www.vim.org)" + + assert port.defaults == {'project':'Home'} + assert port.sort == DEFAULT_SORT_ORDER + assert port.tw == 'default' + + def test_vimwiki_link_in_header_name_with_defaults(self, test_syntax): + if test_syntax[0] == 'default': + example_viewport = "HEADER2(Link to [[this|https://www.vim.org]] | project:Home)" + elif test_syntax[0] == 'markdown': + example_viewport = "HEADER2(Link to [this](https://www.vim.org) | project:Home)" + + port = self.process_viewport(example_viewport, test_syntax) + + assert port.taskfilter == list(DEFAULT_VIEWPORT_VIRTUAL_TAGS) + ["(", "project:Home", ")"] + if test_syntax[0] == 'default': + assert port.name == "Link to [[this|https://www.vim.org]]" + elif test_syntax[0] == 'markdown': + assert port.name == "Link to [this](https://www.vim.org)" + assert port.defaults == {'project':'Home'} + assert port.sort == DEFAULT_SORT_ORDER + assert port.tw == 'default' diff --git a/tests/test_vwtask.py b/tests/test_vwtask.py index 8d23e1dd8..f79e19b77 100644 --- a/tests/test_vwtask.py +++ b/tests/test_vwtask.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from datetime import datetime -from tasklib import local_zone from tests.base import IntegrationTest, MultipleSourceTest @@ -292,7 +291,7 @@ def execute(self): task = self.tw.tasks.pending()[0] assert task['description'] == 'This is a test task' assert task['status'] == 'pending' - assert task['due'] == local_zone.localize(due) + assert task['due'] == due.astimezone() class TestSimpleTaskWithFlawedDueDatetimeCreation(IntegrationTest): @@ -338,7 +337,7 @@ def execute(self): task = self.tw.tasks.pending()[0] assert task['description'] == 'This is a test task' assert task['status'] == 'pending' - assert task['due'] == local_zone.localize(due) + assert task['due'] == due.astimezone() class TestSimpleTaskWithDueDatetimeModification(IntegrationTest): @@ -373,7 +372,7 @@ def execute(self): task = self.tw.tasks.pending()[0] assert task['description'] == 'This is a test task' assert task['status'] == 'pending' - assert task['due'] == local_zone.localize(due) + assert task['due'] == due.astimezone() class TestSimpleTaskWithPriorityCreation(IntegrationTest): diff --git a/tests/test_vwtask_parsing.py b/tests/test_vwtask_parsing.py index 704dfb8b9..f602b60bb 100644 --- a/tests/test_vwtask_parsing.py +++ b/tests/test_vwtask_parsing.py @@ -3,17 +3,15 @@ from tests.base import MockVim, MockCache import sys -from tasklib import local_zone - class TestParsingVimwikiTask(object): - def setup(self): + def setup_method(self): self.mockvim = MockVim() self.cache = MockCache() sys.modules['vim'] = self.mockvim from taskwiki.vwtask import VimwikiTask self.VimwikiTask = VimwikiTask - def teardown(self): + def teardown_method(self): self.cache.reset() def test_simple(self): @@ -41,7 +39,7 @@ def test_due_full(self): vwtask = self.VimwikiTask.from_line(self.cache, 0) assert vwtask['description'] == u"Random task" - assert vwtask['due'] == local_zone.localize(datetime(2015,8,8,15,15)) + assert vwtask['due'] == datetime(2015,8,8,15,15).astimezone() assert vwtask['uuid'] == None assert vwtask['priority'] == None assert vwtask['indent'] == '' @@ -51,7 +49,7 @@ def test_due_short(self): vwtask = self.VimwikiTask.from_line(self.cache, 0) assert vwtask['description'] == u"Random task" - assert vwtask['due'] == local_zone.localize(datetime(2015,8,8,0,0)) + assert vwtask['due'] == datetime(2015,8,8,0,0).astimezone() assert vwtask['uuid'] == None assert vwtask['priority'] == None assert vwtask['indent'] == '' @@ -87,7 +85,7 @@ def test_priority_and_due(self): assert vwtask['description'] == u"Due today" assert vwtask['priority'] == 'H' - assert vwtask['due'] == local_zone.localize(datetime(2015,8,8)) + assert vwtask['due'] == datetime(2015,8,8).astimezone() assert vwtask['uuid'] == None def test_added_modstring(self):