def model_from_data(self, notebook, page, attrib, data): tree = WikiParser().parse(data) element = tree._etree.getroot().find('table') # XXX - should use token interface instead if element is not None: return self.model_from_element(element.attrib, element) else: return TableModel(attrib, [data.strip()], [''])
def runTest(self): def basename(name): if ":" in name: return name.split(":")[-1] else: return name db = sqlite3.connect(':memory:') db.row_factory = sqlite3.Row pi = PagesIndexer(db, None, tests.MockObject()) for i, name, cont in self.PAGES: db.execute( 'INSERT INTO pages(id, name, lowerbasename, sortkey, parent, source_file) VALUES (?, ?, ?, ?, 1, 1)', (i, name, basename(name).lower(), natural_sort_key(name))) ## Test PagesViewInternal methods iview = PagesViewInternal(db) i, pn = iview.resolve_pagename(Path(''), ['foo']) self.assertEqual((i, pn), (3, Path('Foo'))) i, pn = iview.resolve_link(Path('Foo'), HRef.new_from_wiki_link('Bar')) self.assertEqual((i, pn), (2, Path('Bar'))) ## Test the actual indexer pageindexer = tests.MaskedObject(pi, 'connect') indexer = LinksIndexer(db, pageindexer) for i, name, cont in self.PAGES: row = { 'id': i, 'name': name, 'sortkey': natural_sort_key(name), 'is_link_placeholder': False } indexer.on_page_row_inserted(pageindexer, row) ### pageindexer.setObjectAccess('insert_link_placeholder') for i, name, text in self.PAGES: tree = WikiParser().parse(text) row = {'id': i, 'name': name} indexer.on_page_changed(pageindexer, row, tree) indexer.update() links = sorted((r['source'], r['target']) for r in db.execute('SELECT * FROM links')) self.assertEqual(links, [(3, 2), (3, 4)]) ### pageindexer.setObjectAccess('remove_page') for i, name, cont in self.PAGES: row = {'id': i, 'name': name, 'is_link_placeholder': False} indexer.on_page_row_deleted(pageindexer, row) indexer.update() rows = db.execute('SELECT * FROM links').fetchall() self.assertEqual(rows, [])
def testModelFromElement(self): tree = WikiParser().parse(TABLE_WIKI_TEXT) element = tree._etree.getroot().find('table') self.assertIsNotNone(element) model = self.otype.model_from_element(element.attrib, element) builder = OldParseTreeBuilder() # XXX builder.start('zim-tree') self.otype.dump(builder, model) builder.end('zim-tree') tree = ParseTree(builder.close()) #self.assertEquals(list(tree.iter_tokens()), TABLE_TOKENS) -- XXX should work but doesn;t :( self.assertEquals(''.join(WikiDumper().dump(tree)), TABLE_WIKI_TEXT[1:-1])
def testLabelledCheckboxes(self): mydate = '%04i-%02i-%02i' % parse_date('11/12') wanted = [ (t('TODO: test heading with label'), []), (t('A'), []), (t('B'), []), (t('C'), []), (t('FIXME: dus'), []), # this time does not inherit due-date from non-task: (t('TODO: BAR !!!', prio=3), []), (t('Some more tasks !!!', prio=3, tags='home'), [ (t('Foo !', prio=1, tags='home'), []), (t('Bar', prio=3, tags='home'), []), ]), (t('TODO: dus'), []), (t('FIXME: jaja - TODO !! @FIXME', prio=2, tags='FIXME'), []), (t('TODO: dus - list item'), []), (t('FIXME: jaja - TODO !! @FIXME - list item', prio=2, tags='FIXME'), []), (t('A', tags='someday'), []), (t('B', tags='someday'), [ (t('B-1', tags='someday'), []), ]), (t('C', tags='someday'), []), (t('main task', tags='home'), [ (t('do this', open=False, tags='home'), []), (t('Next: do that', tags='home'), []), (t('Next: do something else', tags='home'), []), ]), ] tree = WikiParser().parse(WIKI_TEXT) tb = TokenBuilder() tree.visit(tb) tokens = tb.tokens testTokenStream(tokens) parser = TaskParser(all_checkboxes=False) with tests.LoggingFilter('zim.plugins.tasklist', 'Invalid date format'): tasks = parser.parse(tokens) #~ import pprint; pprint.pprint(tasks) self.assertEqual(tasks, wanted)
def testLatexExport(self): from zim.formats.wiki import Parser as WikiParser from zim.formats.latex import Dumper as LatexDumper folder = self.setUpFolder() folder.file('equation001.tex').write('a + b') # equation002.tex does not exist - check fallback to image wiki = '{{./equation001.png?type=equation}}\n{{./equation002.png?type=equation}}\n' wanted = '\\begin{math}\na + b\n\\end{math}\n\n\\includegraphics[]{./equation002.png}\n\n' linker = tests.MockObject() linker.resolve_source_file = lambda name: folder.file(name) linker.img = lambda name: name tree = WikiParser().parse(wiki) latex = LatexDumper(linker).dump(tree) self.assertEqual(latex, wanted.splitlines(True))
def runTest(self): notebook = self.setUpNotebook() page = notebook.get_page(Path('Page1')) tree = WikiParser().parse('test 123\n') signals = tests.SignalLogger(notebook) op = notebook.store_page_async(page, tree) thread = op._thread while thread.is_alive(): tests.gtk_process_events() tests.gtk_process_events() self.assertFalse(op.error_event.is_set()) text = page.dump('wiki') self.assertEqual(text[-1], 'test 123\n') self.assertEqual(signals['stored-page'], [(page,)]) # post handler happened as well
def testDate(self): text = '''\ [ ] Task <2018-12 [ ] Task >2018-12 ''' wanted = [(t('Task <2018-12', due='2018-12-31'), []), (t('Task >2018-12', start='2018-12-01'), [])] tree = WikiParser().parse(text) tb = TokenBuilder() tree.visit(tb) tokens = tb.tokens testTokenStream(tokens) parser = TaskParser() tasks = parser.parse(tokens) #import pprint; pprint.pprint(tasks) self.assertEqual(tasks, wanted)
def runTest(self): db = sqlite3.connect(':memory:') db.row_factory = sqlite3.Row indexer = TagsIndexer(db, tests.MockObject(), tests.MockObject()) for i, name, text in self.PAGES: tree = WikiParser().parse(text) row = {'id': i, 'name': name} indexer.on_page_changed(None, row, tree) indexer.on_finish_update(None) self.assertTags(db, [('tag1', 1), ('tag2', 2), ('tag3', 3)], [(1, 2), (2, 2), (2, 3), (3, 3)]) for i, name, content in self.PAGES: row = {'id': i, 'name': name} indexer.on_page_row_deleted(None, row) indexer.on_finish_update(None) self.assertTags(db, [], [])
def testLabelledCheckboxes(self): from zim.plugins.tasklist.indexer import TaskParser from zim.parsing import parse_date NO_DATE = '9999' def t(desc, open=True, start=0, due=NO_DATE, prio=0, tags=''): # Generate a task tuple # 0:open, 1:prio, 2:start, 3:due, 4:tags, 5:desc if tags: tags = set(str(tags).split(',')) else: tags = set() return [open, prio, start, due, tags, str(desc)] mydate = '%04i-%02i-%02i' % parse_date('11/12') wanted = [ (t('TODO: test heading with label'), []), (t('A'), []), (t('B'), []), (t('C'), []), (t('FIXME: dus'), []), # this time does not inherit due-date from non-task: (t('TODO: BAR !!!', prio=3), []), (t('Some more tasks !!!', prio=3, tags='home'), [ (t('Foo !', prio=1, tags='home'), []), (t('Bar', prio=3, tags='home'), []), ]), (t('TODO: dus'), []), (t('FIXME: jaja - TODO !! @FIXME', prio=2, tags='FIXME'), []), (t('TODO: dus - list item'), []), (t('FIXME: jaja - TODO !! @FIXME - list item', prio=2, tags='FIXME'), []), (t('A', tags='someday'), []), (t('B', tags='someday'), [ (t('B-1', tags='someday'), []), ]), (t('C', tags='someday'), []), (t('main task', tags='home'), [ (t('do this', open=False, tags='home'), []), (t('Next: do that', tags='home'), []), (t('Next: do something else', tags='home'), []), ]), ] tree = WikiParser().parse(WIKI_TEXT) tb = TokenBuilder() tree.visit(tb) tokens = tb.tokens testTokenStream(tokens) parser = TaskParser(all_checkboxes=False) with tests.LoggingFilter('zim.plugins.tasklist', 'Invalid date format'): tasks = parser.parse(tokens) #~ import pprint; pprint.pprint(tasks) self.assertEqual(tasks, wanted)
def testAllCheckboxes(self): from zim.plugins.tasklist.indexer import TaskParser from zim.parsing import parse_date NO_DATE = '9999' def t(desc, open=True, start=0, due=NO_DATE, prio=0, tags=''): # Generate a task tuple # 0:open, 1:prio, 2:start, 3:due, 4:tags, 5:desc if tags: tags = set(str(tags).split(',')) else: tags = set() return [open, prio, start, due, tags, str(desc)] mydate = '%04i-%02i-%02i' % parse_date('11/12') wanted = [ (t('TODO: test heading with label'), []), (t('A'), []), (t('B'), []), (t('C'), []), (t('D'), []), (t('E'), []), (t('FIXME: dus'), []), (t('Simple'), []), (t('List'), []), (t('List with'), [ (t('Nested items'), []), (t('Some are done', open=False), []), (t('Done but with open child', open=True), [ (t('Others not', open=False), []), (t('FOOOOO'), []), ]), ]), (t('Bar'), []), (t('And then there are @tags', tags='tags'), []), (t('Next: And due dates'), []), (t('Date [d: 11/12]', due=mydate), []), ( t('Date [d: 11/12/2012]', due='2012-12-11'), [ (t('TODO: BAR !!!', prio=3, due='2012-12-11'), []), # due date is inherited ]), (t('Date <2012-03-27 >2012-03-01', due='2012-03-27', start='2012-03-01'), []), (t('Date < wk1213.3', due='2012-03-28'), []), (t('Date < wk1213.3! with punctuation', due='2012-03-28', prio=1), []), (t('Not a date < wk1213.8'), []), (t('Not a date < wk1213foooooo'), []), # this list inherits the @home tag - and inherits prio (t('Some more tasks !!!', prio=3, tags='home'), [ (t('Foo !', prio=1, tags='home'), []), (t('Bar', prio=3, tags='home'), []), ]), (t('TODO: dus'), []), (t('FIXME: jaja - TODO !! @FIXME', prio=2, tags='FIXME'), []), (t('TODO: dus - list item'), []), (t('FIXME: jaja - TODO !! @FIXME - list item', prio=2, tags='FIXME'), []), (t('Sub item bullets'), []), (t('Sub item numbered'), []), (t('Main @tag1 @tag2 !', prio=1, tags='tag1,tag2'), [ (t('Sub1', prio=1, open=False, tags='tag1,tag2'), []), (t('Sub2 @tag3 !!!!', prio=4, tags='tag1,tag2,tag3'), [ (t('Sub2-1', prio=4, open=False, tags='tag1,tag2,tag3'), []), (t('Sub2-2 @tag4', prio=4, open=False, tags='tag1,tag2,tag3,tag4'), []), (t('Sub2-3', prio=4, tags='tag1,tag2,tag3'), []), ]), (t('Sub3', prio=1, tags='tag1,tag2'), []), ]), (t('A', tags='someday'), []), (t('B', tags='someday'), [ (t('B-1', tags='someday'), []), ]), (t('C', tags='someday'), []), (t('main task', tags='home'), [ (t('do this', open=False, tags='home'), []), (t('Next: do that', tags='home'), []), (t('Next: do something else', tags='home'), []), ]), (t('Closed parent task', open=True), [ (t('With open child'), []), (t('Must be open as well to show up in list'), []), ]), (t('Closed parent task', open=False), [ (t('With closed children', open=False), []), (t('Should not', open=False), []), ]), ] tree = WikiParser().parse(WIKI_TEXT) tb = TokenBuilder() tree.visit(tb) tokens = tb.tokens testTokenStream(tokens) parser = TaskParser() with tests.LoggingFilter('zim.plugins.tasklist', 'Invalid date format'): tasks = parser.parse(tokens) #~ import pprint; pprint.pprint(tasks) self.assertEqual(tasks, wanted)
def parseAndDump(self, text): tree = WikiParser().parse(text) self.assertEquals(list(tree.iter_tokens()), TABLE_TOKENS)