Browse Source

Nettoyage des tests. Pas la peine de conserver le code des anciennes fonctions :)

svn/root/tags/plugins/textwheel/1.5.0
marcimat@rezo.net 4 years ago
parent
commit
9b3b1bb0db
  1. 2
      .gitattributes
  2. 177
      tests/simpletest/data_test_typo.inc
  3. 177
      tests/simpletest/nettoyer_raccourcis_typo.php
  4. 152
      tests/simpletest/nettoyer_raccourcis_typo_old.php

2
.gitattributes

@ -304,10 +304,8 @@ tests/data/typo/unordered_list.txt -text
tests/data/typo/whitespace.html -text
tests/data/typo/whitespace.txt -text
tests/simpletest/all_tests.php -text
tests/simpletest/data_test_typo.inc -text
tests/simpletest/lanceur_spip.php -text
tests/simpletest/nettoyer_raccourcis_typo.php -text
tests/simpletest/nettoyer_raccourcis_typo_old.php -text
tests/squelettes/modeles/textwheel_block.html -text
tests/squelettes/modeles/textwheel_inline.html -text
tests/tw_propre.php -text

177
tests/simpletest/data_test_typo.inc

@ -1,177 +0,0 @@
<?php
trait Data_test_typo {
protected function _printTest(array $data, $nettoyer, $couper) {
$titre = isset($data['titre']) ? $data['titre'] : '';
if (!$this->assertEqual($nettoyer, $data['nettoyer'])) {
$this->reporter->paintFormattedMessage("Nettoyer_raccourcis_typo | $titre. Texte -> Attendu -> Reçu");
$this->reporter->paintFormattedMessage($data['texte']);
$this->reporter->paintFormattedMessage($data['nettoyer']);
$this->reporter->paintFormattedMessage($nettoyer);
}
if (!$this->assertEqual($couper, $data['couper'])) {
$this->reporter->paintFormattedMessage("Couper | $titre. Texte -> Attendu -> Reçu");
$this->reporter->paintFormattedMessage($data['texte']);
$this->reporter->paintFormattedMessage($data['couper']);
$this->reporter->paintFormattedMessage($couper);
}
}
function testNettoyerItalique(){
$this->_testData([[
'texte' => 'Un mot {italique}',
'couper' => 'Un mot italique',
'nettoyer' => 'Un mot italique',
],[
'texte' => '{Un texte italique}',
'couper' => 'Un texte italique',
'nettoyer' => 'Un texte italique',
]]);
}
function testNettoyerGras(){
$this->_testData([[
'texte' => 'Un mot {{gras}}',
'couper' => 'Un mot gras',
'nettoyer' => 'Un mot gras',
],[
'texte' => '{{Un texte gras}}',
'couper' => 'Un texte gras',
'nettoyer' => 'Un texte gras',
]]);
}
function testNettoyerIntertitre(){
$this->_testData([[
'texte' => '{{{Un intertitre}}}',
'couper' => 'Un intertitre',
'nettoyer' => 'Un intertitre',
],[
'texte' => "Ligne\n\n{{{Un intertitre}}}\n\nLigne",
'couper' => "Ligne\n\nUn intertitre\n\nLigne",
'nettoyer' => "Ligne\n\nUn intertitre\n\nLigne",
]]);
}
function testNettoyerLiens(){
$this->_testData([[
'texte' => 'Un lien [interne->article1]',
'couper' => 'Un lien interne',
'nettoyer' => 'Un lien interne',
],[
'texte' => 'Un lien [externe->http://example.org]',
'couper' => 'Un lien externe',
'nettoyer' => 'Un lien externe',
]]);
}
/**
* Les listes sont mises à plat
* 1 saut de ligne \n entre chaque, couper les réassemble en espace.
*
* @note
* Avant SPIP 3.2, 1 saut de paragraphe \n\n entre chaque (couper le laissait).
*/
function testNettoyerListes(){
$this->_testData([[
'texte' =>
"Une liste
-* un
-* deux
-* trois
",
'couper' => "Une liste un deux trois",
'nettoyer' => "Une liste\nun\ndeux\ntrois",
],[
'texte' =>
"Une liste avec ligne
-* un
-* deux
-* trois
",
'couper' => "Une liste avec ligne un deux trois",
'nettoyer' => "Une liste avec ligne\nun\ndeux\ntrois",
]]);
}
/**
* Les tableaux sont totalement supprimés.
* Enfin presque : remplacés par \n\n
* Le texte étant trimmé, \n en fins sont enlevés.
*
* @note
* Avant SPIP 3.2, les tableaux nétaient pas toujours correctement supprimés
*/
function testNettoyerTableaux(){
$this->_testData([[
// tableau sans sauts de ligne avant / après.
'titre' => 'tableau sans sauts de ligne avant / après',
'texte' =>
"| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |",
'couper' => "",
'nettoyer' => "",
],[
'texte' =>
"Un tableau sans ligne vide avant
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
",
'couper' => "Un tableau sans ligne vide avant",
'nettoyer' => "Un tableau sans ligne vide avant",
],[
'texte' =>
"Un tableau avec ligne vide avant
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
",
'couper' => "Un tableau avec ligne vide avant",
'nettoyer' => "Un tableau avec ligne vide avant",
],[
'texte' =>
"Un tableau avec ligne avant / après
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
Après
",
'couper' => "Un tableau avec ligne avant / après\n\nAprès",
'nettoyer' => "Un tableau avec ligne avant / après\n\nAprès",
]]);
}
/**
* Les notes sont supprimées.
*
* @note
* Avant 3.2 la regexp pouvait tuer pcre sur des textes longs
* ayant des notes mal fermées.
*/
function testNettoyerNotes(){
$this->_testData([[
'texte' => 'Une note bien fermée [[note 1]]',
'couper' => 'Une note bien fermée',
'nettoyer' => 'Une note bien fermée',
],[
'texte' => 'Une note mal fermée [[note 1]',
'couper' => 'Une note mal fermée [[note 1]',
'nettoyer' => 'Une note mal fermée [[note 1]',
],[
'texte' => 'Un lien dans une note [[note [lien->article1]]]',
'couper' => 'Un lien dans une note',
'nettoyer' => 'Un lien dans une note',
],[
'texte' => 'Lien et note ratée [[note [lien->article1]] ]',
'couper' => 'Lien et note ratée [[note lien] ]',
'nettoyer' => 'Lien et note ratée [[note lien] ]',
]]);
}
}

