Příručka:Parsovací testy
bin/parserTests.php
v úložišti Parsoid).Testovací případ analyzátoru nejčastěji specifikuje wikitext (běžný vstup) a HTML (běžný výstup), aby se potvrdilo, že věci fungují podle očekávání. Skutečný výstup je porovnán s požadovaným výsledkem, a proto testovací případy analyzátoru (také známé jako testy analyzátoru) mohou být užitečné při zjišťování regresí.
Testovací případy analyzátoru jsou umístěny v adresáři tests/parser/
. Rozšíření by měla umístit své testy do adresáře tests/parser/
.
Mohou být spuštěny jak prostřednictvím testovací sady phpunit, tak pomocí samostatného skriptu parserTests.php. Selhání testu analyzátoru tedy vyvolá selhání Jenkinsova testu.
Syntaxe a provedení
Formát verze 2
Počínaje verzí 1.35 musí být testy analyzátoru ve formátu verze 2. Zadání verze 2 znamená, že testy jsou připraveny ke spuštění v "uklizeném" režimu (viz T249138).
Chcete-li označit, že vaše testy analyzátoru jsou spuštěny ve formátu verze 2, můžete použít sekci možností v horní části souboru (viz níže).
!! options
version=2
!! end
Případně jako zkratka musí být první řádek v testovacím souboru analyzátoru !! Version 2
.
Povolení háčků
Abyste se ujistili, že se načte přípona tag1
, přidejte na začátek souboru:
!! hooks
tag1
!! endhooks
Přidávání článků
Chcete-li vytvořit nový článek, syntaxe je:
!! article
Template:Simple template
!! text
A ''simple'' template.
!! endarticle
Rozložení testu analyzátoru
Kromě času testu má test daný počet sekcí:
- povinné sekce:
wikitext
- volitelné sekce:
options
,config
,wikitext/edited
,html
,html/php
,html/parsoid
,html/parsoid+standalone
,html/parsoid+integrated
Části specifické pro starší analyzátor
Starší analyzátor očekává, že sekce wikitext
a jedna z html
nebo html/php
budou vždy přítomny.
Části specifické pro Parsoid
Části wikitext/edited
a různé části html/parsoid*
jsou relevantní pouze při provádění testu s Parsoidem.
Parsoid také umožňuje další konfiguraci s dalšími možnostmi specifickými pro test v sekci možností. Protože Parsoid podporuje spouštění testů v různých režimech, testovací režimy určují, jaké sekce se očekávají.
od ↓ do → | wt | html |
---|---|---|
wt | wt2wt | wt2html |
html | html2wt | html2html |
- U režimů wt2html a html2wt by kromě sekce wikitext měla být přítomna alespoň jedna ze sekcí html, html/parsoid, html/parsoid+standalone nebo html/parsoid+integrated.
- Pro režim wt2wt postačuje pouze sekce wikitext (ale testovací uživatel aktuálně očekává, že bude přítomna část html).
- Pro režim html2html stačí jedna ze sekcí html.
- Pro režimy selser[1] by měly být přítomny sekce wikitext a alespoň jedna z html.
- U manuálních režimů selser[1] by měly být přítomny oba wikitext a wikitext/edited.
Příklad
Syntaxe pro jednoduchý test je následující.
!! Version 2
!! test
Simple paragraph
!! config
wgRestrictDisplayTitle=false
!! wikitext
This is a simple paragraph.
!! html
<p>This is a simple paragraph.
</p>
!! end
Konfigurace sekce
Pokud tam zadáte konfigurační nastavení, ujistěte se, že mezi výrazy nejsou žádné mezery, protože mezery nejsou oříznuty testovacím programem.
Část možnosti
Každá možnost by měla přijít na vlastní linii.
disabled
deaktivuje test.php
spustí test pouze s výchozím analyzátorem jádra, pokud nejsou přítomny sekce HTML specifické pro Parsoid. Název "php" je historickým pozůstatkem z doby, kdy byl Parsoid kódovou základnou Node.js.parsoid=comma-separated-modes
neboparsoid={...}
(objekt formátu JSON) povolí možnosti specifické pro Parsoid.- Příklad:
parsoid=wt2html,wt2wt
spustí tento test pouze v těchto 2 režimech. Ve výchozím nastavení je test spuštěn ve všech dostupných testovacích režimech pro daný test v sekcích wikitext a html. V běžném případě je to výchozí spuštění testu v režimech: wt2html, wt2wt, html2wt, html2html, selser[1].[2] - V objektu formátu JSON jsou aktuálně rozpoznány následující klíče
modes, selser, changes, suppressErrors, normalizePhp,
modes
- Toto je čárkami oddělený seznam režimů Parsoid ke spuštěníselser
- Pokud je selser[1] jedním z testovacích režimů ve vlastnosti modes, tato vlastnost může volitelně specifikovat"noauto"
, což znamená, že automatické úpravy pro tento test nemají být generovány. Pokud ano, použijí se pouze ruční úpravy určené vlastnostíchanges
.changes
- Tento formát je popsán samostatně níže. Tato možnost bude muset být spárována s sekcíwikitext/edited
v testu (viz níže), která specifikuje očekávaný výstup wikitextu, když je tento upravený HTML převeden (přes selser) na wikitext Parsoidem.
- Příklad:
změní formát
Toto je pole jednotlivých změn, které se mají aplikovat na DOM HTML generovaného transformací wikitextu. Každý prvek pole obsahuje 3 nebo více prvků: (a) selektor jquery pro výběr uzlu DOM (b) typ změny, která se má použít na vybraný uzel, (c) příslušné hodnoty / obsah potřebný k použití zadané změny.
Stručně řečeno, každý prvek pole představuje volání metody jquery. Takže z [x,y,z...] se stane $(x)[y](z....)
Takže ['fig', 'attr', 'width', '120'] je interpretováno jako $('fig').attr('width', '120')
Právě teď jsou rozpoznány následující metody jquery: after, addClass, append, attr, before, empty, html, remove, removeAttr, removeClass, text, wrap
Viz http://api.jquery.com/ pro dokumentaci těchto metod.
"contents" jako druhý argument volá metodu jquery .contents() na výsledky selektoru v prvním argumentu, což je dobrý způsob, jak se dostat k uzlům textu a komentářů.
Wikitextové sekce
wikitext
- Očekává se, že to bude přítomno ve všech testech, které vyžadují zpracování wikitextu do HTML (nebo v testovacích režimech Parsoid html2wt a wt2wt, wikitext generovaný z HTML sekcí).wikitext/edited
- Tato část je relevantní pouze pro testovací běhy Parsoid. U testů, které poskytují ruční sadu změn, které mají být aplikovány na HTML generovaný ze sekce wikitext, je to výstup očekávaný, když Parsoid převede upravený HTML zpět na wikitext.
HTML sekce
html
- Toto je původní výchozí výstupní sekce pro test analyzátoru. Parsoid používá tuto sekci pouze v případě, že není k dispozici žádná sekce specifická pro Parsoid (viz níže). Pokud Parsoid použije tuto sekci pro test, Parsoid výrazně normalizuje výstup Parsoid HTML před porovnáním s tímto HTML. Je to proto, že Parsoid generuje různé značky pro mnoho konstrukcí wikitextu. Normalizace zajišťuje, že sémantické atributy a vlastnosti (které nemají vliv na vykreslování) nezpůsobí falešná selhání testu.html/php
- Tuto sekci používá pouze starší analyzátor a Parsoid to ignoruje.html/parsoid
- Toto je výchozí sekce používaná Parsoidem a používá se pro samostatné i integrované testy, pokud pro tyto režimy nejsou k dispozici specializované sekce. Testovací program minimálně normalizuje výstup Parsoidu a tuto sekci, aby ověřil, zda test vyhovuje/nevyhovuje. Normalizace odstraňuje některé křiklavé atributy, aby se zabránilo nutnosti přidávat všechny tyto křiklavé výstupy do testů analyzátoru.html/parsoid+standalone
- Tato sekce Parsoid HTML se používá pouze v samostatných testovacích běhech Parsoid (implementována pouze v testovacím běhu Parsoid).html/parsoid+integrated
- Tato sekce Parsoid HTML se používá pouze v integrovaných testovacích běhech Parsoid (implementováno pouze v testovacím běhu jádra MediaWiki).
Metadata sections
Previously, metadata was pre- or post- pended to the html sections but now get a dedicated section of its own. Parser tests are in the process of being migrated to the new format and backwards compatibility in the test runner still exists for tests written in the old way.
metadata
- Collects metadata requested by the variations options, includingcat
,ill
,property=
,extension=
,showtitle
,showflags
,showtocdata
,showindicators
, andshowmedia
.- Similar to the html, the standard variants to the sections exist, as in
metadata/php
,metadata/parsoid
,metadata/parsoid+standalone
, etc.
Povolení testování proti Parsoid
Spuštění testů v souboru proti Parsoid můžete povolit pomocí možnosti parsoid-compatible v sekci možností souboru.
Můžete zadat jednotlivé režimy nebo povolit všechny režimy vynecháním řetězce voleb.
Například parsoid-compatible=wt2html,wt2wt
umožňuje spouštění testů Parsoid v režimech wt2html a wt2wt.
Ale parsoid-compatible
umožňuje spouštění testů Parsoid ve všech režimech (wt2html, wt2wt, html2wt, html2html, selser).
Viz příklad níže.
!! options
version=2
parsoid-compatible=wt2html
!! end
extension.json & testy analyzátoru
U rozšíření, která umístí své testy do tests/parser/
a používají extension.json, se automaticky spustí testy analyzátoru.
Pro rozšíření využívající starší systém načítání rozšíření mohou používat:
$wgParserTestFiles[] = __DIR__ . "/myParserTests.txt";
Spuštění testů s parserTests.php
Chcete-li spustit testy analyzátoru, přejděte do kořenového adresáře místní instalace MediaWiki a z příkazového řádku proveďte následující:
php tests/parser/parserTests.php
tests/parserTests.php
.Chcete-li spustit testy pouze pro jeden soubor, použijte --file=...
param.
Zobrazit další parametry pomocí --help
.
php tests/parser/parserTests.php --file=extensions/Kartographer/tests/parser/parserTests.txt
Možnosti testovacího běhu specifické pro Parsoid
Tyto možnosti nejsou dostupné u testovacího běhu analyzátoru jádra MediaWiki v MW 1.38 a dřívějších. Testy můžete spustit v režimu Parsoid pomocí možnosti --parsoid
. Nejlepší a nejaktuálnější dokumentace všech dostupných možností je spustit
php tests/parser/parserTests.php --help
Nastavení globálních konfiguračních proměnných
Chcete-li nastavit výchozí globální proměnné pro všechny testy analyzátoru v rozšíření, použijte háček ParserTestGlobals .
V konkrétním testu nastavte konfigurační proměnné následovně:
!! test
Your Test Name
!! config
wgVariableName=true
!! wikitext
...
Související odkazy
Poznámky pod čarou
- ↑ 1.0 1.1 1.2 1.3 Režim selser je zkratka pro testovací režim, kde je sekce HTML upravována řadou automatizovaných způsobů, která je poté převedena na wikitext pomocí transformací Parsoid selektivní serializace (dále selser).
- ↑
TODO: Přidejte odkaz na stránku wiki, která vysvětluje různé transformace Parsoidu.