Ejemplo n.º 1
0
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&quot;&amp;amp;lt;script&amp;amp;gt;alert()&amp;amp;lt;/script&amp;amp;gt;",
            ),
            (
                "an'<script>alert()</script>",
                "an'&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;",
            ),
            ("single'\"double", "single'&quot;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"))
Ejemplo n.º 2
0
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&quot;&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;'),
            ("an'<script>alert()</script>",
             "an'&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;"),
            ('single\'"double',
             "single'&quot;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'))