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