~ensoft-opensource/+junk/cpython

« back to all changes in this revision

Viewing changes to Lib/test/test_sax.py

  • Committer: Martin Morrison
  • Date: 2013-05-13 04:00:30 UTC
  • Revision ID: mm@ensoft.co.uk-20130513040030-6vwan12if4o6cnny
Tags: LATEST
Latest sync

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
from xml.sax.handler import feature_namespaces
16
16
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
17
17
from io import BytesIO, StringIO
 
18
import codecs
18
19
import os.path
19
20
import shutil
20
21
from test import support
318
319
 
319
320
        self.assertEqual(result.getvalue(), self.xml("<doc> </doc>"))
320
321
 
 
322
    def test_xmlgen_encoding_bytes(self):
 
323
        encodings = ('iso-8859-15', 'utf-8', 'utf-8-sig',
 
324
                     'utf-16', 'utf-16be', 'utf-16le',
 
325
                     'utf-32', 'utf-32be', 'utf-32le')
 
326
        for encoding in encodings:
 
327
            result = self.ioclass()
 
328
            gen = XMLGenerator(result, encoding=encoding)
 
329
 
 
330
            gen.startDocument()
 
331
            gen.startElement("doc", {"a": '\u20ac'})
 
332
            gen.characters("\u20ac".encode(encoding))
 
333
            gen.ignorableWhitespace(" ".encode(encoding))
 
334
            gen.endElement("doc")
 
335
            gen.endDocument()
 
336
 
 
337
            self.assertEqual(result.getvalue(),
 
338
                self.xml('<doc a="\u20ac">\u20ac </doc>', encoding=encoding))
 
339
 
321
340
    def test_xmlgen_ns(self):
322
341
        result = self.ioclass()
323
342
        gen = XMLGenerator(result)
538
557
        def getvalue(self):
539
558
            return b''.join(self)
540
559
 
 
560
class StreamWriterXmlgenTest(XmlgenTest, unittest.TestCase):
 
561
    def ioclass(self):
 
562
        raw = BytesIO()
 
563
        writer = codecs.getwriter('ascii')(raw, 'xmlcharrefreplace')
 
564
        writer.getvalue = raw.getvalue
 
565
        return writer
 
566
 
 
567
    def xml(self, doc, encoding='iso-8859-1'):
 
568
        return ('<?xml version="1.0" encoding="%s"?>\n%s' %
 
569
                (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
 
570
 
 
571
class StreamReaderWriterXmlgenTest(XmlgenTest, unittest.TestCase):
 
572
    fname = support.TESTFN + '-codecs'
 
573
 
 
574
    def ioclass(self):
 
575
        writer = codecs.open(self.fname, 'w', encoding='ascii',
 
576
                             errors='xmlcharrefreplace', buffering=0)
 
577
        self.addCleanup(support.unlink, self.fname)
 
578
        writer.getvalue = self.getvalue
 
579
        return writer
 
580
 
 
581
    def getvalue(self):
 
582
        with open(self.fname, 'rb') as f:
 
583
            return f.read()
 
584
 
 
585
    def xml(self, doc, encoding='iso-8859-1'):
 
586
        return ('<?xml version="1.0" encoding="%s"?>\n%s' %
 
587
                (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
541
588
 
542
589
start = b'<?xml version="1.0" encoding="iso-8859-1"?>\n'
543
590
 
946
993
                 StringXmlgenTest,
947
994
                 BytesXmlgenTest,
948
995
                 WriterXmlgenTest,
 
996
                 StreamWriterXmlgenTest,
 
997
                 StreamReaderWriterXmlgenTest,
949
998
                 ExpatReaderTest,
950
999
                 ErrorReportingTest,
951
1000
                 XmlReaderTest)