177
tests/simpletest/nettoyer_raccourcis_typo.php

@ -1,12 +1,9 @@
<?php
require_once('lanceur_spip.php');
require_once('data_test_typo.inc');
class Test_nettoyer_raccourcis_typo extends SpipTest {
use Data_test_typo;
public function __construct() {
parent::__construct("Tests de nettoyer_raccourcis_typo()");
include_spip('inc/lien');
@ -23,4 +20,178 @@ class Test_nettoyer_raccourcis_typo extends SpipTest {
$this->_printTest($d, $nettoyer, $couper);
}
}
protected function _printTest(array $data, $nettoyer, $couper) {
$titre = isset($data['titre']) ? $data['titre'] : '';
if (!$this->assertEqual($nettoyer, $data['nettoyer'])) {
$this->reporter->paintFormattedMessage("Nettoyer_raccourcis_typo | $titre. Texte -> Attendu -> Reçu");
$this->reporter->paintFormattedMessage($data['texte']);
$this->reporter->paintFormattedMessage($data['nettoyer']);
$this->reporter->paintFormattedMessage($nettoyer);
}
if (!$this->assertEqual($couper, $data['couper'])) {
$this->reporter->paintFormattedMessage("Couper | $titre. Texte -> Attendu -> Reçu");
$this->reporter->paintFormattedMessage($data['texte']);
$this->reporter->paintFormattedMessage($data['couper']);
$this->reporter->paintFormattedMessage($couper);
}
}
function testNettoyerItalique(){
$this->_testData([[
'texte' => 'Un mot {italique}',
'couper' => 'Un mot italique',
'nettoyer' => 'Un mot italique',
],[
'texte' => '{Un texte italique}',
'couper' => 'Un texte italique',
'nettoyer' => 'Un texte italique',
]]);
}
function testNettoyerGras(){
$this->_testData([[
'texte' => 'Un mot {{gras}}',
'couper' => 'Un mot gras',
'nettoyer' => 'Un mot gras',
],[
'texte' => '{{Un texte gras}}',
'couper' => 'Un texte gras',
'nettoyer' => 'Un texte gras',
]]);
}
function testNettoyerIntertitre(){
$this->_testData([[
'texte' => '{{{Un intertitre}}}',
'couper' => 'Un intertitre',
'nettoyer' => 'Un intertitre',
],[
'texte' => "Ligne\n\n{{{Un intertitre}}}\n\nLigne",
'couper' => "Ligne\n\nUn intertitre\n\nLigne",
'nettoyer' => "Ligne\n\nUn intertitre\n\nLigne",
]]);
}
function testNettoyerLiens(){
$this->_testData([[
'texte' => 'Un lien [interne->article1]',
'couper' => 'Un lien interne',
'nettoyer' => 'Un lien interne',
],[
'texte' => 'Un lien [externe->http://example.org]',
'couper' => 'Un lien externe',
'nettoyer' => 'Un lien externe',
]]);
}
/**
* Les listes sont mises à plat
* 1 saut de ligne \n entre chaque, couper les réassemble en espace.
*
* @note
* Avant SPIP 3.2, 1 saut de paragraphe \n\n entre chaque (couper le laissait).
*/
function testNettoyerListes(){
$this->_testData([[
'texte' =>
"Une liste
-* un
-* deux
-* trois
",
'couper' => "Une liste un deux trois",
'nettoyer' => "Une liste\nun\ndeux\ntrois",
],[
'texte' =>
"Une liste avec ligne
-* un
-* deux
-* trois
",
'couper' => "Une liste avec ligne un deux trois",
'nettoyer' => "Une liste avec ligne\nun\ndeux\ntrois",
]]);
}
/**
* Les tableaux sont totalement supprimés.
* Enfin presque : remplacés par \n\n
* Le texte étant trimmé, \n en fins sont enlevés.
*
* @note
* Avant SPIP 3.2, les tableaux n’étaient pas toujours correctement supprimés
*/
function testNettoyerTableaux(){
$this->_testData([[
// tableau sans sauts de ligne avant / après.
'titre' => 'tableau sans sauts de ligne avant / après',
'texte' =>
"| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |",
'couper' => "",
'nettoyer' => "",
],[
'texte' =>
"Un tableau sans ligne vide avant
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
",
'couper' => "Un tableau sans ligne vide avant",
'nettoyer' => "Un tableau sans ligne vide avant",
],[
'texte' =>
"Un tableau avec ligne vide avant
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
",
'couper' => "Un tableau avec ligne vide avant",
'nettoyer' => "Un tableau avec ligne vide avant",
],[
'texte' =>
"Un tableau avec ligne avant / après
| {{colonneA}} | {{colonneB}} |
| ligneA1 | ligneB1 |
| ligneA2 | ligneB2 |
Après
",
'couper' => "Un tableau avec ligne avant / après\n\nAprès",
'nettoyer' => "Un tableau avec ligne avant / après\n\nAprès",
]]);
}
/**
* Les notes sont supprimées.
*
* @note
* Avant 3.2 la regexp pouvait tuer pcre sur des textes longs
* ayant des notes mal fermées.
*/
function testNettoyerNotes(){
$this->_testData([[
'texte' => 'Une note bien fermée [[note 1]]',
'couper' => 'Une note bien fermée',
'nettoyer' => 'Une note bien fermée',
],[
'texte' => 'Une note mal fermée [[note 1]',
'couper' => 'Une note mal fermée [[note 1]',
'nettoyer' => 'Une note mal fermée [[note 1]',
],[
'texte' => 'Un lien dans une note [[note [lien->article1]]]',
'couper' => 'Un lien dans une note',
'nettoyer' => 'Un lien dans une note',
],[
'texte' => 'Lien et note ratée [[note [lien->article1]] ]',
'couper' => 'Lien et note ratée [[note lien] ]',
'nettoyer' => 'Lien et note ratée [[note lien] ]',
]]);
}
}

