home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-libxml2 / examples / reader3.py < prev    next >
Encoding:
Python Source  |  2003-01-09  |  4.0 KB  |  156 lines

  1. #!/usr/bin/python -u
  2. #
  3. # this tests the entities substitutions with the XmlTextReader interface
  4. #
  5. import sys
  6. import StringIO
  7. import libxml2
  8.  
  9. docstr="""<?xml version='1.0'?>
  10. <!DOCTYPE doc [
  11. <!ENTITY tst "<p>test</p>">
  12. ]>
  13. <doc>&tst;</doc>"""
  14.  
  15. # Memory debug specific
  16. libxml2.debugMemory(1)
  17.  
  18. #
  19. # First test, normal don't substitute entities.
  20. #
  21. f = StringIO.StringIO(docstr)
  22. input = libxml2.inputBuffer(f)
  23. reader = input.newTextReader("test_noent")
  24. ret = reader.Read()
  25. if ret != 1:
  26.     print "Error reading to root"
  27.     sys.exit(1)
  28. if reader.Name() == "doc" or reader.NodeType() == 10:
  29.     ret = reader.Read()
  30. if ret != 1:
  31.     print "Error reading to root"
  32.     sys.exit(1)
  33. if reader.Name() != "doc" or reader.NodeType() != 1:
  34.     print "test_normal: Error reading the root element"
  35.     sys.exit(1)
  36. ret = reader.Read()
  37. if ret != 1:
  38.     print "test_normal: Error reading to the entity"
  39.     sys.exit(1)
  40. if reader.Name() != "tst" or reader.NodeType() != 5:
  41.     print "test_normal: Error reading the entity"
  42.     sys.exit(1)
  43. ret = reader.Read()
  44. if ret != 1:
  45.     print "test_normal: Error reading to the end of root"
  46.     sys.exit(1)
  47. if reader.Name() != "doc" or reader.NodeType() != 15:
  48.     print "test_normal: Error reading the end of the root element"
  49.     sys.exit(1)
  50. ret = reader.Read()
  51. if ret != 0:
  52.     print "test_normal: Error detecting the end"
  53.     sys.exit(1)
  54.  
  55. #
  56. # Second test, completely substitute the entities.
  57. #
  58. f = StringIO.StringIO(docstr)
  59. input = libxml2.inputBuffer(f)
  60. reader = input.newTextReader("test_noent")
  61. reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES, 1)
  62. ret = reader.Read()
  63. if ret != 1:
  64.     print "Error reading to root"
  65.     sys.exit(1)
  66. if reader.Name() == "doc" or reader.NodeType() == 10:
  67.     ret = reader.Read()
  68. if ret != 1:
  69.     print "Error reading to root"
  70.     sys.exit(1)
  71. if reader.Name() != "doc" or reader.NodeType() != 1:
  72.     print "test_noent: Error reading the root element"
  73.     sys.exit(1)
  74. ret = reader.Read()
  75. if ret != 1:
  76.     print "test_noent: Error reading to the entity content"
  77.     sys.exit(1)
  78. if reader.Name() != "p" or reader.NodeType() != 1:
  79.     print "test_noent: Error reading the p element from entity"
  80.     sys.exit(1)
  81. ret = reader.Read()
  82. if ret != 1:
  83.     print "test_noent: Error reading to the text node"
  84.     sys.exit(1)
  85. if reader.NodeType() != 3 or reader.Value() != "test":
  86.     print "test_noent: Error reading the text node"
  87.     sys.exit(1)
  88. ret = reader.Read()
  89. if ret != 1:
  90.     print "test_noent: Error reading to the end of p element"
  91.     sys.exit(1)
  92. if reader.Name() != "p" or reader.NodeType() != 15:
  93.     print "test_noent: Error reading the end of the p element"
  94.     sys.exit(1)
  95. ret = reader.Read()
  96. if ret != 1:
  97.     print "test_noent: Error reading to the end of root"
  98.     sys.exit(1)
  99. if reader.Name() != "doc" or reader.NodeType() != 15:
  100.     print "test_noent: Error reading the end of the root element"
  101.     sys.exit(1)
  102. ret = reader.Read()
  103. if ret != 0:
  104.     print "test_noent: Error detecting the end"
  105.     sys.exit(1)
  106.  
  107. #
  108. # third test, crazy stuff about empty element in external parsed entities
  109. #
  110. s = """<!DOCTYPE struct [
  111. <!ENTITY simplestruct2.ent SYSTEM "simplestruct2.ent">
  112. ]>
  113. <struct>&simplestruct2.ent;</struct>
  114. """
  115. expect="""10 struct 0 0
  116. 1 struct 0 0
  117. 1 descr 1 1
  118. 15 struct 0 0
  119. """
  120. res=""
  121. simplestruct2_ent="""<descr/>"""
  122.  
  123. def myResolver(URL, ID, ctxt):
  124.     if URL == "simplestruct2.ent":
  125.         return(StringIO.StringIO(simplestruct2_ent))
  126.     return None
  127.  
  128. libxml2.setEntityLoader(myResolver)
  129.  
  130. input = libxml2.inputBuffer(StringIO.StringIO(s))
  131. reader = input.newTextReader("test3")
  132. reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
  133. while reader.Read() == 1:
  134.     res = res + "%s %s %d %d\n" % (reader.NodeType(),reader.Name(),
  135.                                    reader.Depth(),reader.IsEmptyElement())
  136.  
  137. if res != expect:
  138.     print "test3 failed: unexpected output"
  139.     print res
  140.     sys.exit(1)
  141.  
  142. #
  143. # cleanup
  144. #
  145. del f
  146. del input
  147. del reader
  148.  
  149. # Memory debug specific
  150. libxml2.cleanupParser()
  151. if libxml2.debugMemory(1) == 0:
  152.     print "OK"
  153. else:
  154.     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
  155.     libxml2.dumpMemory()
  156.