# -*- coding: utf-8 -*- # copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of logilab-common. # # logilab-common is free software: you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation, either version 2.1 of the License, or (at your option) any # later version. # # logilab-common 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License along # with logilab-common. If not, see . """ unit tests for module textutils squeleton generated by /home/syt/cvs_work/logilab/pyreverse/py2tests.py on Sep 08 at 09:1:31 """ import doctest import re from os import linesep from logilab.common import textutils as tu from logilab.common.testlib import TestCase, unittest_main if linesep != '\n': import re LINE_RGX = re.compile(linesep) def ulines(string): return LINE_RGX.sub('\n', string) else: def ulines(string): return string class NormalizeTextTC(TestCase): def test_known_values(self): self.assertEqual(ulines(tu.normalize_text('''some really malformated text. With some times some veeeeeeeeeeeeeeerrrrryyyyyyyyyyyyyyyyyyy loooooooooooooooooooooong linnnnnnnnnnnes and empty lines! ''')), '''some really malformated text. With some times some veeeeeeeeeeeeeeerrrrryyyyyyyyyyyyyyyyyyy loooooooooooooooooooooong linnnnnnnnnnnes and empty lines!''') self.assertMultiLineEqual(ulines(tu.normalize_text('''\ some ReST formated text ======================= With some times some veeeeeeeeeeeeeeerrrrryyyyyyyyyyyyyyyyyyy loooooooooooooooooooooong linnnnnnnnnnnes and normal lines! another paragraph ''', rest=True)), '''\ some ReST formated text ======================= With some times some veeeeeeeeeeeeeeerrrrryyyyyyyyyyyyyyyyyyy loooooooooooooooooooooong linnnnnnnnnnnes and normal lines! another paragraph''') def test_nonregr_unsplitable_word(self): self.assertEqual(ulines(tu.normalize_text('''petit complement : http://www.plonefr.net/blog/archive/2005/10/30/tester-la-future-infrastructure-i18n ''', 80)), '''petit complement : http://www.plonefr.net/blog/archive/2005/10/30/tester-la-future-infrastructure-i18n''') def test_nonregr_rest_normalize(self): self.assertEqual(ulines(tu.normalize_text("""... Il est donc evident que tout le monde doit lire le compte-rendu de RSH et aller discuter avec les autres si c'est utile ou necessaire. """, rest=True)), """... Il est donc evident que tout le monde doit lire le compte-rendu de RSH et aller discuter avec les autres si c'est utile ou necessaire.""") def test_normalize_rest_paragraph(self): self.assertEqual(ulines(tu.normalize_rest_paragraph("""**nico**: toto""")), """**nico**: toto""") def test_normalize_rest_paragraph2(self): self.assertEqual(ulines(tu.normalize_rest_paragraph(""".. _tdm: http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Table-des-matieres/.20_adaa41fb-c125-4919-aece-049601e81c8e_0_0.pdf .. _extrait: http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Extrait-du-livre/.20_d6eed0be-0d36-4384-be59-2dd09e081012_0_0.pdf""", indent='> ')), """> .. _tdm: > http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Table-des-matieres/.20_adaa41fb-c125-4919-aece-049601e81c8e_0_0.pdf > .. _extrait: > http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Extrait-du-livre/.20_d6eed0be-0d36-4384-be59-2dd09e081012_0_0.pdf""") def test_normalize_paragraph2(self): self.assertEqual(ulines(tu.normalize_paragraph(""".. _tdm: http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Table-des-matieres/.20_adaa41fb-c125-4919-aece-049601e81c8e_0_0.pdf .. _extrait: http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Extrait-du-livre/.20_d6eed0be-0d36-4384-be59-2dd09e081012_0_0.pdf""", indent='> ')), """> .. _tdm: > http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Table-des-matieres/.20_adaa41fb-c125-4919-aece-049601e81c8e_0_0.pdf > .. _extrait: > http://www.editions-eni.fr/Livres/Python-Les-fondamentaux-du-langage---La-programmation-pour-les-scientifiques-Extrait-du-livre/.20_d6eed0be-0d36-4384-be59-2dd09e081012_0_0.pdf""") class NormalizeParagraphTC(TestCase): def test_known_values(self): self.assertEqual(ulines(tu.normalize_text("""This package contains test files shared by the logilab-common package. It isn't necessary to install this package unless you want to execute or look at the tests.""", indent=' ', line_len=70)), """\ This package contains test files shared by the logilab-common package. It isn't necessary to install this package unless you want to execute or look at the tests.""") class GetCsvTC(TestCase): def test_known(self): self.assertEqual(tu.splitstrip('a, b,c '), ['a', 'b', 'c']) class UnitsTC(TestCase): def setUp(self): self.units = { 'm': 60, 'kb': 1024, 'mb': 1024*1024, } def test_empty_base(self): self.assertEqual(tu.apply_units('17', {}), 17) def test_empty_inter(self): def inter(value): return int(float(value)) * 2 result = tu.apply_units('12.4', {}, inter=inter) self.assertEqual(result, 12 * 2) self.assertIsInstance(result, float) def test_empty_final(self): # int('12.4') raise value error self.assertRaises(ValueError, tu.apply_units, '12.4', {}, final=int) def test_empty_inter_final(self): result = tu.apply_units('12.4', {}, inter=float, final=int) self.assertEqual(result, 12) self.assertIsInstance(result, int) def test_blank_base(self): result = tu.apply_units(' 42 ', {}, final=int) self.assertEqual(result, 42) def test_blank_space(self): result = tu.apply_units(' 1 337 ', {}, final=int) self.assertEqual(result, 1337) def test_blank_coma(self): result = tu.apply_units(' 4,298.42 ', {}) self.assertEqual(result, 4298.42) def test_blank_mixed(self): result = tu.apply_units('45, 317, 337', {}, final=int) self.assertEqual(result, 45317337) def test_unit_singleunit_singleletter(self): result = tu.apply_units('15m', self.units) self.assertEqual(result, 15 * self.units['m'] ) def test_unit_singleunit_multipleletter(self): result = tu.apply_units('47KB', self.units) self.assertEqual(result, 47 * self.units['kb'] ) def test_unit_singleunit_caseinsensitive(self): result = tu.apply_units('47kb', self.units) self.assertEqual(result, 47 * self.units['kb'] ) def test_unit_multipleunit(self): result = tu.apply_units('47KB 1.5MB', self.units) self.assertEqual(result, 47 * self.units['kb'] + 1.5 * self.units['mb']) def test_unit_with_blank(self): result = tu.apply_units('1 000 KB', self.units) self.assertEqual(result, 1000 * self.units['kb']) def test_unit_wrong_input(self): self.assertRaises(ValueError, tu.apply_units, '', self.units) self.assertRaises(ValueError, tu.apply_units, 'wrong input', self.units) self.assertRaises(ValueError, tu.apply_units, 'wrong13 input', self.units) self.assertRaises(ValueError, tu.apply_units, 'wrong input42', self.units) RGX = re.compile('abcd') class PrettyMatchTC(TestCase): def test_known(self): string = 'hiuherabcdef' self.assertEqual(ulines(tu.pretty_match(RGX.search(string), string)), 'hiuherabcdef\n ^^^^') def test_known_values_1(self): rgx = re.compile('(to*)') string = 'toto' match = rgx.search(string) self.assertEqual(ulines(tu.pretty_match(match, string)), '''toto ^^''') def test_known_values_2(self): rgx = re.compile('(to*)') string = ''' ... ... to to ... ... ''' match = rgx.search(string) self.assertEqual(ulines(tu.pretty_match(match, string)), ''' ... ... to to ^^ ... ...''') class UnquoteTC(TestCase): def test(self): self.assertEqual(tu.unquote('"toto"'), 'toto') self.assertEqual(tu.unquote("'l'inenarrable toto'"), "l'inenarrable toto") self.assertEqual(tu.unquote("no quote"), "no quote") class ColorizeAnsiTC(TestCase): def test_known(self): self.assertEqual(tu.colorize_ansi('hello', 'blue', 'strike'), '\x1b[9;34mhello\x1b[0m') self.assertEqual(tu.colorize_ansi('hello', style='strike, inverse'), '\x1b[9;7mhello\x1b[0m') self.assertEqual(tu.colorize_ansi('hello', None, None), 'hello') self.assertEqual(tu.colorize_ansi('hello', '', ''), 'hello') def test_raise(self): self.assertRaises(KeyError, tu.colorize_ansi, 'hello', 'bleu', None) self.assertRaises(KeyError, tu.colorize_ansi, 'hello', None, 'italique') class UnormalizeTC(TestCase): def test_unormalize_no_substitute(self): data = [(u'\u0153nologie', u'oenologie'), (u'\u0152nologie', u'OEnologie'), (u'l\xf8to', u'loto'), (u'été', u'ete'), (u'àèùéïîôêç', u'aeueiioec'), (u'ÀÈÙÉÏÎÔÊÇ', u'AEUEIIOEC'), (u'\xa0', u' '), # NO-BREAK SPACE managed by NFKD decomposition (u'\u0154', u'R'), (u'Pointe d\u2019Yves', u"Pointe d'Yves"), (u'Bordeaux\u2013Mérignac', u'Bordeaux-Merignac'), ] for input, output in data: yield self.assertEqual, tu.unormalize(input), output def test_unormalize_substitute(self): self.assertEqual(tu.unormalize(u'ab \u8000 cd', substitute='_'), 'ab _ cd') def test_unormalize_backward_compat(self): self.assertRaises(ValueError, tu.unormalize, u"\u8000") self.assertEqual(tu.unormalize(u"\u8000", substitute=''), u'') def load_tests(loader, tests, ignore): tests.addTests(doctest.DocTestSuite(tu)) return tests if __name__ == '__main__': unittest_main()