summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-02-01 18:56:42 -0500
committerTim Graham <timograham@gmail.com>2017-02-02 08:17:00 -0500
commitf8d52521ab74e538f35c8dcf75760b5a2532c3b5 (patch)
treef6fe9afc44f4bd1d8668117c7a549fd12f2d9070
parent2af8cd22a946ffc9ad788848f3a82619695f28e0 (diff)
Refs #27804 -- Used subTest() in tests.utils_tests.test_html.
-rw-r--r--tests/utils_tests/test_html.py97
1 files changed, 53 insertions, 44 deletions
diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py
index 1ceb51ea2b..c0a72c7dc1 100644
--- a/tests/utils_tests/test_html.py
+++ b/tests/utils_tests/test_html.py
@@ -32,11 +32,13 @@ class TestUtilsHtml(SimpleTestCase):
# Substitution patterns for testing the above items.
patterns = ("%s", "asdf%sfdsa", "%s1", "1%sb")
for value, output in items:
- for pattern in patterns:
- self.check_output(escape, pattern % value, pattern % output)
- self.check_output(escape, lazystr(pattern % value), pattern % output)
- # Check repeated values.
- self.check_output(escape, value * 2, output * 2)
+ with self.subTest(value=value, output=output):
+ for pattern in patterns:
+ with self.subTest(value=value, output=output, pattern=pattern):
+ self.check_output(escape, pattern % value, pattern % output)
+ self.check_output(escape, lazystr(pattern % value), pattern % output)
+ # Check repeated values.
+ self.check_output(escape, value * 2, output * 2)
# Verify it doesn't double replace &.
self.check_output(escape, '<&', '&lt;&amp;')
@@ -60,8 +62,9 @@ class TestUtilsHtml(SimpleTestCase):
("para1\tmore\n\npara2", "<p>para1\tmore</p>\n\n<p>para2</p>"),
)
for value, output in items:
- self.check_output(linebreaks, value, output)
- self.check_output(linebreaks, lazystr(value), output)
+ with self.subTest(value=value, output=output):
+ self.check_output(linebreaks, value, output)
+ self.check_output(linebreaks, lazystr(value), output)
def test_strip_tags(self):
items = (
@@ -83,37 +86,36 @@ class TestUtilsHtml(SimpleTestCase):
# caused infinite loop on Pythons not patched with
# http://bugs.python.org/issue20288
('&gotcha&#;<>', '&gotcha&#;<>'),
+ ('<sc<!-- -->ript>test<<!-- -->/script>', 'ript>test'),
+ ('<script>alert()</script>&h', 'alert()h'),
)
for value, output in items:
- self.check_output(strip_tags, value, output)
- self.check_output(strip_tags, lazystr(value), output)
-
- # Some convoluted syntax for which parsing may differ between python versions
- output = strip_tags('<sc<!-- -->ript>test<<!-- -->/script>')
- self.assertNotIn('<script>', output)
- self.assertIn('test', output)
- output = strip_tags('<script>alert()</script>&h')
- self.assertNotIn('<script>', output)
- self.assertIn('alert()', output)
+ with self.subTest(value=value, output=output):
+ self.check_output(strip_tags, value, output)
+ self.check_output(strip_tags, lazystr(value), output)
+ def test_strip_tags_files(self):
# Test with more lengthy content (also catching performance regressions)
for filename in ('strip_tags1.html', 'strip_tags2.txt'):
- path = os.path.join(os.path.dirname(__file__), 'files', filename)
- with open(path, 'r') as fp:
- content = fp.read()
- start = datetime.now()
- stripped = strip_tags(content)
- elapsed = datetime.now() - start
- self.assertEqual(elapsed.seconds, 0)
- self.assertIn("Please try again.", stripped)
- self.assertNotIn('<', stripped)
+ with self.subTest(filename=filename):
+ path = os.path.join(os.path.dirname(__file__), 'files', filename)
+ with open(path, 'r') as fp:
+ content = fp.read()
+ start = datetime.now()
+ stripped = strip_tags(content)
+ elapsed = datetime.now() - start
+ self.assertEqual(elapsed.seconds, 0)
+ self.assertIn("Please try again.", stripped)
+ self.assertNotIn('<', stripped)
def test_strip_spaces_between_tags(self):
# Strings that should come out untouched.
items = (' <adf>', '<adf> ', ' </adf> ', ' <f> x</f>')
for value in items:
- self.check_output(strip_spaces_between_tags, value)
- self.check_output(strip_spaces_between_tags, lazystr(value))
+ with self.subTest(value=value):
+ self.check_output(strip_spaces_between_tags, value)
+ self.check_output(strip_spaces_between_tags, lazystr(value))
+
# Strings that have spaces to strip.
items = (
('<d> </d>', '<d></d>'),
@@ -121,8 +123,9 @@ class TestUtilsHtml(SimpleTestCase):
('\n<p>\t</p>\n<p> </p>\n', '\n<p></p><p></p>\n'),
)
for value, output in items:
- self.check_output(strip_spaces_between_tags, value, output)
- self.check_output(strip_spaces_between_tags, lazystr(value), output)
+ with self.subTest(value=value, output=output):
+ self.check_output(strip_spaces_between_tags, value, output)
+ self.check_output(strip_spaces_between_tags, lazystr(value), output)
def test_escapejs(self):
items = (
@@ -139,23 +142,29 @@ class TestUtilsHtml(SimpleTestCase):
),
)
for value, output in items:
- self.check_output(escapejs, value, output)
- self.check_output(escapejs, lazystr(value), output)
+ with self.subTest(value=value, output=output):
+ self.check_output(escapejs, value, output)
+ self.check_output(escapejs, lazystr(value), output)
def test_smart_urlquote(self):
- quote = smart_urlquote
+ items = (
+ ('http://öäü.com/', 'http://xn--4ca9at.com/'),
+ ('http://öäü.com/öäü/', 'http://xn--4ca9at.com/%C3%B6%C3%A4%C3%BC/'),
+ # Everything unsafe is quoted, !*'();:@&=+$,/?#[]~ is considered
+ # safe as per RFC.
+ ('http://example.com/path/öäü/', 'http://example.com/path/%C3%B6%C3%A4%C3%BC/'),
+ ('http://example.com/%C3%B6/ä/', 'http://example.com/%C3%B6/%C3%A4/'),
+ ('http://example.com/?x=1&y=2+3&z=', 'http://example.com/?x=1&y=2+3&z='),
+ ('http://example.com/?x=<>"\'', 'http://example.com/?x=%3C%3E%22%27'),
+ ('http://example.com/?q=http://example.com/?x=1%26q=django',
+ 'http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango'),
+ ('http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango',
+ 'http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango'),
+ )
# IDNs are properly quoted
- self.assertEqual(quote('http://öäü.com/'), 'http://xn--4ca9at.com/')
- self.assertEqual(quote('http://öäü.com/öäü/'), 'http://xn--4ca9at.com/%C3%B6%C3%A4%C3%BC/')
- # Everything unsafe is quoted, !*'();:@&=+$,/?#[]~ is considered safe as per RFC
- self.assertEqual(quote('http://example.com/path/öäü/'), 'http://example.com/path/%C3%B6%C3%A4%C3%BC/')
- self.assertEqual(quote('http://example.com/%C3%B6/ä/'), 'http://example.com/%C3%B6/%C3%A4/')
- self.assertEqual(quote('http://example.com/?x=1&y=2+3&z='), 'http://example.com/?x=1&y=2+3&z=')
- self.assertEqual(quote('http://example.com/?x=<>"\''), 'http://example.com/?x=%3C%3E%22%27')
- self.assertEqual(quote('http://example.com/?q=http://example.com/?x=1%26q=django'),
- 'http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango')
- self.assertEqual(quote('http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango'),
- 'http://example.com/?q=http%3A%2F%2Fexample.com%2F%3Fx%3D1%26q%3Ddjango')
+ for value, output in items:
+ with self.subTest(value=value, output=output):
+ self.assertEqual(smart_urlquote(value), output)
def test_conditional_escape(self):
s = '<h1>interop</h1>'