from deliverance.util.cdata import escape_cdata, unescape_cdata from nose.tools import assert_true, assert_false, assert_equals from lxml.html import fromstring, tostring docs = [ """""", """""", """""", ] def test_symmetry(): for doc in docs: assert_equals(unescape_cdata(escape_cdata(doc)), doc) def test_content_preserved(): output = escape_cdata(docs[0]) assert "Success!" in output assert "1 > 0 && 2 < 3" not in output assert "1 __GT__ 0 __AMP____AMP__ 2 __LT__ 3" in output output = escape_cdata(docs[1]) assert "Success!" in output assert "A second success!" in output def test_no_escape_outside_cdata(): output = escape_cdata(docs[2]) assert " > " in output assert " && " in output assert " < " in output def test_lxml_output(): output = escape_cdata(docs[0]) output = tostring(fromstring(output), method="xml") assert ">" not in output assert "<" not in output assert "&" not in output output = escape_cdata(docs[1]) output = tostring(fromstring(output), method="xml") assert ">" not in output assert "<" not in output assert "&" not in output output = escape_cdata(docs[2]) output = tostring(fromstring(output), method="xml") assert output.count(">") == 1 assert output.count("<") == 1 assert output.count("&") == 2