File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / python / tests / reader3.py
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 19:53:34 2014 UTC (10 years, 3 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, HEAD
libxml2 2.9.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>