Imported Upstream version 2.9.1
[platform/upstream/libxml2.git] / python / tests / outbuf.py
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()