Cómo probar un saneador de HTML para que la prueba valga algo
Un saneador con tests verdes puede no hacer nada. Tres pasos para probarlo de modo que la suite mida lo que el saneador impide.
También en: English
Si aceptás HTML de un editor, tu saneador tiene tests verdes. La pregunta es verdes contra qué.
Un test que confirma que <strong> sobrevive lo pasa también un return html. Esa prueba no mide el saneado: mide que el markup legítimo sigue ahí.
1. Corré la suite contra nada
Antes de correrla contra el saneador, corrala contra un pass-through, una función que devuelve la entrada tal cual.
En un caso real, 18 de 23 tests fallaron. Esos 18 son los que miden algo: lo que el saneador tiene que impedir. Con el saneador puesto, 23 de 23.
Si tu suite pasa entera contra el pass-through, no está probando nada.
2. Probá sobre el documento completo, por la ruta real
Un test de la función suelta no alcanza. Probá también contra la ruta HTTP real, en el navegador y con cookie de sesión, con cuatro entradas:
- un
<script> - un
onerror= - un
hrefconjavascript: - un
onerrordentro de la escotillahtml
Ninguna sobrevivió, y el markup legítimo sí.
3. Dejá que los tests le encuentren bugs al saneador
Salen bugs reales, por ejemplo dos:
- Minúsculas. Bajar a minúscula todos los nombres rompía el SVG:
viewBoxdistingue mayúsculas. - Espacio tras
<. Permitir un espacio entre<y el nombre convertía «a < b y c > d» en un<b>abierto.
Los dos salieron de los tests del propio saneador.
En resumen
Reemití cada etiqueta desde cero en vez de limpiar la que llegó, probá sobre el documento completo, y corré el test contra nada antes de correrlo contra el código.
¿Tenés un caso donde querés ver esto andando? Contanos qué hace tu negocio y lo armamos sobre tu material.