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 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2009 Søren Roug, European Environment Agency
#
# This is free software. You may redistribute it under the terms
# of the Apache license and the GNU General Public License Version
# 2 or at your option any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Contributor(s):
#
import unittest, os, os.path
from odf.opendocument import OpenDocumentSpreadsheet, OpenDocumentChart, load
from odf.style import Style, ParagraphProperties, TextProperties, GraphicProperties, \
ChartProperties
from odf.number import Text,PercentageStyle, Number
from odf.table import Table,TableRow,TableCell
from odf import text, chart
class TestDatastyles(unittest.TestCase):
saved = False
def tearDown(self):
if self.saved:
os.unlink("TEST.ods")
def test_percentage(self):
""" Test that an automatic style can refer to a PercentageStyle as a datastylename """
doc = OpenDocumentSpreadsheet()
nonze = PercentageStyle(name='N11')
nonze.addElement(Number(decimalplaces='2', minintegerdigits='1'))
nonze.addElement(Text(text='%'))
doc.automaticstyles.addElement(nonze)
pourcent = Style(name='pourcent', family='table-cell', datastylename='N11')
pourcent.addElement(ParagraphProperties(textalign='center'))
pourcent.addElement(TextProperties(attributes={'fontsize':"10pt",'fontweight':"bold", 'color':"#000000" }))
doc.automaticstyles.addElement(pourcent)
table = Table(name='sheet1')
tr = TableRow()
tc = TableCell(formula='=AVERAGE(C4:CB62)/2',stylename='pourcent', valuetype='percentage')
tr.addElement(tc)
table.addElement(tr)
doc.spreadsheet.addElement(table)
doc.save(u"TEST.ods")
self.saved = True
d = load(u"TEST.ods")
result = d.contentxml() # contentxml is supposed to yeld a bytes
self.assertNotEqual(-1, result.find(b'''<number:percentage-style'''))
self.assertNotEqual(-1, result.find(b'''style:data-style-name="N11"'''))
self.assertNotEqual(-1, result.find(b'''style:name="pourcent"'''))
def test_chart_style(self):
""" Test that chart:style-name reference is seen in content.xml """
doc = OpenDocumentChart()
chartstyle = Style(name="chartstyle", family="chart")
chartstyle.addElement( GraphicProperties(stroke="none", fillcolor="#ffffff"))
doc.automaticstyles.addElement(chartstyle)
mychart = chart.Chart( width="576pt", height="504pt", stylename=chartstyle, attributes={'class':'chart:bar'})
doc.chart.addElement(mychart)
# Add title
titlestyle = Style(name="titlestyle", family="chart")
titlestyle.addElement( GraphicProperties(stroke="none", fill="none"))
titlestyle.addElement( TextProperties(fontfamily="'Nimbus Sans L'",
fontfamilygeneric="swiss", fontpitch="variable", fontsize="13pt"))
doc.automaticstyles.addElement(titlestyle)
mytitle = chart.Title(x="385pt", y="27pt", stylename=titlestyle)
mytitle.addElement( text.P(text="Title"))
mychart.addElement(mytitle)
# Add subtitle
subtitlestyle = Style(name="subtitlestyle", family="chart")
subtitlestyle.addElement( GraphicProperties(stroke="none", fill="none"))
subtitlestyle.addElement( TextProperties(fontfamily="'Nimbus Sans L'",
fontfamilygeneric="swiss", fontpitch="variable", fontsize="10pt"))
doc.automaticstyles.addElement(subtitlestyle)
subtitle = chart.Subtitle(x="0pt", y="123pt", stylename=subtitlestyle)
subtitle.addElement( text.P(text="my subtitle"))
mychart.addElement(subtitle)
# Legend
legendstyle = Style(name="legendstyle", family="chart")
legendstyle.addElement( GraphicProperties(fill="none"))
legendstyle.addElement( TextProperties(fontfamily="'Nimbus Sans L'",
fontfamilygeneric="swiss", fontpitch="variable", fontsize="6pt"))
doc.automaticstyles.addElement(legendstyle)
mylegend = chart.Legend(legendposition="end", legendalign="center", stylename=legendstyle)
mychart.addElement(mylegend)
# Plot area
plotstyle = Style(name="plotstyle", family="chart")
plotstyle.addElement( ChartProperties(seriessource="columns",
percentage="false", stacked="false",
threedimensional="true"))
doc.automaticstyles.addElement(plotstyle)
plotarea = chart.PlotArea(datasourcehaslabels="both", stylename=plotstyle)
mychart.addElement(plotarea)
# Style for the X,Y axes
axisstyle = Style(name="axisstyle", family="chart")
axisstyle.addElement( ChartProperties(displaylabel="true"))
doc.automaticstyles.addElement(axisstyle)
# Title for the X axis
xaxis = chart.Axis(dimension="x", name="primary-x", stylename=axisstyle)
plotarea.addElement(xaxis)
xt = chart.Title()
xaxis.addElement(xt)
xt.addElement(text.P(text="x_axis"))
# Title for the Y axis
yaxis = chart.Axis(dimension="y", name="primary-y", stylename=axisstyle)
plotarea.addElement(yaxis)
yt = chart.Title()
yaxis.addElement(yt)
yt.addElement(text.P(text="y_axis"))
result = doc.contentxml() # contentxml() is supposed to yeld a bytes
self.assertNotEqual(-1, result.find(b'''style:family="chart"'''))
if __name__ == '__main__':
unittest.main()
|