import os, string
from xml.dom import Node
from Ft.Lib import Uri,UriException
def Test(tester):
base_uri = Uri.OsPathToUri(__file__, attemptAbsolute=True)
tester.startTest('Creating test environment')
from Ft.Xml import XPointer
from Ft.Xml import Domlette
r = Domlette.NonvalidatingReader
doc_uri = Uri.Absolutize('addrbook.xml', base_uri)
doc = r.parseUri(doc_uri)
ADDRBOOK = doc.documentElement
elementType = lambda n, nt=Node.ELEMENT_NODE: n.nodeType == nt
ENTRIES = filter(elementType, ADDRBOOK.childNodes)
PA = ENTRIES[0]
children = filter(elementType, PA.childNodes)
PA_NAME = children[0]
PA_ADDR = children[1]
PA_WORK = children[2]
PA_FAX = children[3]
PA_PAGER = children[4]
PA_EMAIL = children[5]
EN = ENTRIES[1]
children = filter(elementType, EN.childNodes)
EN_NAME = children[0]
EN_ADDR = children[1]
EN_WORK = children[2]
EN_FAX = children[3]
EN_PAGER = children[4]
EN_EMAIL = children[5]
VZ = ENTRIES[2]
tester.testDone()
# Just one; it can be too confusing to compare much else
# because the documents are different
uri = Uri.Absolutize('addrbook.xml#element(/1)', base_uri)
tester.startTest('SelectUri(%s)' % uri)
result = XPointer.SelectUri(uri)
tester.compare(1, len(result))
tester.compare(ADDRBOOK.nodeName, result[0].nodeName)
tester.testDone()
tester.startTest('SelectNode()')
frag = 'element(pa/2)'
result = XPointer.SelectNode(doc, frag)
tester.compare([PA_ADDR], result, 'frag=%s' % frag)
frag = 'xpointer(//ENTRY[@ID="en"]/EMAIL)'
result = XPointer.SelectNode(doc, frag)
tester.compare([EN_EMAIL], result, 'frag=%s' % frag)
tester.testDone()
if tester.offline:
# No further testing
return
tester.startTest('Testing remote lookup')
nss = {'xsl':'http://www.w3.org/1999/XSL/Transform'}
uri = "http://www.w3.org/Style/XSL/stylesheets/public2html.xsl#xpointer(//xsl:template[@match='/'])"
try:
result = XPointer.SelectUri(uri, nss=nss)
except UriException, error:
if error.errorCode != UriException.RESOURCE_ERROR:
raise
tester.warning("No internet connection available")
else:
tester.compare(1, len(result), 'Wrong number of subresources')
compared = result[0].localName
tester.compare('template', compared, 'Wrong localName')
compared = result[0].attributes[(None, 'match')].value
tester.compare('/', compared, 'Wrong attribute')
tester.testDone()
return
|