152
tests/simpletest/nettoyer_raccourcis_typo_old.php

@ -1,152 +0,0 @@
<?php
require_once('lanceur_spip.php');
require_once('data_test_typo.inc');
class Test_nettoyer_raccourcis_typo_old extends SpipTest {
use Data_test_typo;
public function __construct() {
parent::__construct("Tests de nettoyer_raccourcis_typo() anciens");
include_spip('inc/lien');
include_spip('inc/texte_mini');
}
protected function _testData(array $data) {
foreach ($data as $d) {
$nettoyer = static::nettoyer_raccourcis_typo_old($d['texte']);
$couper = static::couper_old($d['texte']);
$this->_printTest($d, $nettoyer, $couper);
}
}
public static function nettoyer_raccourcis_typo_old($texte, $connect = '') {
$texte = pipeline('nettoyer_raccourcis_typo', $texte);
if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {
include_spip('inc/texte');
foreach ($regs as $reg) {
list($titre, , ) = traiter_raccourci_lien_atts($reg[1]);
if (!$titre) {
$match = typer_raccourci($reg[count($reg) - 1]);
if (!isset($match[0])) {
$match[0] = '';
}
@list($type, , $id, , , , ) = $match;
if ($type) {
$url = generer_url_entite($id, $type, '', '', true);
if (is_array($url)) {
list($type, $id) = $url;
}
$titre = traiter_raccourci_titre($id, $type, $connect);
}
$titre = $titre ? $titre['titre'] : $match[0];
}
$titre = corriger_typo(supprimer_tags($titre));
$texte = str_replace($reg[0], $titre, $texte);
}
}
// supprimer les ancres
$texte = preg_replace(_RACCOURCI_ANCRE, "", $texte);
// supprimer les notes
$texte = preg_replace(",[[][[]([^]]|[]][^]])*[]][]],UimsS", "", $texte);
// supprimer les codes typos
$texte = str_replace(array('}', '{'), '', $texte);
// supprimer les tableaux
$texte = preg_replace(",(^|\r)\|.*\|(\r),s", "\r", $texte);
return $texte;
}
public static function couper_old($texte, $taille = 50, $suite = '&nbsp;(...)') {
if (!($length = strlen($texte)) or $taille <= 0) {
return '';
}
$offset = 400 + 2 * $taille;
while ($offset < $length
and strlen(preg_replace(",<(!--|\w|/)[^>]+>,Uims", "", substr($texte, 0, $offset))) < $taille) {
$offset = 2 * $offset;
}
if ($offset < $length
&& ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== null
) {
$p_tag_fermant = strpos($texte, '>', $offset);
if ($p_tag_fermant && ($p_tag_fermant < $p_tag_ouvrant)) {
$offset = $p_tag_fermant + 1;
} // prolonger la coupe jusqu'au tag fermant suivant eventuel
}
$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
// on utilise les \r pour passer entre les gouttes
$texte = str_replace("\r\n", "\n", $texte);
$texte = str_replace("\r", "\n", $texte);
// sauts de ligne et paragraphes
$texte = preg_replace("/\n\n+/", "\r", $texte);
$texte = preg_replace("/<(p|br)( [^>]*)?" . ">/", "\r", $texte);
// supprimer les traits, lignes etc
$texte = preg_replace("/(^|\r|\n)(-[-#\*]*|_ )/", "\r", $texte);
// travailler en accents charset
$texte = unicode2charset(html2unicode($texte, /* secure */
true));
if (!function_exists('nettoyer_raccourcis_typo')) {
include_spip('inc/lien');
}
$texte = static::nettoyer_raccourcis_typo_old($texte);
// supprimer les tags
$texte = supprimer_tags($texte);
$texte = trim(str_replace("\n", " ", $texte));
$texte .= "\n"; // marquer la fin
// corriger la longueur de coupe
// en fonction de la presence de caracteres utf
if ($GLOBALS['meta']['charset'] == 'utf-8') {
$long = charset2unicode($texte);
$long = spip_substr($long, 0, max($taille, 1));
$nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
$taille += $nbcharutf;
}
// couper au mot precedent
$long = spip_substr($texte, 0, max($taille - 4, 1));
$u = $GLOBALS['meta']['pcre_u'];
$court = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
$points = $suite;
// trop court ? ne pas faire de (...)
if (spip_strlen($court) < max(0.75 * $taille, 2)) {
$points = '';
$long = spip_substr($texte, 0, $taille);
$texte = preg_replace("/([^\s][\s]+)[^\s]*\n?$/" . $u, "\\1", $long);
// encore trop court ? couper au caractere
if (spip_strlen($texte) < 0.75 * $taille) {
$texte = $long;
}
} else {
$texte = $court;
}
if (strpos($texte, "\n")) // la fin est encore la : c'est qu'on n'a pas de texte de suite
{
$points = '';
}
// remettre les paragraphes
$texte = preg_replace("/\r+/", "\n\n", $texte);
// supprimer l'eventuelle entite finale mal coupee
$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
return quote_amp(trim($texte)) . $points;
}
}
Loading…
Cancel
Save