odoo/bin/reportlab/test/test_renderSVG.py

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()