class TestLazyWikiImageTags(TestCase): def setUp(self): self.d, self.r, self.p = doc_rev_parser("Test content", "Installing Firefox") self.img = ImageFactory(title="test.jpg") def tearDown(self): self.img.delete() def test_simple(self): """Simple image tag markup.""" doc = pq(self.p.parse("[[Image:test.jpg]]", locale=settings.WIKI_DEFAULT_LANGUAGE)) img = doc("img") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("data-original-src")) assert "placeholder.gif" in img.attr("src")
class TestLazyWikiImageTags(TestCase): def setUp(self): self.d, self.r, self.p = doc_rev_parser( 'Test content', 'Installing Firefox') self.img = ImageFactory(title='test.jpg') def tearDown(self): self.img.delete() def test_simple(self): """Simple image tag markup.""" doc = pq(self.p.parse('[[Image:test.jpg]]', locale=settings.WIKI_DEFAULT_LANGUAGE)) img = doc('img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('data-original-src')) assert 'placeholder.gif' in img.attr('src')
class TestLazyWikiImageTags(TestCase): def setUp(self): self.d, self.r, self.p = doc_rev_parser('Test content', 'Installing Firefox') self.img = ImageFactory(title='test.jpg') def tearDown(self): self.img.delete() def test_simple(self): """Simple image tag markup.""" doc = pq( self.p.parse('[[Image:test.jpg]]', locale=settings.WIKI_DEFAULT_LANGUAGE)) img = doc('img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('data-original-src')) assert 'placeholder.gif' in img.attr('src')
class TestWikiImageTags(TestCase): def setUp(self): self.d, self.r, self.p = doc_rev_parser("Test content", "Installing Firefox") self.img = ImageFactory(title="test.jpg") def tearDown(self): self.img.delete() def test_empty(self): """Empty image tag markup does not change.""" img = pq_img(self.p, "[[Image:]]", "p") eq_('The image "" does not exist.', img.text()) def test_simple(self): """Simple image tag markup.""" img = pq_img(self.p, "[[Image:test.jpg]]", "img") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) def test_simple_fallback(self): """Fallback to English if current locale doesn't have the image.""" img = pq_img(self.p, "[[Image:test.jpg]]", selector="img", locale="ja") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) def test_full_fallback(self): """Find current locale's image, not the English one.""" # first, pretend there is no English version self.img.locale = "ja" self.img.save() img = pq_img(self.p, "[[Image:test.jpg]]", selector="img", locale="ja") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) # then, create an English version en_img = ImageFactory(title="test.jpg", locale="en-US") # Ensure they're not equal self.assertNotEqual(en_img.file.url, self.img.file.url) # make sure there is no fallback img = pq_img(self.p, "[[Image:test.jpg]]", selector="img", locale="ja") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) # now delete the English version self.img.delete() self.img = en_img # don't break tearDown img = pq_img(self.p, "[[Image:test.jpg]]", selector="img", locale="ja") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) def test_caption(self): """Give the image a caption.""" self.img.title = "img test.jpg" self.img.save() img_div = pq_img(self.p, "[[Image:img test.jpg|frame|my caption]]", "div.img") img = img_div("img") caption = img_div.text() eq_(self.img.file.url, img.attr("src")) eq_("my caption", img.attr("alt")) eq_("my caption", caption) def test_page_link(self): """Link to a wiki page.""" img_a = pq_img(self.p, "[[Image:test.jpg|page=Installing Firefox]]", "a") img = img_a("img") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) eq_("/en-US/kb/installing-firefox", img_a.attr("href")) def test_page_link_edit(self): """Link to a nonexistent wiki page.""" img_a = pq_img(self.p, "[[Image:test.jpg|page=Article List]]", "a") img = img_a("img") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) assert img_a.hasClass("new") eq_("/en-US/kb/new?title=Article+List", img_a.attr("href")) def test_page_link_caption(self): """Link to a wiki page with caption and frame.""" img_div = pq_img(self.p, "[[Image:test.jpg|frame|page=A page|my caption]]", "div.img") img_a = img_div("a") img = img_a("img") caption = img_div.text() eq_("my caption", img.attr("alt")) eq_("my caption", caption) eq_(self.img.file.url, img.attr("src")) assert img_a.hasClass("new") eq_("/en-US/kb/new?title=A+page", img_a.attr("href")) def test_link(self): """Link to an external page.""" img_a = pq_img(self.p, "[[Image:test.jpg|link=http://test.com]]", "a") img = img_a("img") eq_("test.jpg", img.attr("alt")) eq_(self.img.file.url, img.attr("src")) eq_("http://test.com", img_a.attr("href")) def test_link_caption(self): """Link to an external page with caption.""" img_div = pq_img(self.p, "[[Image:test.jpg|link=http://ab.us|frame|caption]]", "div.img") img = img_div("img") img_a = img_div("a") eq_(self.img.file.url, img.attr("src")) eq_("http://ab.us", img_a.attr("href")) def test_link_align(self): """Link with align.""" img_div = pq_img(self.p, "[[Image:test.jpg|link=http://site.com|align=left]]", "div.img") eq_("img align-left", img_div.attr("class")) def test_link_align_invalid(self): """Link with invalid align.""" img = pq_img(self.p, "[[Image:test.jpg|link=http://example.ro|align=inv]]") assert "frameless" in img.attr("class") def test_link_valign(self): """Link with valign.""" img = pq_img(self.p, "[[Image:test.jpg|link=http://example.com|valign=top]]") eq_("vertical-align: top;", img.attr("style")) def test_link_valign_invalid(self): """Link with invalid valign.""" img = pq_img(self.p, "[[Image:test.jpg|link=http://example.com|valign=off]]") eq_(None, img.attr("style")) def test_alt(self): """Image alt attribute is overriden but caption is not.""" img_div = pq_img(self.p, "[[Image:test.jpg|alt=my alt|frame|my caption]]", "div.img") img = img_div("img") caption = img_div.text() eq_("my alt", img.attr("alt")) eq_("my caption", caption) def test_alt_empty(self): """Image alt attribute can be empty.""" img = pq_img(self.p, "[[Image:test.jpg|alt=|my caption]]") eq_("", img.attr("alt")) def test_alt_unsafe(self): """Potentially unsafe alt content is escaped.""" unsafe_vals = ( ( 'an"<script>alert()</script>', "an"&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;", ), ( "an'<script>alert()</script>", "an'&lt;script&gt;alert()&lt;/script&gt;", ), ("single'\"double", "single'"double"), ) for alt_sent, alt_expected in unsafe_vals: img = pq_img(self.p, "[[Image:test.jpg|alt=" + alt_sent + "]]") is_true = str(img).startswith('<img alt="' + alt_expected + '"') assert is_true, 'Expected "%s", sent "%s"' % (alt_expected, alt_sent) def test_width(self): """Image width attribute set.""" img = pq_img(self.p, "[[Image:test.jpg|width=10]]") eq_("10", img.attr("width")) def test_width_invalid(self): """Invalid image width attribute set to auto.""" img = pq_img(self.p, "[[Image:test.jpg|width=invalid]]") eq_(None, img.attr("width")) def test_height(self): """Image height attribute set.""" img = pq_img(self.p, "[[Image:test.jpg|height=10]]") eq_("10", img.attr("height")) def test_height_invalid(self): """Invalid image height attribute set to auto.""" img = pq_img(self.p, "[[Image:test.jpg|height=invalid]]") eq_(None, img.attr("height")) def test_frame(self): """Image has frame if specified.""" img_div = pq_img(self.p, "[[Image:test.jpg|frame|caption]]", "div.img") assert not img_div("img").hasClass("frameless") eq_("caption", img_div("img").attr("alt")) eq_("caption", img_div.text()) eq_(self.img.file.url, img_div("img").attr("src")) def test_frameless_link(self): """Image has frameless class and link if specified.""" img_a = pq_img(self.p, "[[Image:test.jpg|page=Installing Firefox]]", "a") img = img_a("img") assert "frameless" in img.attr("class") eq_("/en-US/kb/installing-firefox", img_a.attr("href"))
class TestWikiImageTags(TestCase): def setUp(self): self.d, self.r, self.p = doc_rev_parser( 'Test content', 'Installing Firefox') self.img = ImageFactory(title='test.jpg') def tearDown(self): self.img.delete() def test_empty(self): """Empty image tag markup does not change.""" img = pq_img(self.p, '[[Image:]]', 'p') eq_('The image "" does not exist.', img.text()) def test_simple(self): """Simple image tag markup.""" img = pq_img(self.p, '[[Image:test.jpg]]', 'img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) def test_simple_fallback(self): """Fallback to English if current locale doesn't have the image.""" img = pq_img(self.p, '[[Image:test.jpg]]', selector='img', locale='ja') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) def test_full_fallback(self): """Find current locale's image, not the English one.""" # first, pretend there is no English version self.img.locale = 'ja' self.img.save() img = pq_img(self.p, '[[Image:test.jpg]]', selector='img', locale='ja') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) # then, create an English version en_img = ImageFactory(title='test.jpg', locale='en-US') # Ensure they're not equal self.assertNotEquals(en_img.file.url, self.img.file.url) # make sure there is no fallback img = pq_img(self.p, '[[Image:test.jpg]]', selector='img', locale='ja') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) # now delete the English version self.img.delete() self.img = en_img # don't break tearDown img = pq_img(self.p, '[[Image:test.jpg]]', selector='img', locale='ja') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) def test_caption(self): """Give the image a caption.""" self.img.title = 'img test.jpg' self.img.save() img_div = pq_img(self.p, '[[Image:img test.jpg|frame|my caption]]', 'div.img') img = img_div('img') caption = img_div.text() eq_(self.img.file.url, img.attr('src')) eq_('my caption', img.attr('alt')) eq_('my caption', caption) def test_page_link(self): """Link to a wiki page.""" img_a = pq_img(self.p, '[[Image:test.jpg|page=Installing Firefox]]', 'a') img = img_a('img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) eq_('/en-US/kb/installing-firefox', img_a.attr('href')) def test_page_link_edit(self): """Link to a nonexistent wiki page.""" img_a = pq_img(self.p, '[[Image:test.jpg|page=Article List]]', 'a') img = img_a('img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) assert img_a.hasClass('new') eq_('/en-US/kb/new?title=Article+List', img_a.attr('href')) def test_page_link_caption(self): """Link to a wiki page with caption and frame.""" img_div = pq_img(self.p, '[[Image:test.jpg|frame|page=A page|my caption]]', 'div.img') img_a = img_div('a') img = img_a('img') caption = img_div.text() eq_('my caption', img.attr('alt')) eq_('my caption', caption) eq_(self.img.file.url, img.attr('src')) assert img_a.hasClass('new') eq_('/en-US/kb/new?title=A+page', img_a.attr('href')) def test_link(self): """Link to an external page.""" img_a = pq_img(self.p, '[[Image:test.jpg|link=http://test.com]]', 'a') img = img_a('img') eq_('test.jpg', img.attr('alt')) eq_(self.img.file.url, img.attr('src')) eq_('http://test.com', img_a.attr('href')) def test_link_caption(self): """Link to an external page with caption.""" img_div = pq_img(self.p, '[[Image:test.jpg|link=http://ab.us|frame|caption]]', 'div.img') img = img_div('img') img_a = img_div('a') eq_(self.img.file.url, img.attr('src')) eq_('http://ab.us', img_a.attr('href')) def test_link_align(self): """Link with align.""" img_div = pq_img(self.p, '[[Image:test.jpg|link=http://site.com|align=left]]', 'div.img') eq_('img align-left', img_div.attr('class')) def test_link_align_invalid(self): """Link with invalid align.""" img = pq_img(self.p, '[[Image:test.jpg|link=http://example.ro|align=inv]]') assert 'frameless' in img.attr('class') def test_link_valign(self): """Link with valign.""" img = pq_img(self.p, '[[Image:test.jpg|link=http://example.com|valign=top]]') eq_('vertical-align: top;', img.attr('style')) def test_link_valign_invalid(self): """Link with invalid valign.""" img = pq_img(self.p, '[[Image:test.jpg|link=http://example.com|valign=off]]') eq_(None, img.attr('style')) def test_alt(self): """Image alt attribute is overriden but caption is not.""" img_div = pq_img(self.p, '[[Image:test.jpg|alt=my alt|frame|my caption]]', 'div.img') img = img_div('img') caption = img_div.text() eq_('my alt', img.attr('alt')) eq_('my caption', caption) def test_alt_empty(self): """Image alt attribute can be empty.""" img = pq_img(self.p, '[[Image:test.jpg|alt=|my caption]]') eq_('', img.attr('alt')) def test_alt_unsafe(self): """Potentially unsafe alt content is escaped.""" unsafe_vals = ( ('an"<script>alert()</script>', 'an"&lt;script&gt;alert()&lt;/script&gt;'), ("an'<script>alert()</script>", "an'&lt;script&gt;alert()&lt;/script&gt;"), ('single\'"double', "single'"double"), ) for alt_sent, alt_expected in unsafe_vals: img = pq_img(self.p, '[[Image:test.jpg|alt=' + alt_sent + ']]') is_true = str(img).startswith('<img alt="' + alt_expected + '"') assert is_true, ('Expected "%s", sent "%s"' % (alt_expected, alt_sent)) def test_width(self): """Image width attribute set.""" img = pq_img(self.p, '[[Image:test.jpg|width=10]]') eq_('10', img.attr('width')) def test_width_invalid(self): """Invalid image width attribute set to auto.""" img = pq_img(self.p, '[[Image:test.jpg|width=invalid]]') eq_(None, img.attr('width')) def test_height(self): """Image height attribute set.""" img = pq_img(self.p, '[[Image:test.jpg|height=10]]') eq_('10', img.attr('height')) def test_height_invalid(self): """Invalid image height attribute set to auto.""" img = pq_img(self.p, '[[Image:test.jpg|height=invalid]]') eq_(None, img.attr('height')) def test_frame(self): """Image has frame if specified.""" img_div = pq_img(self.p, '[[Image:test.jpg|frame|caption]]', 'div.img') assert not img_div('img').hasClass('frameless') eq_('caption', img_div('img').attr('alt')) eq_('caption', img_div.text()) eq_(self.img.file.url, img_div('img').attr('src')) def test_frameless_link(self): """Image has frameless class and link if specified.""" img_a = pq_img(self.p, '[[Image:test.jpg|page=Installing Firefox]]', 'a') img = img_a('img') assert 'frameless' in img.attr('class') eq_('/en-US/kb/installing-firefox', img_a.attr('href'))