LaTeX exécutable en doctest PythonPour un
nouveau projet, je dois pouvoir exécuter des tests fonctionnels Zope 3
contenus dans des exemples de code dans des fichiers au format LaTeX.
Les fichiers LaTeX peuvent bien sûr être appelés directement, mais l'objectif était de pouvoir marquer certains exemples de code "à tester", "à ne pas tester", pour plus de souplesse. Le module textest fourni un set minimal de classes et fonctions qui permet d'utiliser des fichiers LaTeX comme doctests fonctionnels, avec une extraction à la volée des sections Verbatim. Il peut être ensuite utilisé dans un script de test, pour que le script de test de Zope 3 exécute l'ensemble des tests. Ce script est une copie du script que l'on trouve dans le module zope.testing.functional, avec quelques modifications, et une petite boucle sur les fichiers *.tex du répertoire courant. Exemple de script:
import doctest
import os
import unittest
from zope.app.testing import setup, functional
from textest import TexFileSuite
def FunctionalTexFileSuite(filename, **kw):
globs = kw.setdefault('globs', {})
globs['http'] = functional.HTTPCaller()
globs['getRootFolder'] = functional.getRootFolder
globs['sync'] = functional.sync
kw['package'] = doctest._normalize_module(kw.get('package'))
kwsetUp = kw.get('setUp')
def setUp(test):
functional.FunctionalTestSetup().setUp()
setup.setUpTestAsModule(test, filename.replace('.', '_'))
if kwsetUp is not None:
kwsetUp(test)
kw['setUp'] = setUp
kwtearDown = kw.get('tearDown')
def tearDown(test):
if kwtearDown is not None:
kwtearDown(test)
try:
setup.tearDownTestAsModule(test)
except KeyError:
# XXX see why
pass
functional.FunctionalTestSetup().tearDown()
kw['tearDown'] = tearDown
if 'optionflags' not in kw:
old = doctest.set_unittest_reportflags(0)
doctest.set_unittest_reportflags(old)
kw['optionflags'] = (old
| doctest.ELLIPSIS
| doctest.REPORT_NDIFF
| doctest.NORMALIZE_WHITESPACE)
suite = TexFileSuite(filename, **kw)
suite.layer = functional.Functional
return suite
current_folder = os.path.dirname(__file__)
if current_folder == '':
current_folder = '.'
def test_suite():
extractor = doctest.DocTestParser()
files = [file for file in os.listdir(current_folder)
if file.endswith('.tex')]
tests = [FunctionalTexFileSuite(file) for file in files]
return unittest.TestSuite(tests)
if __name__ == '__main__':
import unittest
unittest.main(defaultTest='test_suite')
Ce système peut être perfectionné et rendu générique, pour fonctionner avec tout type de format (OOo, Doc, etc..)
|
A propos
|