Skip to content
Extraits de code Groupes Projets
Valider 4cbf5aff rédigé par marcimat's avatar marcimat Validation de marcimat
Parcourir les fichiers

tests: tests liens en PHPUnit

parent 46bd62d0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<?php
declare(strict_types=1);
/**
* Test unitaire de la fonction interdire_script du fichier inc/texte.php
*/
namespace Spip\Test\Texte;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
class LiensTest extends TestCase
{
public static function setUpBeforeClass(): void {
include_spip('inc/texte');
include_spip('inc/lang');
}
public function testLiensHrefLangAutomatique() {
$article = sql_fetsel(
['id_article', 'lang'],
'spip_articles',
[
'statut = ' . sql_quote('publie'),
'lang != ' . sql_quote('')
],
limit: '0,1',
);
$id_article = $article['id_article'];
$lang = $article['lang'];
// on se met dans une autre langue que celle de l'article
lang_select($lang === 'eo' ? 'fa' : 'eo');
$case = '[->' . $id_article . ']';
$propre = propre($case);
$this->assertEquals(
$lang,
extraire_attribut($propre, 'hreflang'),
sprintf('hreflang automatique errone dans "%s". Propre: "%s"', $case, $propre)
);
}
#[DataProvider('providerLiensClassCss')]
public function testLiensClassCss(string $table, ?string $short) {
$id = sql_getfetsel(id_table_objet($table), $table, "statut='publie'", limit: '0,1');
$type = objet_type($table);
if (!$id) {
$this->markTestSkipped(sprintf('Necessite un·e %s publié', $type));
}
$cases = ["[->$type{$id}]"];
if ($short) {
$cases[] = "[->$short{$id}]";
}
foreach ($cases as $case) {
$propre = propre($case);
$classes = extraire_attribut($propre, 'class');
$err = sprintf('Classe CSS "%s" errone dans "%s". Propre: "%s"', (string) $classes, $case, $propre);
$this->assertNotNull($classes, $err);
$this->assertStringContainsString('spip_in', $classes, $err);
$this->assertStringNotContainsString('spip_out', $classes, $err);
}
}
public static function providerLiensClassCss(): array {
return [
'article' => [
'table' => 'spip_articles',
'short' => 'art',
],
'rubrique' => [
'table' => 'spip_rubriques',
'short' => 'rub',
],
'site' => [
'table' => 'spip_syndic',
'short' => null,
],
];
}
#[DataProvider('providerLiens')]
public function testLiens($case, $url, $hreflang, $title, $text) {
lang_select('eo');
$propre = propre($case);
$this->assertEquals(
$url,
extraire_attribut($propre, 'href'),
sprintf('URL mal extraite de "%s". Propre: "%s"', $case, $propre)
);
$this->assertEquals(
$hreflang,
extraire_attribut($propre, 'hreflang'),
sprintf('Hreflang erroné dans "%s". Propre: "%s"', $case, $propre)
);
$this->assertEquals(
$title,
extraire_attribut($propre, 'title'),
sprintf('Title erroné dans "%s". Propre: "%s"', $case, $propre)
);
$this->assertEquals(
$text,
supprimer_tags($propre),
sprintf('Texte du lien abîmé dans "%s". Propre: "%s"', $case, $propre)
);
}
public static function providerLiens(): array {
return [
'hreflang incorrect spécifié ignoré' => [
'case' => '[bla {blabla}->url]',
'url' => 'url',
'hreflang' => null,
'title' => null,
'text' => 'bla blabla'
],
'hreflang correct spécifié pris en compte' => [
'case' => '[bla{en}->url]',
'url' => 'url',
'hreflang' => 'en',
'title' => null,
'text' => 'bla'
],
'title spécifié pris en compte' => [
'case' => '[bla|bulle de savon{eo}->url]',
'url' => 'url',
'hreflang' => 'eo',
'title' => 'bulle de savon',
'text' => 'bla'
],
'title comme une langue devient hreflang aussi' => [
'case' => '[bla|fa->url]',
'url' => 'url',
'hreflang' => 'fa',
'title' => 'fa',
'text' => 'bla'
],
'title autre qu’une langue ne contamine pas hreflang' => [
'case' => '[bla|bulle de savon->url]',
'url' => 'url',
'hreflang' => null,
'title' => 'bulle de savon',
'text' => 'bla'
],
'multi dans liens' => [
'case' => '[<multi>[fr]X[eo]Y[fa]Z</multi>->url]',
'url' => 'url',
'hreflang' => null,
'title' => null,
'text' => 'Y'
],
];
}
#[DataProvider('providerLiensAutomatiques')]
public function testLiensAutomatiques($case, $url) {
$propre = propre($case);
$this->assertEquals(
$url,
extraire_attribut(extraire_balise($propre, 'a'), 'href'),
sprintf('Erreur lien dans "%s". Propre: "%s"', $case, $propre)
);
}
public static function providerLiensAutomatiques(): array {
return [
'sans protocole' => [
'case' => 'un superbe www.monsite.tld, pas mal',
'url' => 'http://www.monsite.tld',
],
'protocole http' => [
'case' => 'un superbe http://www.monsite.tld, pas mal',
'url' => 'http://www.monsite.tld',
],
'protocole https' => [
'case' => 'un superbe https://www.monsite.tld, pas mal',
'url' => 'https://www.monsite.tld',
],
];
}
public function testLiensAvecAncre() {
$case = '[uneancre<-] a [->www.monsite.tld]';
$url = 'http://www.monsite.tld';
$propre = propre($case);
$this->assertEquals(
$url,
extraire_attribut(extraire_balises($propre, 'a')[1], 'href'),
sprintf('Erreur lien dans "%s". Propre: "%s"', $case, $propre)
);
}
public function testLienModele() {
$case = '<flv|url=http://rezo.net/>';
$propre = propre($case);
$expected = '<p><tt>&lt;flv|url=http://rezo.net/&gt;</tt></p>';
$this->assertEquals(
$expected,
$propre,
sprintf('Erreur lien dans "%s". Propre: "%s"', $case, $propre)
);
}
}
<?php
declare(strict_types=1);
define('_ESPACE_PRIVE', 1); // pour tester le modele inexistant, qui sera sinon ignore
$test = 'liens';
$remonte = __DIR__ . '/';
while (!is_file($remonte . 'test.inc')) {
$remonte .= '../';
}
require $remonte . 'test.inc';
include_spip('inc/texte');
include_spip('inc/lang');
$s = spip_query("SELECT * FROM spip_articles WHERE statut='publie' AND lang>'' LIMIT 0,1");
$t = sql_fetch($s);
// on se met dans une autre langue que celle de l'article
$la_langue = 'eo';
if ($t['lang'] === 'eo') {
$la_langue = 'fa';
}
lang_select($la_langue);
$p0 = '[->' . $t['id_article'] . ']';
$p1 = '[bla {blabla}->url]'; // blabla ne peut pas etre un hreflang
$p2 = '[bla{en}->url]';
$p3 = '[bla|bulle de savon{eo}->url]';
$p4 = '[bla|fa->url]'; // fa est hreflang ET title
$p5 = '[bla|bulle de savon->url]';
$p6 = '[<multi>[fr]X[eo]Y[fa]Z</multi>->url]';
$p7 = '[uneancre<-] a [->www.monsite.tld]';
$p8 = 'un superbe www.monsite.tld, pas mal';
$p9 = 'un superbe http://www.monsite.tld, pas mal';
$p10 = 'un superbe https://www.monsite.tld, pas mal';
$p11 = '<flv|url=http://rezo.net/>';
$err = [];
if (extraire_attribut(propre($p0), 'hreflang') !== $t['lang']) {
$err[] = "hreflang automatique errone dans {$p0} : " . PtoBR(propre($p0));
}
if (extraire_attribut(propre($p1), 'href') !== 'url') {
$err[] = "url mal extrait de {$p1}";
}
if (extraire_attribut(propre($p1), 'hreflang') === 'blabla') {
$err[] = "hreflang errone dans {$p1}";
}
if (supprimer_tags(propre($p1)) !== 'bla blabla') {
$err[] = "texte du lien abime dans {$p1}";
}
if (extraire_attribut(propre($p2), 'href') !== 'url') {
$err[] = "url mal extrait de {$p2}";
}
if (extraire_attribut(propre($p2), 'hreflang') !== 'en') {
$err[] = "hreflang errone dans {$p2}";
}
if (supprimer_tags(propre($p2)) !== 'bla') {
$err[] = "texte du lien abime dans {$p2}";
}
if (extraire_attribut(propre($p3), 'href') !== 'url') {
$err[] = "url mal extrait de {$p3}";
}
if (extraire_attribut(propre($p3), 'hreflang') !== 'eo') {
$err[] = "hreflang errone dans {$p3}";
}
if (extraire_attribut(propre($p3), 'title') !== 'bulle de savon') {
$err[] = "title errone dans {$p3}";
}
if (supprimer_tags(propre($p3)) !== 'bla') {
$err[] = "texte du lien abime dans {$p3}";
}
if (extraire_attribut(propre($p4), 'href') !== 'url') {
$err[] = "url mal extrait de {$p4}";
}
if (extraire_attribut(propre($p4), 'hreflang') !== 'fa') {
$err[] = "hreflang errone dans {$p4}";
}
if (extraire_attribut(propre($p4), 'title') !== 'fa') {
$err[] = "title errone dans {$p4}";
}
if (supprimer_tags(propre($p4)) !== 'bla') {
$err[] = "texte du lien abime dans {$p4}";
}
if (extraire_attribut(propre($p5), 'href') !== 'url') {
$err[] = "url mal extrait de {$p5}";
}
if (extraire_attribut(propre($p5), 'hreflang') !== null) {
$err[] = "hreflang errone dans {$p5}";
}
if (extraire_attribut(propre($p5), 'title') !== 'bulle de savon') {
$err[] = "title errone dans {$p5}";
}
if (supprimer_tags(propre($p5)) !== 'bla') {
$err[] = "texte du lien abime dans {$p5}";
}
if (supprimer_tags(propre($p6)) !== ($la_langue === 'eo' ? 'Y' : 'Z')) {
$err[] = "multi abime dans {$p6}";
}
# (('<multi>[fr]X[en]Y</multi>')); => pre_typo
$balises_p7 = extraire_balises(propre($p7), 'a');
if (
'http://www.monsite.tld'
!== $a = extraire_attribut(array_pop($balises_p7), 'href')
) {
$err[] = $a . ': erreur sur le lien ' . $p7;
}
if (
'http://www.monsite.tld'
!== $a = extraire_attribut(extraire_balise(propre($p8), 'a'), 'href')
) {
$err[] = $a . ': erreur sur le lien ' . $p8;
}
if (
'http://www.monsite.tld'
!== $a = extraire_attribut(extraire_balise(propre($p9), 'a'), 'href')
) {
$err[] = $a . ': erreur sur le lien ' . $p9;
}
if (
'https://www.monsite.tld'
!== $a = extraire_attribut(extraire_balise(propre($p10), 'a'), 'href')
) {
$err[] = $a . ': erreur sur le lien ' . $p10;
}
if (
'https://www.monsite.tld'
!== $a = extraire_attribut(extraire_balise(propre($p10), 'a'), 'href')
) {
$err[] = $a . ': erreur sur le lien ' . $p10;
}
if (
!in_array(
$a = propre($p11),
[
'<p><flv|url=http://rezo.net/></p>',
'<p><tt>&lt;flv|url=http://rezo.net/&gt;</tt></p>',
'<pre>&lt;flv|url=http://rezo.net/&gt;</pre>',
],
true
)
) {
$err[] = $a . ': erreur sur le modele ' . $p11;
}
if ($err) {
var_dump($err);
} else {
echo 'OK';
}
<?php
declare(strict_types=1);
$err = [];
$test = 'liens_classes';
$remonte = __DIR__ . '/';
while (!is_file($remonte . 'test.inc')) {
$remonte .= '../';
}
require $remonte . 'test.inc';
include_spip('inc/texte');
include_spip('inc/lang');
$id = sql_getfetsel('id_article', 'spip_articles', "statut='publie'", '', '', '0,1');
if (!$id) {
echo 'NA Necessite un article publie<br />';
}
$p0 = "[->art{$id}]";
if (
!($c = extraire_attribut(propre($p0), 'class'))
|| !str_contains($c, 'spip_in')
|| str_contains($c, 'spip_out')
) {
$err[] = "Classe {$c} errone dans {$p0} : " . PtoBR(propre($p0));
}
$id = sql_getfetsel('id_rubrique', 'spip_rubriques', "statut='publie'", '', '', '0,1');
if (!$id) {
echo 'NA Necessite une rubrique publiee<br />';
}
$p0 = "[->rub{$id}]";
if (
!($c = extraire_attribut(propre($p0), 'class'))
|| !str_contains($c, 'spip_in')
|| str_contains($c, 'spip_out')
) {
$err[] = "Classe {$c} errone dans {$p0} : " . PtoBR(propre($p0));
}
$id = sql_getfetsel('id_syndic', 'spip_syndic', "statut='publie'", '', '', '0,1');
if (!$id) {
echo 'NA Necessite un site publie<br />';
}
$p0 = "[->site{$id}]";
if (
!($c = extraire_attribut(propre($p0), 'class'))
|| str_contains($c, 'spip_in')
|| !str_contains($c, 'spip_out')
) {
$err[] = "Classe {$c} errone dans {$p0} : " . PtoBR(propre($p0));
}
// si le tableau $err est pas vide ca va pas
if (count($err) > 0) {
echo '<dl><dt>' . implode('</dt><dt>', $err) . '</dt></dl>';
} else {
echo 'OK';
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter