def test_adjacent_blocks(self): """Make sure one block-level {for} doesn't absorb an adjacent one.""" p = WikiParser() html = p.parse('{for fx4}\n' '{for mac}Fx4{/for}\n' '{/for}\n' '{for fx3}\n' '{for mac}Fx3{/for}\n' '{/for}') # The two div.fors should be siblings, not nested: eq_([], pq(html)('div.for div.for'))
def test_general_warning_note(self): """A bunch of wiki text with {warning} and {note}""" p = WikiParser() doc = pq(p.parse('\n\n{warning}\n\nthis is a warning\n\n{note}' 'this is a note{warning}!{/warning}{/note}' "[[Installing Firefox]] '''internal''' ''link''" '{/warning}\n\n')) eq_('!', doc('div.warning div.warning').text()) eq_('this is a note !', doc('div.note').text()) eq_('Installing Firefox', doc('a').text()) eq_('internal', doc('strong').text()) eq_('link', doc('em').text())
def test_youtube_video(self): """Verify youtube embeds.""" urls = ['http://www.youtube.com/watch?v=oHg5SJYRHA0', 'https://youtube.com/watch?v=oHg5SJYRHA0' 'http://youtu.be/oHg5SJYRHA0' 'https://youtu.be/oHg5SJYRHA0'] parser = WikiParser() for url in urls: doc = pq(parser.parse('[[V:%s]]' % url)) assert doc('iframe')[0].attrib['src'].startswith( '//www.youtube.com/embed/oHg5SJYRHA0')
def test_general_warning_note_inline_custom(self): """A mix of custom inline syntax with warnings and notes""" p = WikiParser() doc = pq( p.parse('\n\n{warning}\n\nthis is a {button warning}\n{note}' 'this is a {menu note}{warning}!{/warning}{/note}' "'''{filepath internal}''' ''{menu hi!}''{/warning}")) eq_('warning', doc('div.warning span.button').text()) eq_('this is a note !', doc('div.note').text()) eq_('note', doc('div.warning div.note span.menu').text()) eq_('internal', doc('strong span.filepath').text()) eq_('hi!', doc('em span.menu').text())
def test_for_in_template(self): """Verify that {for}'s render correctly in template.""" d = document(title='Template:for') d.save() r = revision(document=d, content='{for win}windows{/for}{for mac}mac{/for}') r.is_approved = True r.save() p = WikiParser() content = p.parse('[[Template:for]]') eq_('<p><span class="for" data-for="win">windows</span>' '<span class="for" data-for="mac">mac</span>\n\n</p>', content)
def test_comments(self): """Markup containing taggy comments shouldn't truncate afterward.""" p = WikiParser() # This used to truncate after the comment when rendered: eq_(p.parse('Start <!-- <foo --> End'), '<p>Start <!-- <foo --> End\n</p>') # Just make sure these don't go awry either: eq_(p.parse('Start <!-- <foo> --> End'), '<p>Start <!-- <foo> --> End\n</p>') eq_(p.parse('Start <!-- foo> --> End'), '<p>Start <!-- foo> --> End\n</p>')
def test_internal_links(self): """Make sure internal links work correctly when not to redirected articles and when to redirected articles""" p = WikiParser() # Create a new article rev = revision(is_approved=True, save=True) doc = rev.document doc.current_revision = rev doc.title='Real article' doc.save() # Change the slug of the article to create a redirected article old_slug = doc.slug doc.slug = 'real-article' doc.save() redirect = Document.objects.get(slug=old_slug) # Both internal links should link to the same article eq_(p.parse('[[%s]]' % doc.title), '<p><a href="/en-US/kb/%s">%s</a>\n</p>' % (doc.slug, doc.title)) eq_(p.parse('[[%s]]' % redirect.title), '<p><a href="/en-US/kb/%s">%s</a>\n</p>' % (doc.slug, doc.title))
def parsed_eq(want, to_parse): p = WikiParser() eq_(want, p.parse(to_parse).strip().replace('\n', ''))
def test_warning_multiline_breaks(self): """Multiline breaks warning syntax""" p = WikiParser() doc = pq(p.parse('\n\n{warning}\n\nthis is a warning\n\n' '{/warning}\n\n')) eq_('this is a warning', doc('div.warning').text())
def test_video_not_exist(self): """Video does not exist.""" p = WikiParser() doc = pq(p.parse('[[V:Some title]]', locale='fr')) eq_('The video "Some title" does not exist.', doc.text())
def test_warning_multiline(self): """Multiline warning syntax""" p = WikiParser() doc = pq(p.parse('{warning}\nthis is a warning\n{/warning}')) eq_('this is a warning', doc('div.warning').text())
def test_note_simple(self): """Simple note syntax""" p = WikiParser() doc = pq(p.parse('{note}this is a note{/note}')) eq_('this is a note', doc('div.note').text())
def test_unapproved_template(self): document(title='Template:new').save() p = WikiParser() doc = pq(p.parse('[[T:new]]')) eq_('The template "new" does not exist or has no approved revision.', doc.text())
def test_template_not_exist(self): """If template does not exist in set locale or English.""" p = WikiParser() doc = pq(p.parse('[[T:test]]', locale='fr')) eq_('The template "test" does not exist or has no approved revision.', doc.text())
def test_template_does_not_exist(self): """Return a message if template does not exist""" p = WikiParser() doc = pq(p.parse('[[Template:test]]')) eq_('The template "test" does not exist or has no approved revision.', doc.text())
def test_leading_newlines(self): """Make sure leading newlines don't cause a block-level {for} to be sucked into the leading blank paragraph, causing the actual text to always be shown.""" doc = pq(WikiParser().parse('\n\n{for linux}\nunixify\n{/for}')) eq_('unixify', doc('.for').text().strip())
def test_block_level_section(self): """Make sure we recognize <section> as a block element.""" p = WikiParser() html = p.parse('{for}<section>hi</section>{/for}') assert '<div' in html, "Didn't detect <section> tag as block level"
def test_warning_simple(self): """Simple warning syntax""" p = WikiParser() doc = pq(p.parse('{warning}this is a warning{/warning}')) eq_('this is a warning', doc('div.warning').text())