diff --git a/product/ERP5/tests/testSpellChecking.py b/product/ERP5/tests/testSpellChecking.py new file mode 100644 index 0000000000000000000000000000000000000000..0eb0caedaf36c26c411bf2e77f53db5ab8093358 --- /dev/null +++ b/product/ERP5/tests/testSpellChecking.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. +# Fabien Morin <fabien@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 unittest +from Products.ERP5.tests.testXHTML import TestXHTML +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +import popen2 + +class aspell: + def __init__(self): + self._f = popen2.Popen3("aspell -l en_GB -a") + self._f.fromchild.readline() #skip the credit line + def __call__(self, words): + words = words.split(' ') + output = [] + for word in words: + self._f.tochild.write(word+'\n') + self._f.tochild.flush() + s = self._f.fromchild.readline().strip() + self._f.fromchild.readline() #skip the blank line + if s == "*": + output.append(None) + elif s[0] == '#': + output.append("No Suggestions") + else: + output.append(s.split(':')[1].strip().split(', ')) + return output + +class TestSpellChecking(ERP5TypeTestCase): + + run_all_test = 1 + spellChecker = aspell() + + def getTitle(self): + return "Spell Checking Test" + + def getBusinessTemplateList(self): + return ( + 'erp5_base',) + + def validate_spell(self, word): + ''' + validate the spell. Return True if the word is well spelled, False else, + whith an error message + ''' + result = self.spellChecker(word) + message = '' + if result != [None] and result != ['No Suggestions']: + message = '"%s" is missspelled, suggestion are : "%s"' % \ + (word, '", "'.join(result[0])) + if result == ['No Suggestions']: + message = '"%s" is missspelled, there is no suggestion.' % word + return result == [None], message + + def test_checkSpellChecker(self): + # check a well spelled world + self.assertEquals((self.validate_spell('cancelled')), (True, '')) + + # check some suggestion are given for a small mistake + self.assertEquals(self.validate_spell('canceled')[0], False) + self.assertTrue(len(self.validate_spell('canceled')[1]) > 0) + + # check no suggestion are given for a very bad spelled word + self.assertEquals(self.validate_spell('cancelefqfdsqfdsfqdsf')[0], False) + self.assertTrue('no suggestion' in self.validate_spell('cancelefqfdsqfdsfqdsf')[1]) + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestSpellChecking)) + return suite