reportlab/test/test_platypus_paraparser.py
author rgbecker
Fri, 21 Jul 2006 12:44:40 +0000
changeset 2664 c9faa3a99e93
parent 2663 927cc273c5a5
child 2724 3ddade273440
permissions -rw-r--r--
reportlab/platypus: <br/> tags now working

#!/bin/env python
#Copyright ReportLab Europe Ltd. 2000-2004
#see license.txt for license details
#history TBC
#$Header$
__version__=''' $Id'''
__doc__="""Tests of intra-paragraph parsing behaviour in Platypus."""

from types import TupleType, ListType, StringType, UnicodeType
from pprint import pprint as pp

from reportlab.test import unittest
from reportlab.test.utils import makeSuiteForClasses, outputfile
from reportlab.platypus import cleanBlockQuotedText
from reportlab.platypus.paraparser import ParaParser, ParaFrag
from reportlab.lib.colors import black

class ParaParserTestCase(unittest.TestCase):
    """Tests of data structures created by paragraph parser.  Esp. ability
    to accept unicode and preserve it"""

    def setUp(self):
        style=ParaFrag()
        style.fontName='Times-Roman'
        style.fontSize = 12
        style.textColor = black
        style.bulletFontName = black
        style.bulletFontName='Times-Roman'
        style.bulletFontSize=12
        self.style = style        

    def testPlain(self):
        txt = "Hello World"
        stuff = ParaParser().parse(txt, self.style)
        assert type(stuff) is TupleType
        assert len(stuff) == 3
        assert  stuff[1][0].text == 'Hello World'
        
    def testBold(self):
        txt = "Hello <b>Bold</b> World"
        fragList = ParaParser().parse(txt, self.style)[1]
        self.assertEquals(map(lambda x:x.text, fragList), ['Hello ','Bold',' World'])
        self.assertEquals(fragList[1].fontName, 'Times-Bold')

    def testEntity(self):
        "Numeric entities should be unescaped by parser"
        txt = "Hello &#169; copyright"
        fragList = ParaParser().parse(txt, self.style)[1]
        self.assertEquals(map(lambda x:x.text, fragList), ['Hello ','\xc2\xa9',' copyright'])

    def testEscaped(self):
        "Escaped high-bit stuff should go straight through"
        txt = "Hello \xc2\xa9 copyright"
        fragList = ParaParser().parse(txt, self.style)[1]
        assert fragList[0].text == txt

    def testPlainUnicode(self):
        "See if simple unicode goes through"
        txt = u"Hello World"
        stuff = ParaParser().parse(txt, self.style)
        assert type(stuff) is TupleType
        assert len(stuff) == 3
        assert  stuff[1][0].text == u'Hello World'

    def testBoldUnicode(self):
        txt = u"Hello <b>Bold</b> World"
        fragList = ParaParser().parse(txt, self.style)[1]
        self.assertEquals(map(lambda x:x.text, fragList), [u'Hello ',u'Bold',u' World'])
        self.assertEquals(fragList[1].fontName, 'Times-Bold')

    def testEntityUnicode(self):
        "Numeric entities should be unescaped by parser"
        txt = u"Hello &#169; copyright"
        fragList = ParaParser().parse(txt, self.style)[1]
        self.assertEquals(map(lambda x:x.text, fragList), [u'Hello ',u'\xa9',u' copyright'])

    def testEscapedUnicode(self):
        "Escaped high-bit stuff should go straight through"
        txt = u"Hello \xa9 copyright"
        fragList = ParaParser().parse(txt, self.style)[1]
        assert fragList[0].text == txt

    def testBr(self):
        txt = u"Hello <br/> World"
        fragList = ParaParser().parse(txt, self.style)[1]
        self.assertEquals(map(lambda x:x.text, fragList), [u'Hello ',u'',u' World'])
        self.assertEquals(fragList[1].lineBreak, True)

def makeSuite():
    return makeSuiteForClasses(ParaParserTestCase)


#noruntests
if __name__ == "__main__":
    unittest.TextTestRunner().run(makeSuite())