diff options
Diffstat (limited to 'markupsafe/tests.py')
-rw-r--r-- | markupsafe/tests.py | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/markupsafe/tests.py b/markupsafe/tests.py index dbb3125..12cd69b 100644 --- a/markupsafe/tests.py +++ b/markupsafe/tests.py @@ -2,16 +2,18 @@ import gc import unittest from markupsafe import Markup, escape, escape_silent +from markupsafe._compat import text_type class MarkupTestCase(unittest.TestCase): - def test_markup_operations(self): + def test_adding(self): # adding two strings should escape the unsafe one unsafe = '<script type="application/x-some-script">alert("foo");</script>' safe = Markup('<em>username</em>') - assert unsafe + safe == unicode(escape(unsafe)) + unicode(safe) + assert unsafe + safe == text_type(escape(unsafe)) + text_type(safe) + def test_string_interpolation(self): # string interpolations are safe to use too assert Markup('<em>%s</em>') % '<bad user>' == \ '<em><bad user></em>' @@ -22,6 +24,7 @@ class MarkupTestCase(unittest.TestCase): assert Markup('%i') % 3.14 == '3' assert Markup('%.2f') % 3.14 == '3.14' + def test_type_behavior(self): # an escaped object is markup too assert type(Markup('foo') + 'bar') is Markup @@ -29,16 +32,19 @@ class MarkupTestCase(unittest.TestCase): x = Markup("foo") assert x.__html__() is x + def test_html_interop(self): # it also knows how to treat __html__ objects class Foo(object): def __html__(self): return '<em>awesome</em>' def __unicode__(self): return 'awesome' + __str__ = __unicode__ assert Markup(Foo()) == '<em>awesome</em>' assert Markup('<strong>%s</strong>') % Foo() == \ '<strong><em>awesome</em></strong>' + def test_escaping(self): # escaping and unescaping assert escape('"<>&\'') == '"<>&'' assert Markup("<em>Foo & Bar</em>").striptags() == "Foo & Bar" @@ -59,8 +65,8 @@ class MarkupLeakTestCase(unittest.TestCase): def test_markup_leaks(self): counts = set() - for count in xrange(20): - for item in xrange(1000): + for count in range(20): + for item in range(1000): escape("foo") escape("<foo>") escape(u"foo") @@ -68,48 +74,10 @@ class MarkupLeakTestCase(unittest.TestCase): counts.add(len(gc.get_objects())) assert len(counts) == 1, 'ouch, c extension seems to leak objects' -class EncodedMarkup(Markup): - __slots__ = () - encoding = 'utf8' - - @classmethod - def escape(cls, s): - if isinstance(s, str): - s = s.decode('utf8') - return super(EncodedMarkup, cls).escape(s) - -class MarkupSubclassTestCase(unittest.TestCase): - # The Russian name of Russia (Rossija) - russia = u'Россия' - utf8 = russia.encode('utf8') - - def test_escape(self): - myval = EncodedMarkup.escape(self.utf8) - assert myval == self.russia, repr(myval) - def test_add(self): - myval = EncodedMarkup() + self.utf8 - assert myval == self.russia, repr(myval) - def test_radd(self): - myval = self.utf8 + EncodedMarkup() - assert myval == self.russia, repr(myval) - def test_join(self): - myval = EncodedMarkup().join([self.utf8]) - assert myval == self.russia, repr(myval) - def test_partition(self): - assert EncodedMarkup(self.russia).partition(self.utf8)[1] == self.russia - assert EncodedMarkup(self.russia).rpartition(self.utf8)[1] == self.russia - def test_mod(self): - assert EncodedMarkup('%s') % self.utf8 == self.russia - assert EncodedMarkup('%r') % self.utf8 == escape(repr(self.utf8)) - def test_strip(self): - assert EncodedMarkup(self.russia).strip(self.utf8) == u'' - assert EncodedMarkup(self.russia).rstrip(self.utf8) == u'' - def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(MarkupTestCase)) - suite.addTest(unittest.makeSuite(MarkupSubclassTestCase)) # this test only tests the c extension if not hasattr(escape, 'func_code'): |