Commit 46d3e992 authored by Tatuya Kamada's avatar Tatuya Kamada

- when using ReportSection recreate a element name

- fix the address in the GPL 
- append XML validation


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@26509 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent f12c3a54
...@@ -22,12 +22,12 @@ ...@@ -22,12 +22,12 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
# # USA.
############################################################################## ##############################################################################
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.CMFCore.utils import _checkPermission, getToolByName from Products.CMFCore.utils import _checkPermission
from Products.PythonScripts.Utility import allow_class from Products.PythonScripts.Utility import allow_class
from Products.ERP5Type import PropertySheet, Permissions from Products.ERP5Type import PropertySheet, Permissions
from Products.ERP5Form.ListBox import ListBox from Products.ERP5Form.ListBox import ListBox
...@@ -316,14 +316,15 @@ class ODFStrategy(Implicit): ...@@ -316,14 +316,15 @@ class ODFStrategy(Implicit):
return ooo_builder return ooo_builder
def _replaceXmlByForm(self, element_tree=None, form=None, here=None, def _replaceXmlByForm(self, element_tree=None, form=None, here=None,
extra_context=None, ooo_builder=None): extra_context=None, ooo_builder=None, iteration_index=0):
field_list = form.get_fields(include_disabled=1) field_list = form.get_fields(include_disabled=1)
REQUEST = get_request() REQUEST = get_request()
for (count, field) in enumerate(field_list): for (count, field) in enumerate(field_list):
if isinstance(field, ListBox): if isinstance(field, ListBox):
element_tree = self._appendTableByListbox(element_tree=element_tree, element_tree = self._appendTableByListbox(element_tree=element_tree,
listbox=field, listbox=field,
REQUEST=REQUEST) REQUEST=REQUEST,
iteration_index=iteration_index)
elif isinstance(field, FormBox): elif isinstance(field, FormBox):
if not hasattr(here, field.get_value('formbox_target_id')): if not hasattr(here, field.get_value('formbox_target_id')):
continue continue
...@@ -332,23 +333,25 @@ class ODFStrategy(Implicit): ...@@ -332,23 +333,25 @@ class ODFStrategy(Implicit):
field=field, field=field,
form=sub_form, form=sub_form,
extra_context=extra_context, extra_context=extra_context,
ooo_builder=ooo_builder) ooo_builder=ooo_builder,
iteration_index=iteration_index)
elif isinstance(field, ImageField): elif isinstance(field, ImageField):
element_tree = self._replaceXmlByImageField(element_tree=element_tree, element_tree = self._replaceXmlByImageField(element_tree=element_tree,
image_field=field, image_field=field,
ooo_builder=ooo_builder) ooo_builder=ooo_builder,
iteration_index=iteration_index)
else: else:
element_tree = self._replaceNodeViaReference(element_tree=element_tree, element_tree = self._replaceNodeViaReference(element_tree=element_tree,
field=field) field=field, iteration_index=iteration_index)
return element_tree return element_tree
def _replaceNodeViaReference(self, element_tree=None, field=None): def _replaceNodeViaReference(self, element_tree=None, field=None, iteration_index=0):
"""replace nodes (e.g. paragraphs) via ODF reference""" """replace nodes (e.g. paragraphs) via ODF reference"""
element_tree = self._replaceNodeViaRangeReference(element_tree=element_tree, field=field) element_tree = self._replaceNodeViaRangeReference(element_tree=element_tree, field=field)
element_tree = self._replaceNodeViaPointReference(element_tree=element_tree, field=field) element_tree = self._replaceNodeViaPointReference(element_tree=element_tree, field=field)
return element_tree return element_tree
def _replaceNodeViaPointReference(self, element_tree=None, field=None): def _replaceNodeViaPointReference(self, element_tree=None, field=None, iteration_index=0):
"""replace via ODF point reference """replace via ODF point reference
point reference example: point reference example:
...@@ -370,9 +373,14 @@ class ODFStrategy(Implicit): ...@@ -370,9 +373,14 @@ class ODFStrategy(Implicit):
paragraph_node.text = value paragraph_node.text = value
else: else:
self._appendParagraphsWithLineList(target_node=target_node, line_list=field_value) self._appendParagraphsWithLineList(target_node=target_node, line_list=field_value)
# set when using report section
self._setUniqueElementName(base_name=field.id,
iteration_index=iteration_index,
xpath=reference_xpath,
element_tree=element_tree)
return element_tree return element_tree
def _replaceNodeViaRangeReference(self, element_tree=None, field=None): def _replaceNodeViaRangeReference(self, element_tree=None, field=None, iteration_index=0):
"""replace via ODF range reference """replace via ODF range reference
range reference example: range reference example:
...@@ -395,6 +403,12 @@ class ODFStrategy(Implicit): ...@@ -395,6 +403,12 @@ class ODFStrategy(Implicit):
node.tail = '' node.tail = ''
else: else:
self._appendParagraphsWithLineList(target_node=target_node, line_list=field_value) self._appendParagraphsWithLineList(target_node=target_node, line_list=field_value)
# set when using report section
self._setUniqueElementName(base_name=field.id,
iteration_index=iteration_index,
xpath=range_reference_xpath,
element_tree=element_tree)
return element_tree return element_tree
def _appendParagraphsWithLineList(self, target_node=None, line_list=None): def _appendParagraphsWithLineList(self, target_node=None, line_list=None):
...@@ -459,39 +473,57 @@ class ODFStrategy(Implicit): ...@@ -459,39 +473,57 @@ class ODFStrategy(Implicit):
if index is 0: if index is 0:
office_body.remove(frame_paragraph) office_body.remove(frame_paragraph)
else: else:
self._setReportSectionFrameName(report_method_name=report_method.__name__, self._setUniqueElementName(base_name=report_method.__name__,
frame_paragraph_index=index, iteration_index=index,
frame_paragraph_element_tree=frame_paragraph_element_tree) xpath=report_section_frame_xpath,
element_tree=frame_paragraph_element_tree)
frame_paragraph_element_tree = self._replaceXmlByForm(element_tree=frame_paragraph_element_tree, frame_paragraph_element_tree = self._replaceXmlByForm(element_tree=frame_paragraph_element_tree,
form=form, form=form,
here=here, here=here,
extra_context=extra_context, extra_context=extra_context,
ooo_builder=ooo_builder) ooo_builder=ooo_builder,
iteration_index=index)
office_body.insert(frame_paragraph_index, frame_paragraph_element_tree) office_body.insert(frame_paragraph_index, frame_paragraph_element_tree)
frame_paragraph_index += 1 frame_paragraph_index += 1
report_item.popReport(portal_object, render_prefix=None) report_item.popReport(portal_object, render_prefix=None)
return element_tree return element_tree
def _setReportSectionFrameName(self, def _setUniqueElementName(self, base_name='', iteration_index=0, xpath='', element_tree=None):
report_method_name='', """create a unique element name and set it to the element tree
frame_paragraph_index=0,
frame_paragraph_element_tree=None): Keyword arguments:
report_section_frame_name = "%s_%s" % (report_method_name, frame_paragraph_index) base_name -- the base name of the element
draw_name_attribute = '{%s}name' % frame_paragraph_element_tree.nsmap['draw'] iteration_index -- iteration index
report_section_frame = frame_paragraph_element_tree.xpath( xpath -- xpath expression which was used to search the element
'draw:frame[@draw:name="%s"]' % report_method_name, element_tree -- element tree
namespaces=frame_paragraph_element_tree.nsmap) """
if len(report_section_frame) is 0: if iteration_index is 0:
return return
report_section_frame[0].set(draw_name_attribute, report_section_frame_name) def getNameAttribute(target_element=None):
if target_element is None:
return None
attrib = target_element.attrib
for key in attrib.keys():
if key.endswith("}name"):
return key
return None
odf_element_name = "%s_%s" % (base_name, iteration_index)
result_list = element_tree.xpath(xpath, namespaces=element_tree.nsmap)
if len(result_list) is 0:
return
target_element = result_list[0]
name_attribute = getNameAttribute(target_element)
if name_attribute is not None:
target_element.set(name_attribute, odf_element_name)
def _replaceXmlByFormbox(self, def _replaceXmlByFormbox(self,
element_tree=None, element_tree=None,
field=None, field=None,
form=None, form=None,
extra_context=None, extra_context=None,
ooo_builder=None): ooo_builder=None,
iteration_index=0):
field_id = field.id field_id = field.id
enabled = field.get_value('enabled') enabled = field.get_value('enabled')
draw_xpath = '//draw:frame[@draw:name="%s"]/draw:text-box/*' % field_id draw_xpath = '//draw:frame[@draw:name="%s"]/draw:text-box/*' % field_id
...@@ -504,14 +536,24 @@ class ODFStrategy(Implicit): ...@@ -504,14 +536,24 @@ class ODFStrategy(Implicit):
if not enabled: if not enabled:
office_body.remove(frame_paragraph) office_body.remove(frame_paragraph)
return element_tree return element_tree
# set when using report section
self._setUniqueElementName(base_name=field_id,
iteration_index=iteration_index,
xpath=draw_xpath,
element_tree=element_tree)
self._replaceXmlByForm(element_tree=frame_paragraph, self._replaceXmlByForm(element_tree=frame_paragraph,
form=form, form=form,
here=extra_context['here'], here=extra_context['here'],
extra_context=extra_context, extra_context=extra_context,
ooo_builder=ooo_builder) ooo_builder=ooo_builder,
iteration_index=iteration_index)
return element_tree return element_tree
def _replaceXmlByImageField(self, element_tree=None, image_field=None, ooo_builder=None): def _replaceXmlByImageField(self,
element_tree=None,
image_field=None,
ooo_builder=None,
iteration_index=0):
alt = image_field.get_value('description') or image_field.get_value('title') alt = image_field.get_value('description') or image_field.get_value('title')
image_xpath = '//draw:frame[@draw:name="%s"]/*' % image_field.id image_xpath = '//draw:frame[@draw:name="%s"]/*' % image_field.id
image_list = element_tree.xpath(image_xpath, namespaces=element_tree.nsmap) image_list = element_tree.xpath(image_xpath, namespaces=element_tree.nsmap)
...@@ -531,6 +573,11 @@ class ODFStrategy(Implicit): ...@@ -531,6 +573,11 @@ class ODFStrategy(Implicit):
image_frame = image_node.getparent() image_frame = image_node.getparent()
image_frame.set('{%s}width' % element_tree.nsmap['svg'], picture_size[0]) image_frame.set('{%s}width' % element_tree.nsmap['svg'], picture_size[0])
image_frame.set('{%s}height' % element_tree.nsmap['svg'], picture_size[1]) image_frame.set('{%s}height' % element_tree.nsmap['svg'], picture_size[1])
# set when using report section
self._setUniqueElementName(base_name=image_field.id,
iteration_index=iteration_index,
xpath=image_xpath,
element_tree=element_tree)
return element_tree return element_tree
def _createOdfUniqueFileName(self, path='', picture_type=''): def _createOdfUniqueFileName(self, path='', picture_type=''):
...@@ -583,7 +630,8 @@ class ODFStrategy(Implicit): ...@@ -583,7 +630,8 @@ class ODFStrategy(Implicit):
def _appendTableByListbox(self, def _appendTableByListbox(self,
element_tree=None, element_tree=None,
listbox=None, listbox=None,
REQUEST=None): REQUEST=None,
iteration_index=0):
table_id = listbox.id table_id = listbox.id
table_xpath = '//table:table[@table:name="%s"]' % table_id table_xpath = '//table:table[@table:name="%s"]' % table_id
# this list should be one item list # this list should be one item list
...@@ -642,11 +690,21 @@ class ODFStrategy(Implicit): ...@@ -642,11 +690,21 @@ class ODFStrategy(Implicit):
row = self._updateColumnValue(row, listbox_column_list) row = self._updateColumnValue(row, listbox_column_list)
newtable.append(row) newtable.append(row)
self._setUniqueElementName(base_name=table_id,
iteration_index=iteration_index,
xpath=table_xpath,
element_tree=newtable)
parent_paragraph.insert(target_index, newtable) parent_paragraph.insert(target_index, newtable)
return element_tree return element_tree
def _copyRowStyle(self, table_row_list=[], has_header_rows=False): def _copyRowStyle(self, table_row_list=[], has_header_rows=False):
def removeOfficeAttribute(row):
if row is None or has_header_rows: return
odf_cell_list = row.findall("{%s}table-cell" % row.nsmap['table'])
for odf_cell in odf_cell_list:
self._removeColumnValue(odf_cell)
row_top = None row_top = None
row_middle = None row_middle = None
row_bottom = None row_bottom = None
...@@ -667,6 +725,9 @@ class ODFStrategy(Implicit): ...@@ -667,6 +725,9 @@ class ODFStrategy(Implicit):
row_top = deepcopy(table_row_list[0]) row_top = deepcopy(table_row_list[0])
row_middle = deepcopy(table_row_list[1]) row_middle = deepcopy(table_row_list[1])
row_bottom = deepcopy(table_row_list[-1]) row_bottom = deepcopy(table_row_list[-1])
# remove office attribute if create a new header row
removeOfficeAttribute(row_top)
return (row_top, row_middle, row_bottom) return (row_top, row_middle, row_bottom)
def _updateColumnValue(self, row=None, listbox_column_list=[]): def _updateColumnValue(self, row=None, listbox_column_list=[]):
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
# USA.
# #
############################################################################## ##############################################################################
...@@ -144,6 +145,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -144,6 +145,7 @@ class TestFormPrintout(ERP5TypeTestCase):
'application/vnd.oasis.opendocument.text; charset=utf-8') 'application/vnd.oasis.opendocument.text; charset=utf-8')
self.assertEqual(request.RESPONSE.getHeader('content-disposition'), self.assertEqual(request.RESPONSE.getHeader('content-disposition'),
'inline;filename="Foo_viewAsPrintout.odt"') 'inline;filename="Foo_viewAsPrintout.odt"')
self._validate(odf_document)
# 2. Normal case: change the field value and check again the ODF document # 2. Normal case: change the field value and check again the ODF document
test1.setTitle("Changed Title!") test1.setTitle("Changed Title!")
...@@ -153,6 +155,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -153,6 +155,7 @@ class TestFormPrintout(ERP5TypeTestCase):
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertTrue(content_xml.find("Changed Title!") > 0) self.assertTrue(content_xml.find("Changed Title!") > 0)
self._validate(odf_document)
# 3. False case: change the field name # 3. False case: change the field name
test1.setTitle("you cannot find") test1.setTitle("you cannot find")
...@@ -164,6 +167,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -164,6 +167,7 @@ class TestFormPrintout(ERP5TypeTestCase):
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertFalse(content_xml.find("you cannot find") > 0) self.assertFalse(content_xml.find("you cannot find") > 0)
self._validate(odf_document)
# put back # put back
foo_form.manage_renameObject('xxx_title', 'my_title', REQUEST=request) foo_form.manage_renameObject('xxx_title', 'my_title', REQUEST=request)
...@@ -191,6 +195,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -191,6 +195,7 @@ class TestFormPrintout(ERP5TypeTestCase):
self.assertTrue(content_xml.find("call!") > 0) self.assertTrue(content_xml.find("call!") > 0)
# when just call FormPrintout, it does not change content-type # when just call FormPrintout, it does not change content-type
self.assertEqual(request.RESPONSE.getHeader('content-type'), 'text/html') self.assertEqual(request.RESPONSE.getHeader('content-type'), 'text/html')
self._validate(odf_document)
# 5. Normal case: utf-8 string # 5. Normal case: utf-8 string
test1.setTitle("Français") test1.setTitle("Français")
...@@ -199,6 +204,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -199,6 +204,7 @@ class TestFormPrintout(ERP5TypeTestCase):
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertTrue(content_xml.find("Français") > 0) self.assertTrue(content_xml.find("Français") > 0)
self._validate(odf_document)
# 6. Normal case: unicode string # 6. Normal case: unicode string
test1.setTitle(u'Français test2') test1.setTitle(u'Français test2')
...@@ -207,6 +213,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -207,6 +213,7 @@ class TestFormPrintout(ERP5TypeTestCase):
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertTrue(content_xml.find("Français test2") > 0) self.assertTrue(content_xml.find("Français test2") > 0)
self._validate(odf_document)
def test_02_Table_01_Normal(self, run=run_all_test): def test_02_Table_01_Normal(self, run=run_all_test):
"""To test listbox and ODF table mapping """To test listbox and ODF table mapping
...@@ -258,6 +265,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -258,6 +265,7 @@ class TestFormPrintout(ERP5TypeTestCase):
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertTrue(content_xml.find("foo_title_1") > 0) self.assertTrue(content_xml.find("foo_title_1") > 0)
self._validate(odf_document)
def test_02_Table_02_SmallerThanListboxColumns(self, run=run_all_test): def test_02_Table_02_SmallerThanListboxColumns(self, run=run_all_test):
"""2. Irregular case: listbox columns count smaller than table columns count""" """2. Irregular case: listbox columns count smaller than table columns count"""
...@@ -300,6 +308,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -300,6 +308,7 @@ class TestFormPrintout(ERP5TypeTestCase):
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertFalse(content_xml.find("foo_title_1") > 0) self.assertFalse(content_xml.find("foo_title_1") > 0)
self.assertTrue(content_xml.find("foo_title_2") > 0) self.assertTrue(content_xml.find("foo_title_2") > 0)
self._validate(odf_document)
def test_02_Table_03_ListboxColumnsLargerThanTable(self, run=run_all_test): def test_02_Table_03_ListboxColumnsLargerThanTable(self, run=run_all_test):
"""3. Irregular case: listbox columns count larger than table columns count""" """3. Irregular case: listbox columns count larger than table columns count"""
...@@ -336,6 +345,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -336,6 +345,7 @@ class TestFormPrintout(ERP5TypeTestCase):
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertFalse(content_xml.find("foo_title_2") > 0) self.assertFalse(content_xml.find("foo_title_2") > 0)
self.assertTrue(content_xml.find("foo_title_3") > 0) self.assertTrue(content_xml.find("foo_title_3") > 0)
self._validate(odf_document)
def test_02_Table_04_ListboxHasNotStat(self, run=run_all_test): def test_02_Table_04_ListboxHasNotStat(self, run=run_all_test):
"""4. Irregular case: listbox has not a stat line, but table has a stat line""" """4. Irregular case: listbox has not a stat line, but table has a stat line"""
...@@ -385,6 +395,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -385,6 +395,7 @@ class TestFormPrintout(ERP5TypeTestCase):
span_attribute = "{%s}number-columns-spanned" % content.nsmap['table'] span_attribute = "{%s}number-columns-spanned" % content.nsmap['table']
self.assertFalse(first_row_columns[0].attrib.has_key(span_attribute)) self.assertFalse(first_row_columns[0].attrib.has_key(span_attribute))
self.assertEqual(int(last_row_columns[0].attrib[span_attribute]), 2) self.assertEqual(int(last_row_columns[0].attrib[span_attribute]), 2)
self._validate(odf_document)
def test_02_Table_05_NormalSameLayout(self, run=run_all_test): def test_02_Table_05_NormalSameLayout(self, run=run_all_test):
"""5. Normal case: the listobx and the ODF table are same layout """5. Normal case: the listobx and the ODF table are same layout
...@@ -431,6 +442,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -431,6 +442,7 @@ class TestFormPrintout(ERP5TypeTestCase):
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertFalse(content_xml.find("foo_title_4") > 0) self.assertFalse(content_xml.find("foo_title_4") > 0)
self.assertTrue(content_xml.find("foo_title_5") > 0) self.assertTrue(content_xml.find("foo_title_5") > 0)
self._validate(odf_document)
# put back the field name # put back the field name
foo_form.manage_renameObject('listbox2', 'listbox', REQUEST=request) foo_form.manage_renameObject('listbox2', 'listbox', REQUEST=request)
...@@ -474,13 +486,14 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -474,13 +486,14 @@ class TestFormPrintout(ERP5TypeTestCase):
self.assertTrue(listboxline_list[1].getColumnProperty('title') == "foo_title_6") self.assertTrue(listboxline_list[1].getColumnProperty('title') == "foo_title_6")
odf_document = foo_printout.index_html(REQUEST=request) odf_document = foo_printout.index_html(REQUEST=request)
#test_output = open("/tmp/test_02_06_Table.odf", "w") test_output = open("/tmp/test_02_06_Table.odf", "w")
#test_output.write(odf_document) test_output.write(odf_document)
self.assertTrue(odf_document is not None) self.assertTrue(odf_document is not None)
builder = OOoBuilder(odf_document) builder = OOoBuilder(odf_document)
content_xml = builder.extract("content.xml") content_xml = builder.extract("content.xml")
self.assertFalse(content_xml.find("foo_title_5") > 0) self.assertFalse(content_xml.find("foo_title_5") > 0)
self.assertTrue(content_xml.find("foo_title_6") > 0) self.assertTrue(content_xml.find("foo_title_6") > 0)
self._validate(odf_document)
# put back the field name # put back the field name
foo_form.manage_renameObject('listbox3', 'listbox', REQUEST=request) foo_form.manage_renameObject('listbox3', 'listbox', REQUEST=request)
...@@ -530,7 +543,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -530,7 +543,7 @@ class TestFormPrintout(ERP5TypeTestCase):
date_value_attrib = "{%s}date-value" % content.nsmap['office'] date_value_attrib = "{%s}date-value" % content.nsmap['office']
self.assertTrue(date_column.attrib.has_key(date_value_attrib)) self.assertTrue(date_column.attrib.has_key(date_value_attrib))
self.assertEqual(date_column.attrib[date_value_attrib], '2009-04-20') self.assertEqual(date_column.attrib[date_value_attrib], '2009-04-20')
self._validate(odf_document)
def test_02_Table_08_Nodata(self, run=run_all_test): def test_02_Table_08_Nodata(self, run=run_all_test):
"""7. Normal case: list box has no data""" """7. Normal case: list box has no data"""
...@@ -564,6 +577,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -564,6 +577,7 @@ class TestFormPrintout(ERP5TypeTestCase):
odf_table_rows = content.xpath(table_row_xpath, namespaces=content.nsmap) odf_table_rows = content.xpath(table_row_xpath, namespaces=content.nsmap)
# no rows # no rows
self.assertEqual(len(odf_table_rows), 0) self.assertEqual(len(odf_table_rows), 0)
self._validate(odf_document)
def _test_03_Frame(self, run=run_all_test): def _test_03_Frame(self, run=run_all_test):
""" """
...@@ -667,6 +681,7 @@ return [] ...@@ -667,6 +681,7 @@ return []
frame_list = content.xpath(frame_xpath, namespaces=content.nsmap) frame_list = content.xpath(frame_xpath, namespaces=content.nsmap)
# the frame was removed # the frame was removed
self.assertEqual(len(frame_list), 0) self.assertEqual(len(frame_list), 0)
self._validate(odf_document)
def _test_05_Styles(self, run=run_all_test): def _test_05_Styles(self, run=run_all_test):
""" """
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment