test_encode_for_html.py 1022 B

123456789101112131415161718192021222324252627282930
  1. import unittest
  2. import simplejson as json
  3. class TestEncodeForHTML(unittest.TestCase):
  4. def setUp(self):
  5. self.decoder = json.JSONDecoder()
  6. self.encoder = json.JSONEncoderForHTML()
  7. def test_basic_encode(self):
  8. self.assertEqual(r'"\u0026"', self.encoder.encode('&'))
  9. self.assertEqual(r'"\u003c"', self.encoder.encode('<'))
  10. self.assertEqual(r'"\u003e"', self.encoder.encode('>'))
  11. def test_basic_roundtrip(self):
  12. for char in '&<>':
  13. self.assertEqual(
  14. char, self.decoder.decode(
  15. self.encoder.encode(char)))
  16. def test_prevent_script_breakout(self):
  17. bad_string = '</script><script>alert("gotcha")</script>'
  18. self.assertEqual(
  19. r'"\u003c/script\u003e\u003cscript\u003e'
  20. r'alert(\"gotcha\")\u003c/script\u003e"',
  21. self.encoder.encode(bad_string))
  22. self.assertEqual(
  23. bad_string, self.decoder.decode(
  24. self.encoder.encode(bad_string)))