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