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