Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/python -u
      2 import sys
      3 import libxml2
      4 try:
      5     import StringIO
      6     str_io = StringIO.StringIO
      7 except:
      8     import io
      9     str_io = io.StringIO
     10 
     11 def testSimpleBufferWrites():
     12     f = str_io()
     13     buf = libxml2.createOutputBuffer(f, "ISO-8859-1")
     14     buf.write(3, "foo")
     15     buf.writeString("bar")
     16     buf.close()
     17 
     18     if f.getvalue() != "foobar":
     19         print("Failed to save to StringIO")
     20         sys.exit(1)
     21 
     22 def testSaveDocToBuffer():
     23     """
     24     Regression test for bug #154294.
     25     """
     26     input = '<foo>Hello</foo>'
     27     expected = '''\
     28 <?xml version="1.0" encoding="UTF-8"?>
     29 <foo>Hello</foo>
     30 '''
     31     f = str_io()
     32     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     33     doc = libxml2.parseDoc(input)
     34     doc.saveFileTo(buf, 'UTF-8')
     35     doc.freeDoc()
     36     if f.getvalue() != expected:
     37         print('xmlDoc.saveFileTo() call failed.')
     38         print('     got: %s' % repr(f.getvalue()))
     39         print('expected: %s' % repr(expected))
     40         sys.exit(1)
     41 
     42 def testSaveFormattedDocToBuffer():
     43     input = '<outer><inner>Some text</inner><inner/></outer>'
     44     # The formatted and non-formatted versions of the output.
     45     expected = ('''\
     46 <?xml version="1.0" encoding="UTF-8"?>
     47 <outer><inner>Some text</inner><inner/></outer>
     48 ''', '''\
     49 <?xml version="1.0" encoding="UTF-8"?>
     50 <outer>
     51   <inner>Some text</inner>
     52   <inner/>
     53 </outer>
     54 ''')
     55     doc = libxml2.parseDoc(input)
     56     for i in (0, 1):
     57         f = str_io()
     58         buf = libxml2.createOutputBuffer(f, 'UTF-8')
     59         doc.saveFormatFileTo(buf, 'UTF-8', i)
     60         if f.getvalue() != expected[i]:
     61             print('xmlDoc.saveFormatFileTo() call failed.')
     62             print('     got: %s' % repr(f.getvalue()))
     63             print('expected: %s' % repr(expected[i]))
     64             sys.exit(1)
     65     doc.freeDoc()
     66 
     67 def testSaveIntoOutputBuffer():
     68     """
     69     Similar to the previous two tests, except this time we invoke the save
     70     methods on the output buffer object and pass in an XML node object.
     71     """
     72     input = '<foo>Hello</foo>'
     73     expected = '''\
     74 <?xml version="1.0" encoding="UTF-8"?>
     75 <foo>Hello</foo>
     76 '''
     77     f = str_io()
     78     doc = libxml2.parseDoc(input)
     79     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     80     buf.saveFileTo(doc, 'UTF-8')
     81     if f.getvalue() != expected:
     82         print('outputBuffer.saveFileTo() call failed.')
     83         print('     got: %s' % repr(f.getvalue()))
     84         print('expected: %s' % repr(expected))
     85         sys.exit(1)
     86     f = str_io()
     87     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     88     buf.saveFormatFileTo(doc, 'UTF-8', 1)
     89     if f.getvalue() != expected:
     90         print('outputBuffer.saveFormatFileTo() call failed.')
     91         print('     got: %s' % repr(f.getvalue()))
     92         print('expected: %s' % repr(expected))
     93         sys.exit(1)
     94     doc.freeDoc()
     95 
     96 if __name__ == '__main__':
     97     # Memory debug specific
     98     libxml2.debugMemory(1)
     99 
    100     testSimpleBufferWrites()
    101     testSaveDocToBuffer()
    102     testSaveFormattedDocToBuffer()
    103     testSaveIntoOutputBuffer()
    104 
    105     libxml2.cleanupParser()
    106     if libxml2.debugMemory(1) == 0:
    107         print("OK")
    108     else:
    109         print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
    110         libxml2.dumpMemory()
    111