Commit 34efdd03 authored by Romain Courteaud's avatar Romain Courteaud

Add translation test, which check the current side effect of the translation

indexation.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@25065 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 7337014e
##############################################################################
#
# Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
# Romain Courteaud <romain@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
import os, sys
if __name__ == '__main__':
execfile(os.path.join(sys.path[0], 'framework.py'))
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from AccessControl.SecurityManagement import newSecurityManager, \
noSecurityManager
from Products.ERP5Type.tests.Sequence import Sequence, SequenceList
from string import zfill
import sys
from Products.ERP5Type.Message import Message
# dependency order
target_business_templates = (
'erp5_base',
'erp5_trade',
'erp5_pdf_editor',
'erp5_pdf_style',
'erp5_pdm',
'erp5_accounting',
'erp5_invoicing',
'erp5_apparel',
## 'erp5_banking_core',
## 'erp5_banking_cash',
## 'erp5_banking_check',
## 'erp5_banking_inventory',
'erp5_budget',
'erp5_public_accounting_budget',
'erp5_commerce',
'erp5_consulting',
'erp5_ingestion',
'erp5_ingestion_mysql_innodb_catalog',
'erp5_crm',
'erp5_web',
'erp5_dms',
'erp5_forge',
'erp5_immobilisation',
'erp5_item',
'erp5_mrp',
'erp5_payroll',
'erp5_project',
'erp5_calendar',
'erp5_l10n_fr',
'erp5_l10n_ja',
'erp5_l10n_pl_PL',
'erp5_l10n_pt-BR',
)
class TestTranslation(ERP5TypeTestCase):
run_all_test = 1
domain = 'erp5_ui'
lang = 'en'
def getTitle(self):
return "Translation Test"
def getBusinessTemplateList(self):
""" """
return target_business_templates
def getTranslation(self, msgid):
result = self.portal.Localizer.translate(
domain=self.domain, msgid=msgid, lang=self.lang)
if (result == msgid) and (self.lang != 'en'):
result = None
return result
def logMessage(self, message):
self.message += '%s\n' % message
def checkWorkflowStateTitle(self, quiet=0, run=run_all_test):
"""
Test workflow state title translation.
Check that using portal_catalog can not return strange results to the user.
Each translation must be only related to one state ID.
"""
if not run: return
self.message = '\n'
translation_dict = {}
workflow_tool = self.portal.portal_workflow
for workflow_id in workflow_tool.objectIds():
workflow = workflow_tool._getOb(workflow_id)
class_name = workflow.__class__.__name__
if class_name == 'DCWorkflowDefinition':
for state in workflow.states.items():
state_title = state[1].title
state_id = state[0]
translated_state_title = self.getTranslation(state_title)
if translated_state_title is not None:
if translation_dict.has_key(translated_state_title):
translation_dict[translated_state_title].add(state_id)
else:
translation_dict[translated_state_title] = set([state_id])
for key, value in translation_dict.items():
if len(value) == 1:
translation_dict.pop(key)
if translation_dict != {}:
# State ID has multiple translation associated, and it leads to
# unexpected results for the user when using portal catalog.
rejected_key_list = translation_dict.keys()
result_dict = dict([(x, []) for x in rejected_key_list])
error_dict = dict([(x, []) for x in rejected_key_list])
error = 0
# Browse all workflows to ease fixing this issue.
for workflow in self.portal.portal_workflow.objectValues():
if workflow.__class__.__name__ == 'DCWorkflowDefinition':
workflow_id = workflow.id
workflow_dict = {}
for state_id, state in workflow.states._mapping.items():
state_title = state.title
translated_state_title = \
self.portal.Localizer.erp5_ui.gettext(state_title, lang=self.lang)
if translated_state_title in rejected_key_list:
result_dict[translated_state_title].append(
(workflow_id, state_id, state_title))
# XXX To be improved
not_used_workflow_id_list = []
for key, item_list in result_dict.items():
wrong_state_id_list = [x[1] for x in item_list]
for workflow_id, wrong_state_id, state_title in item_list:
if workflow_id not in not_used_workflow_id_list:
workflow = self.portal.portal_workflow._getOb(workflow_id)
state_id_list = []
for state_id in workflow.states._mapping.keys():
if (state_id in wrong_state_id_list) and \
(state_id != wrong_state_id):
state_id_list.append(state_id)
if len(state_id_list) != 0:
error_dict[key].append((
workflow_id, wrong_state_id, state_title, state_id_list))
error = 1
if error:
for key, item_list in error_dict.items():
if len(item_list) != 0:
self.logMessage('\n%s' % key.encode('utf-8'))
self.logMessage('\t### Potential problems ###')
for item in item_list:
# XXX Improve rendering
self.logMessage(
"\t'%s'\t'%s'\t'%s'\t'%s'" % \
item)
self.logMessage('\n\t### Because of these ###')
for item in result_dict[key]:
# XXX Improve rendering
self.logMessage(
"\t'%s'\t'%s'\t'%s'" % \
item)
self.fail(self.message)
def test_01_EnglishTranslation(self, quiet=0, run=run_all_test):
"""
Test English translation
"""
self.lang = 'en'
self.checkWorkflowStateTitle(quiet=quiet, run=run)
def test_02_FrenchTranslation(self, quiet=0, run=run_all_test):
"""
Test French translation
"""
self.lang = 'fr'
self.checkWorkflowStateTitle(quiet=quiet, run=run)
def test_03_JapaneseTranslation(self, quiet=0, run=run_all_test):
"""
Test Japanese translation
"""
self.lang = 'ja'
self.checkWorkflowStateTitle(quiet=quiet, run=run)
def test_04_PolishTranslation(self, quiet=0, run=run_all_test):
"""
Test Polish translation
"""
self.lang = 'pl'
self.checkWorkflowStateTitle(quiet=quiet, run=run)
def test_05_PortugueseTranslation(self, quiet=0, run=run_all_test):
"""
Test Portuguese translation
"""
self.lang = 'pt-BR'
self.checkWorkflowStateTitle(quiet=quiet, run=run)
if __name__ == '__main__':
framework()
else:
import unittest
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestTranslation))
return suite
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