summaryrefslogtreecommitdiff
path: root/markupsafe/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'markupsafe/tests.py')
-rw-r--r--markupsafe/tests.py52
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>&lt;bad user&gt;</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('"<>&\'') == '&#34;&lt;&gt;&amp;&#39;'
assert Markup("<em>Foo &amp; 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'):