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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
#!/bin/env python
#Copyright ReportLab Europe Ltd. 2000-2012
#see license.txt for license details
#history TBC
#$Header$
__version__=''' $Id'''
__doc__="""Tests of intra-paragraph parsing behaviour in Platypus."""
from reportlab.lib.testutils import setOutDir,makeSuiteForClasses, outputfile, equalStrings
setOutDir(__name__)
from pprint import pprint as pp
import unittest
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
style.bulletOffsetY = 3
style.textTransform = None
self.style = style
def testPlain(self):
txt = "Hello World"
stuff = ParaParser().parse(txt, self.style)
assert isinstance(stuff,tuple)
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([x.text for x in fragList], ['Hello ','Bold',' World'])
self.assertEquals(fragList[1].fontName, 'Times-Bold')
def testStrong(self):
txt = "Hello <strong>Strong</strong> World"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], ['Hello ','Strong',' World'])
self.assertEquals(fragList[1].fontName, 'Times-Bold')
def testItalic(self):
txt = "Hello <i>Italic</i> World"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], ['Hello ','Italic',' World'])
self.assertEquals(fragList[1].fontName, 'Times-Italic')
def testEm(self):
txt = "Hello <em>Em</em> World"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], ['Hello ','Em',' World'])
self.assertEquals(fragList[1].fontName, 'Times-Italic')
def testEntity(self):
"Numeric entities should be unescaped by parser"
txt = b"Hello © copyright"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], [u'Hello ', u'\xa9', u' 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 equalStrings(fragList[0].text,txt)
def testPlainUnicode(self):
"See if simple unicode goes through"
txt = "Hello World"
stuff = ParaParser().parse(txt, self.style)
assert isinstance(stuff,tuple)
assert len(stuff) == 3
assert stuff[1][0].text == 'Hello World'
def testBoldUnicode(self):
txt = "Hello <b>Bold</b> World"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], ['Hello ','Bold',' World'])
self.assertEquals(fragList[1].fontName, 'Times-Bold')
def testEntityUnicode(self):
"Numeric entities should be unescaped by parser"
txt = "Hello © copyright"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in 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 = "Hello <br/> World"
fragList = ParaParser().parse(txt, self.style)[1]
self.assertEquals([x.text for x in fragList], ['Hello ','',' World'])
self.assertEquals(fragList[1].lineBreak, True)
#def testNakedAmpersands(self):
#We no longer require this error to be raised when using html.parser
# import pyRXPU
# from reportlab.platypus.paragraph import Paragraph
# def func():
# txt = "1 & 2"
# parser = ParaParser()
# parser.caseSensitive = True
# frags = ParaParser().parse(txt, self.style)[1]
# Paragraph(txt, self.style),
# self.assertRaises(
# pyRXPU.error,
# func,
# )
def makeSuite():
return makeSuiteForClasses(ParaParserTestCase)
#noruntests
if __name__ == "__main__":
unittest.TextTestRunner().run(makeSuite())
|