import cStringIO
from xml.dom import DOMException
from xml.dom import NAMESPACE_ERR
from xml.dom.ext import Print, PrettyPrint
from xml.dom.ext.reader import Sax2
def GetExceptionName(code):
import types
from xml import dom
for (name,value) in vars(dom).items():
if (type(value) == types.IntType and value == code):
return name
source_1 = """
Pieter Aaron
404 Error Way
404-555-1234
404-555-4321
404-555-5555
pieter.aaron@inter.net
Emeka Ndubuisi
42 Spam Blvd
767-555-7676
767-555-7642
800-SKY-PAGEx767676
endubuisi@spamtron.com
Vasia Zhugenev
2000 Disaster Plaza
000-987-6543
000-000-0000
vxz@magog.ru
"""
expected_1 = """"""
expected_2 = """
"""
expected_3 = """
Pieter Aaron
404 Error Way
404-555-1234
404-555-4321
404-555-5555
pieter.aaron@inter.net
Emeka Ndubuisi
42 Spam Blvd
767-555-7676
767-555-7642
800-SKY-PAGEx767676
endubuisi@spamtron.com
Vasia Zhugenev
2000 Disaster Plaza
000-987-6543
000-000-0000
vxz@magog.ru
"""
expected_4 = """
Pieter Aaron
404 Error Way
404-555-1234
404-555-4321
404-555-5555
pieter.aaron@inter.net
Emeka Ndubuisi
42 Spam Blvd
767-555-7676
767-555-7642
800-SKY-PAGEx767676
endubuisi@spamtron.com
Vasia Zhugenev
2000 Disaster Plaza
000-987-6543
000-000-0000
vxz@magog.ru
"""
def Test(tester):
tester.startGroup("Alexander Fayolle's Problems and variations")
tester.startTest('Bad setAttNS test')
d=Sax2.FromXml('')
e = d.createElementNS('', 'elt')
d.documentElement.appendChild(e)
try:
e.setAttributeNS('http://logilab', 'att', 'value1')
except DOMException, x:
if x.code != NAMESPACE_ERR:
name = getExceptionName(x.code)
tester.error("Wrong exception '%s', expected NAMESPACE_ERR" % name)
else:
tester.error('setAttributeNS with no prefix and non-null URI doesn\'t raise exception.')
e.setAttributeNS('http://logilab', 'spam:att', 'value1')
stream = cStringIO.StringIO()
Print(d, stream=stream)
result = stream.getvalue()
if result != expected_1:
tester.error('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_1), repr(result)))
stream = cStringIO.StringIO()
PrettyPrint(d, stream=stream)
result = stream.getvalue()
if result != expected_2:
tester.error('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_2), repr(result)))
tester.testDone()
tester.startTest('Document Fragment Printing')
d = Sax2.FromXml(source_1)
df = d.createDocumentFragment()
for n in d.documentElement.childNodes:
df.appendChild(n.cloneNode(1))
if len(df.childNodes) != len(d.documentElement.childNodes):
tester.error('Docfrag append error')
if df.childNodes.length != d.documentElement.childNodes.length:
tester.error('Docfrag append error')
stream = cStringIO.StringIO()
PrettyPrint(df, stream=stream)
result = stream.getvalue()
if result != expected_3:
raise Exception('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_3), repr(result)))
tester.testDone()
tester.startTest('Document Type Printing')
d = Sax2.FromXml(source_1)
d.doctype.__dict__['__systemId'] = "addr_book.dtd"
stream = cStringIO.StringIO()
PrettyPrint(d, stream=stream)
result = stream.getvalue()
if result != expected_4:
raise Exception('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_4), repr(result)))
tester.testDone()
return tester.groupDone()
if __name__ == '__main__':
import sys
import TestSuite
tester = TestSuite.TestSuite()
retVal = Test(tester)
sys.exit(retVal)