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

tests: Critère operateurs like & regexp en PHPUnit

parent 56450981
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);
namespace Spip\Test\Squelettes\Critere;
use PHPUnit\Framework\Attributes\Depends;
use Spip\Test\SquelettesTestCase;
use Spip\Test\Templating;
class OperatorRegexpLikeTest extends SquelettesTestCase
{
private function getArticle(): string {
$templating = Templating::fromString();
return $templating->render(<<<SPIP
<BOUCLE_a(ARTICLES){titre>=A}{titre<=Z}{0,1}>#ID_ARTICLE:[(#TITRE|substr{0,1})]</BOUCLE_a>
NA Ce test exige un article ayant un titre qui commence par une lettre A-Z
<//B_a>
SPIP);
}
/** @return array{id_article: int, starts_with: string} */
private function getArticleIdTitle(): array {
$result = $this->getArticle();
[$id_article, $starts_with] = explode(':', trim($result));
$id_article = (int) $id_article;
return [
'id_article' => $id_article,
'starts_with' => $starts_with
];
}
public function testHasArticle(): void {
$result = $this->getArticle();
if ($this->isNa($result)) {
$this->markTestSkipped($result);
}
[$id_article, $starts_with] = explode(':', trim($result));
$id_article = (int) $id_article;
$this->assertGreaterThan(0, $id_article);
}
#[Depends('testHasArticle')]
public function testLike(): void {
$art = $this->getArticleIdTitle();
$contexte = [
'id_article' => $art['id_article'],
'like' => $art['starts_with'] . '%',
];
$this->assertOkCode(<<<SPIP
<BOUCLE_b(ARTICLES){titre like #ENV{like}}{id_article}>ok</BOUCLE_b>
Echec de {titre like #ENV{like}}
<//B_b>
SPIP,
$contexte
);
$this->assertOkCode(<<<SPIP
<BOUCLE_c(ARTICLES){titre !like #ENV{like}}{id_article}> </BOUCLE_c>
Echec de {titre !like #ENV{like}}
</B_c>
ok
<//B_c>
SPIP,
$contexte
);
}
#[Depends('testHasArticle')]
public function testRegexp(): void {
$art = $this->getArticleIdTitle();
$contexte = [
'id_article' => $art['id_article'],
'regexp' => '^' . $art['starts_with'],
];
$this->assertOkCode(<<<SPIP
<BOUCLE_b(ARTICLES){titre == #ENV{regexp}}{id_article}>ok</BOUCLE_b>
Echec de {titre == #ENV{regexp}}
<//B_b>
SPIP,
$contexte
);
$this->assertOkCode(<<<SPIP
<BOUCLE_c(ARTICLES){titre !== #ENV{regexp}}{id_article}> </BOUCLE_c>
Echec de {titre !== #GET{regexp}}
</B_c>
ok
<//B_c>
SPIP,
$contexte
);
}
}
#CACHE{0}
[(#REM)
Cette page teste le fonctionnement du critere {LIKE}
on selectionne d'abord un article, puis on regarde si
on reussit a le selectionner avec {titre LIKE a%}
ou a est son initiale (test b)
et l'inverse (test c)
idem pour regexp
]
<BOUCLE_a(ARTICLES){titre>=A}{titre<=Z}{0,1}>
[(#SET{t,[(#TITRE|couper{1})]})]
[(#REM) ------------- tests de LIKE ---------------- ]
[(#REM)
Cette boucle doit donner l'article
]<BOUCLE_b(ARTICLES){titre like (#GET{t}|concat{%})}{id_article}>
#SET{testb,ok}
</BOUCLE_b>
echec de {titre like #GET{t}%}
<//B_b>
[(#REM)
Cette boucle doit echouer
]<BOUCLE_c(ARTICLES){titre !like (#GET{t}|concat{%})}{id_article}>
</BOUCLE_c>
echec de {titre !like #GET{t}%}
</B_c>
#SET{testc,ok}
<//B_c>
[(#REM) ------------- tests de REGEXP ---------------- ]
[(#REM)
Cette boucle doit donner l'article
]<BOUCLE_d(ARTICLES){titre == ^#GET{t}}{id_article}>
#SET{testd,ok}
</BOUCLE_d>
echec de {titre ==^#GET{t}}
<//B_d>
[(#REM)
Cette boucle doit echouer
]<BOUCLE_e(ARTICLES){titre !==^#GET{t}}{id_article}>
</BOUCLE_e>
echec de {titre !== ^#GET{t}}
</B_e>
#SET{teste,ok}
<//B_e>
</BOUCLE_a>
[(#REM) ------------- validation des resultats ---------------- ]
[(#GET{testb}|?{#GET{testc}}|?{#GET{testd}}|?{#GET{teste}}|?{OK})]
</B_a>
NA Ce test exige un article ayant un titre qui commence par une lettre A-Z
<//B_a>
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter