166 lines
4.3 KiB
Python
Executable File
166 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys, string
|
|
from xml.dom import minidom
|
|
from xml.sax._exceptions import SAXReaderNotAvailable
|
|
|
|
from reportlab.test import unittest
|
|
from reportlab.test.utils import makeSuiteForClasses, outputfile, printLocation
|
|
|
|
from reportlab.graphics.shapes import *
|
|
from reportlab.graphics import renderSVG
|
|
|
|
|
|
|
|
|
|
def warnIgnoredRestofTest():
|
|
"Raise a warning (if possible) about a not fully completed test."
|
|
|
|
version = sys.version_info[:2]
|
|
msg = "XML parser not found - consider installing expat! Rest of test(s) ignored!"
|
|
if version >= (2, 1):
|
|
import warnings
|
|
warnings.warn(msg)
|
|
else:
|
|
# should better also be printed only once...
|
|
print msg
|
|
|
|
|
|
|
|
|
|
# Check if we have a default XML parser available or not.
|
|
|
|
try:
|
|
import xml
|
|
from xml.sax import make_parser
|
|
p = xml.sax.make_parser()
|
|
HAVE_XML_PARSER = 1
|
|
except SAXReaderNotAvailable:
|
|
HAVE_XML_PARSER = 0
|
|
|
|
|
|
|
|
|
|
def load(path):
|
|
"Helper function to read the generated SVG again."
|
|
|
|
doc = minidom.parse(path)
|
|
doc.normalize()
|
|
return doc.documentElement
|
|
|
|
|
|
|
|
|
|
class RenderSvgSimpleTestCase(unittest.TestCase):
|
|
"Testing renderSVG module."
|
|
|
|
def test0(self):
|
|
"Test two strings in drawing."
|
|
|
|
path = outputfile("test_renderSVG_simple_test0.svg")
|
|
|
|
d = Drawing(200, 100)
|
|
d.add(String(0, 0, "foo"))
|
|
d.add(String(100, 0, "bar"))
|
|
renderSVG.drawToFile(d, path)
|
|
|
|
if not HAVE_XML_PARSER:
|
|
warnIgnoredRestofTest()
|
|
return
|
|
|
|
svg = load(path)
|
|
fg = svg.getElementsByTagName('g')[0] # flipping group
|
|
dg = fg.getElementsByTagName('g')[0] # diagram group
|
|
textChildren = dg.getElementsByTagName('text') # text nodes
|
|
t0 = string.strip(textChildren[0].childNodes[0].nodeValue)
|
|
t1 = string.strip(textChildren[1].childNodes[0].nodeValue)
|
|
assert t0 == 'foo'
|
|
assert t1 == 'bar'
|
|
|
|
|
|
def test1(self):
|
|
"Test two strings in group in drawing."
|
|
|
|
path = outputfile("test_renderSVG_simple_test1.svg")
|
|
|
|
d = Drawing(200, 100)
|
|
g = Group()
|
|
g.add(String(0, 0, "foo"))
|
|
g.add(String(100, 0, "bar"))
|
|
d.add(g)
|
|
renderSVG.drawToFile(d, path)
|
|
|
|
if not HAVE_XML_PARSER:
|
|
warnIgnoredRestofTest()
|
|
return
|
|
|
|
svg = load(path)
|
|
fg = svg.getElementsByTagName('g')[0] # flipping group
|
|
dg = fg.getElementsByTagName('g')[0] # diagram group
|
|
g = dg.getElementsByTagName('g')[0] # custom group
|
|
textChildren = g.getElementsByTagName('text') # text nodes
|
|
t0 = string.strip(textChildren[0].childNodes[0].nodeValue)
|
|
t1 = string.strip(textChildren[1].childNodes[0].nodeValue)
|
|
|
|
assert t0 == 'foo'
|
|
assert t1 == 'bar'
|
|
|
|
|
|
def test2(self):
|
|
"Test two strings in transformed group in drawing."
|
|
|
|
path = outputfile("test_renderSVG_simple_test2.svg")
|
|
|
|
d = Drawing(200, 100)
|
|
g = Group()
|
|
g.add(String(0, 0, "foo"))
|
|
g.add(String(100, 0, "bar"))
|
|
g.scale(1.5, 1.2)
|
|
g.translate(50, 0)
|
|
d.add(g)
|
|
renderSVG.drawToFile(d, path)
|
|
|
|
if not HAVE_XML_PARSER:
|
|
warnIgnoredRestofTest()
|
|
return
|
|
|
|
svg = load(path)
|
|
fg = svg.getElementsByTagName('g')[0] # flipping group
|
|
dg = fg.getElementsByTagName('g')[0] # diagram group
|
|
g = dg.getElementsByTagName('g')[0] # custom group
|
|
textChildren = g.getElementsByTagName('text') # text nodes
|
|
t0 = string.strip(textChildren[0].childNodes[0].nodeValue)
|
|
t1 = string.strip(textChildren[1].childNodes[0].nodeValue)
|
|
|
|
assert t0 == 'foo'
|
|
assert t1 == 'bar'
|
|
|
|
|
|
|
|
|
|
class RenderSvgAxesTestCase(unittest.TestCase):
|
|
"Testing renderSVG module on Axes widgets."
|
|
|
|
def test0(self):
|
|
"Test two strings in drawing."
|
|
|
|
path = outputfile("axestest0.svg")
|
|
from reportlab.graphics.charts.axes import XCategoryAxis
|
|
|
|
d = XCategoryAxis().demo()
|
|
renderSVG.drawToFile(d, path)
|
|
|
|
|
|
|
|
|
|
def makeSuite():
|
|
return makeSuiteForClasses(RenderSvgSimpleTestCase, RenderSvgAxesTestCase)
|
|
|
|
|
|
|
|
|
|
#noruntests
|
|
if __name__ == "__main__":
|
|
unittest.TextTestRunner().run(makeSuite())
|
|
printLocation()
|