summaryrefslogtreecommitdiff
path: root/python/tests/outbuf.py
blob: 09cd9b5e57bd3e8832ba78e159ef5ef5572ec493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/python -u
import sys
import libxml2
import StringIO

def testSimpleBufferWrites():
    f = StringIO.StringIO()
    buf = libxml2.createOutputBuffer(f, "ISO-8859-1")
    buf.write(3, "foo")
    buf.writeString("bar")
    buf.close()
    
    if f.getvalue() != "foobar":
        print "Failed to save to StringIO"
        sys.exit(1)

def testSaveDocToBuffer():
    """
    Regression test for bug #154294.
    """
    input = '<foo>Hello</foo>'
    expected = '''\
<?xml version="1.0" encoding="UTF-8"?>
<foo>Hello</foo>
'''
    f = StringIO.StringIO()
    buf = libxml2.createOutputBuffer(f, 'UTF-8')
    doc = libxml2.parseDoc(input)
    doc.saveFileTo(buf, 'UTF-8')
    doc.freeDoc()
    if f.getvalue() != expected:
        print 'xmlDoc.saveFileTo() call failed.'
        print '     got: %s' % repr(f.getvalue())
        print 'expected: %s' % repr(expected)
        sys.exit(1)

def testSaveFormattedDocToBuffer():
    input = '<outer><inner>Some text</inner><inner/></outer>'
    # The formatted and non-formatted versions of the output.
    expected = ('''\
<?xml version="1.0" encoding="UTF-8"?>
<outer><inner>Some text</inner><inner/></outer>
''', '''\
<?xml version="1.0" encoding="UTF-8"?>
<outer>
  <inner>Some text</inner>
  <inner/>
</outer>
''')
    doc = libxml2.parseDoc(input)
    for i in (0, 1):
        f = StringIO.StringIO()
        buf = libxml2.createOutputBuffer(f, 'UTF-8')
        doc.saveFormatFileTo(buf, 'UTF-8', i)
        if f.getvalue() != expected[i]:
            print 'xmlDoc.saveFormatFileTo() call failed.'
            print '     got: %s' % repr(f.getvalue())
            print 'expected: %s' % repr(expected[i])
            sys.exit(1)
    doc.freeDoc()

def testSaveIntoOutputBuffer():
    """
    Similar to the previous two tests, except this time we invoke the save
    methods on the output buffer object and pass in an XML node object.
    """
    input = '<foo>Hello</foo>'
    expected = '''\
<?xml version="1.0" encoding="UTF-8"?>
<foo>Hello</foo>
'''
    f = StringIO.StringIO()
    doc = libxml2.parseDoc(input)
    buf = libxml2.createOutputBuffer(f, 'UTF-8')
    buf.saveFileTo(doc, 'UTF-8')
    if f.getvalue() != expected:
        print 'outputBuffer.saveFileTo() call failed.'
        print '     got: %s' % repr(f.getvalue())
        print 'expected: %s' % repr(expected)
        sys.exit(1)
    f = StringIO.StringIO()
    buf = libxml2.createOutputBuffer(f, 'UTF-8')
    buf.saveFormatFileTo(doc, 'UTF-8', 1)
    if f.getvalue() != expected:
        print 'outputBuffer.saveFormatFileTo() call failed.'
        print '     got: %s' % repr(f.getvalue())
        print 'expected: %s' % repr(expected)
        sys.exit(1)
    doc.freeDoc()

if __name__ == '__main__':
    # Memory debug specific
    libxml2.debugMemory(1)

    testSimpleBufferWrites()
    testSaveDocToBuffer()
    testSaveFormattedDocToBuffer()
    testSaveIntoOutputBuffer()

    libxml2.cleanupParser()
    if libxml2.debugMemory(1) == 0:
        print "OK"
    else:
        print "Memory leak %d bytes" % (libxml2.debugMemory(1))
        libxml2.dumpMemory()