Dado el siguiente script en Python:¿Cómo puedo incluir caracteres especiales (tabulación, nueva línea) en una cadena de resultados doctest de python?
# dedupe.py
import re
def dedupe_whitespace(s,spacechars='\t '):
"""Merge repeated whitespace characters.
Example:
>>> dedupe_whitespace(r"Green\t\tGround") # doctest: +REPORT_NDIFF
'Green\tGround'
"""
for w in spacechars:
s = re.sub(r"("+w+"+)", w, s)
return s
La función funciona como está previsto en el intérprete de Python:
$ python
>>> import dedupe
>>> dedupe.dedupe_whitespace('Purple\t\tHaze')
'Purple\tHaze'
>>> print dedupe.dedupe_whitespace('Blue\t\tSky')
Blue Sky
Sin embargo, el ejemplo doctest falla debido a los caracteres de tabulación se convierten en espacios antes de la comparación de los resultados cadena:
>>> import doctest, dedupe
>>> doctest.testmod(dedupe)
da
Failed example:
dedupe_whitespace(r"Green Ground") #doctest: +REPORT_NDIFF
Differences (ndiff with -expected +actual):
- 'Green Ground'
? -
+ 'Green Ground'
¿Cómo puedo codificar caracteres de tabulación en una cadena doctest heredoc para que la comparación de resultados de prueba se realice de forma adecuada?
Genial. Tal vez funcione porque no hay un carácter de tabulación en el literal de cadena que sea parte de un doctest statement. La pestaña en la respuesta literal de la cadena debe ser dejada sola. ¡Así que componer la cadena de prueba que contiene pestañas fuera de las citas heredoc y usar la notación Raw heredoc podría funcionar! – hobs
¡Me gusta el truco de str.join (iterable)! – hobs