diff options
| author | Tim Graham <timograham@gmail.com> | 2017-02-01 18:56:42 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-02-02 08:17:00 -0500 |
| commit | f8d52521ab74e538f35c8dcf75760b5a2532c3b5 (patch) | |
| tree | f6fe9afc44f4bd1d8668117c7a549fd12f2d9070 /tests/utils_tests | |
| parent | 2af8cd22a946ffc9ad788848f3a82619695f28e0 (diff) | |
Refs #27804 -- Used subTest() in tests.utils_tests.test_html.
Diffstat (limited to 'tests/utils_tests')
| -rw-r--r-- | tests/utils_tests/test_html.py | 97 |
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, '<&', '<&') @@ -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>' |
