| 3 | import simplejson as json |
| 4 | |
| 5 | class TestEncodeForHTML(unittest.TestCase): |
| 6 | |
| 7 | def setUp(self): |
| 8 | self.decoder = json.JSONDecoder() |
| 9 | self.encoder = json.JSONEncoderForHTML() |
| 10 | self.non_ascii_encoder = json.JSONEncoderForHTML(ensure_ascii=False) |
| 11 | |
| 12 | def test_basic_encode(self): |
| 13 | self.assertEqual(r'"\u0026"', self.encoder.encode('&')) |
| 14 | self.assertEqual(r'"\u003c"', self.encoder.encode('<')) |
| 15 | self.assertEqual(r'"\u003e"', self.encoder.encode('>')) |
| 16 | self.assertEqual(r'"\u2028"', self.encoder.encode(u'\u2028')) |
| 17 | |
| 18 | def test_non_ascii_basic_encode(self): |
| 19 | self.assertEqual(r'"\u0026"', self.non_ascii_encoder.encode('&')) |
| 20 | self.assertEqual(r'"\u003c"', self.non_ascii_encoder.encode('<')) |
| 21 | self.assertEqual(r'"\u003e"', self.non_ascii_encoder.encode('>')) |
| 22 | self.assertEqual(r'"\u2028"', self.non_ascii_encoder.encode(u'\u2028')) |
| 23 | |
| 24 | def test_basic_roundtrip(self): |
| 25 | for char in '&<>': |
| 26 | self.assertEqual( |
| 27 | char, self.decoder.decode( |
| 28 | self.encoder.encode(char))) |
| 29 | |
| 30 | def test_prevent_script_breakout(self): |
| 31 | bad_string = '</script><script>alert("gotcha")</script>' |
| 32 | self.assertEqual( |
| 33 | r'"\u003c/script\u003e\u003cscript\u003e' |
| 34 | r'alert(\"gotcha\")\u003c/script\u003e"', |
| 35 | self.encoder.encode(bad_string)) |
| 36 | self.assertEqual( |
| 37 | bad_string, self.decoder.decode( |
| 38 | self.encoder.encode(bad_string))) |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…