--- python2.5-2.5.1.orig/Lib/test/test_pyexpat.py 2006-07-01 18:28:20.000000000 +0200
+++ python2.5-2.5.1/Lib/test/test_pyexpat.py 2007-09-09 18:27:46.000000000 +0200
@@ -386,3 +386,74 @@
pass
test_parse_only_xml_data()
+
+class test_chardata_buffer_size:
+ """
+ test setting of chardata buffer size
+ """
+
+ def counting_handler(self, text):
+ self.n+=1
+
+ def small_buffer_test(self, buffer_len):
+ xml = "%s" % ('a' * buffer_len)
+ parser = expat.ParserCreate()
+ parser.CharacterDataHandler = self.counting_handler
+ try:
+ parser.buffer_size=1024
+ except Exception,e:
+ raise TestFailed("buffer_size could not be set: "+str(e))
+ parser.buffer_text=1
+
+ self.n=0
+ parser.Parse(xml)
+ return self.n
+
+ def change_buffer_size_test1(self):
+ xml1 = "%s" % ('a' * 1024)
+ xml2 = "aaa%s" % ('a' * 1025)
+ parser = expat.ParserCreate()
+ parser.CharacterDataHandler = self.counting_handler
+ parser.buffer_text=1
+ parser.buffer_size=1024
+ if parser.buffer_size!=1024:
+ raise TestFailed("buffer_size should be 1024")
+
+ self.n=0
+ parser.Parse(xml1, 0)
+ parser.buffer_size*=2
+ if parser.buffer_size!=2048:
+ raise TestFailed("buffer_size should be 2048")
+ parser.Parse(xml2, 1)
+ return self.n
+
+ def change_buffer_size_test2(self):
+ xml1 = "a%s" % ('a' * 1023)
+ xml2 = "aaa%s" % ('a' * 1025)
+ parser = expat.ParserCreate()
+ parser.CharacterDataHandler = self.counting_handler
+ parser.buffer_text=1
+ parser.buffer_size=2048
+ if parser.buffer_size!=2048:
+ raise TestFailed("buffer_size should be 1024")
+
+ self.n=0
+ parser.Parse(xml1, 0)
+ parser.buffer_size/=2
+ if parser.buffer_size!=1024:
+ raise TestFailed("buffer_size should be 2048")
+ parser.Parse(xml2, 1)
+ return self.n
+
+
+ def __init__(self):
+ if self.small_buffer_test(1025)!=2:
+ raise TestFailed("chardata handler is not called twice, as expected")
+ if self.small_buffer_test(1000)!=1:
+ raise TestFailed("chardata handler is not called once, as expected")
+ if self.change_buffer_size_test1()!=2:
+ raise TestFailed("chardata handler is called %d, not 2 times, as expected with working realloc"%self.n)
+ if self.change_buffer_size_test2()!=4:
+ raise TestFailed("chardata handler is called %d, not 4 times"%self.n)
+
+test_chardata_buffer_size()