Aller au contenu

Module:Test wikicode/Test

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Ce module permet d'extraire et d'analyser des parties de wikicode. Il peut faciliter la comparaison de wikicodes ayant des structures similaires plus facilement qu'en les comparant sous forme de chaînes de caractères.

Utilisation

[modifier le code]

Fonctions exportables :

  • parseLink(link) - analyse le wikicode d'un lien interne pour en retourner les composants.
  • parseImage(image) - analyse le wikicode d'une image pour en retourner les composants.
  • extract(wikicode, items) – extrait les items demandés du wikicode.

Détail par fonction

[modifier le code]

parseLink(link)

[modifier le code]

Analyse le lien interne link et retourne ses composants :

  • page : la destination du lien
  • text : le texte du lien
Appel Résultat
p.parseLink("[[Foo|Bar]]")
{
    page = "Foo",
    text = "Bar"
}
p.parseLink("[[Foo]]")
{
    page = "Foo",
    text = "Foo"
}

parseImage(image)

[modifier le code]

Analyse l'image image et retourne ses composants :

  • src : le nom de l'image, sans préfixe
  • format : une table dont les clés représentent les différents formats appliqués (border, frameless, framed et/ou thumbnail) avec en valeur true ou la valeur du paramètre thumbnail
  • halign : l'alignement horizontal de l'image (left, center ou right)
  • valign : l'alignement vertical de l'image (baseline, sub, super, top, text-top, middle, bottom ou text-bottom)
  • size : la taille de l'image ou le mot-clé upright ou une table avec la clé upright et en valeur la valeur du paramètre
  • link : la valeur du paramètre link
  • alt : la valeur du paramètre alt
  • class : la valeur du paramètre class
  • lang : la valeur du paramètre lang
  • caption : le titre de l'image
Appel Résultat
p.parseImage("[[Fichier:Test.svg]]")
{
    src = "Test.svg"
}
p.parseImage("[[Fichier:Test.svg|bordure|frameless]]")
{
    src = "Test.svg",
    format = {border = true, frameless = true}
}
p.parseImage("[[Fichier:Test.svg|gauche]]")
{
    src = "Test.svg",
    halign = "left"
}
p.parseImage("[[Fichier:Test.svg|top]]")
{
    src = "Test.svg",
    valign = "top"
}
p.parseImage("[[Fichier:Test.svg|14x14px]]")
{
    src = "Test.svg",
    size = "14x14px"
}
p.parseImage("[[Fichier:Test.svg|redresse]]")
{
    src = "Test.svg",
    size = "upright"
}
p.parseImage("[[Fichier:Test.svg|upright=1.2]]")
{
    src = "Test.svg",
    size = {upright = 1.2}
}
p.parseImage("[[Fichier:Test.svg|link=https://fr.wikipedia.org]]")
{
    src = "Test.svg",
    link = "https://fr.wikipedia.org"
}
p.parseImage("[[Fichier:Test.svg|alt=Image de test]]")
{
    src = "Test.svg",
    alt = "Image de test"
}
p.parseImage("[[Fichier:Test.svg|class = noviewer]]")
{
    src = "Test.svg",
    class = "noviewer"
}
p.parseImage("[[Fichier:Test.svg|langue=fr]]")
{
    src = "Test.svg",
    lang = "fr"
}
p.parseImage("[[Fichier:Test.svg|Image de test]]")
{
    src = "Test.svg",
    caption = "Image de test"
}

extract(wikicode, items)

[modifier le code]

Permet d'extraire du wikicode donné les composants indiqués par la table items :

  • link : extrait un lien interne et retourne ses composants tels qu'analysés par parseLink.
  • image : extrait une image et retourne ses composants tels qu'analysés par parseImage.
  • -, *, + : extraient n'importe quel texte, la quantité de texte retournée correspond au comportement des quantifieurs dans les expressions régulières Lua.
  • ^, $ : n'extraient rien, permettent d'indiquer que l'extraction doit se faire respectivement depuis le début ou jusqu'à la fin du wikicode. Le comportement est similaire aux assertions des expressions régulières Lua.

La fonction retourne une table contenant la valeur extraite pour chacun des composants ou nil si la structure du code ne correspond pas aux items demandés.

Appel Résultat
p.extract("Test [[Foo|Bar]] test", {"link"})
{
    {page = "Foo", text = "Bar"}
}
p.extract("Test [[Foo|Bar]] test", {"^", "-", "link", "+"})
{
    "Test ",
    {page = "Foo", text = "Bar"},
    " test"
}
p.extract("Test [[Image:Test.svg|40x40px]] [[Foo]]", {"image", "-", "link"})
{
    {src = "Test.svg", size="40x40px"},
    " ",
    {page = "Foo", text = "Foo"}
}
p.extract("Test [[Foo|Bar]] test", {"image"})
nil
-- Test unitaire pour [[Module:Test wikicode]]. Cliquer sur « Discussion » pour voir le résultat du test.
local p = require('Module:UnitTests')

local modulename = mw.title.getCurrentTitle().baseText
local Test_wikicode = require( 'Module:' .. modulename )

function p:test_parseLink()
	local function test(link, expected)
		self:equals_deep(mw.text.nowiki(link), Test_wikicode.parseLink(link), expected, {nowiki = true})
	end
	test("[[Test]]", {
		page = "Test",
		text = "Test"
	})
	test("[[Wikipédia:Accueil_principal]]", {
		page = "Wikipédia:Accueil principal",
		text = "Wikipédia:Accueil_principal"
	})
	test("[[Wikipédia:Accueil%20principal]]", {
		page = "Wikipédia:Accueil principal",
		text = "Wikipédia:Accueil principal"
	})
	test("[[Wikipédia:Accueil_principal|Foo Bar Baz]]", {
		page = "Wikipédia:Accueil principal",
		text = "Foo Bar Baz"
	})
	test("[[Geoffroy II du Perche|Geoffroy {{II}}]]", {
		page = "Geoffroy II du Perche",
		text = "Geoffroy {{II}}"
	})
end

function p:test_parseImage()
	local function test(image, expected)
		self:equals_deep(mw.text.nowiki(image), Test_wikicode.parseImage(image), expected, {nowiki = true})
	end
	test("[[Fichier:Test.svg]]", {
		src = "Test.svg"
	})
	test("[[File:Test.svg]]", {
		src = "Test.svg"
	})
	test("[[Image:Test.svg]]", {
		src = "Test.svg"
	})

	-- Format: border
	test("[[Fichier:Test.svg|border]]", {
		src = "Test.svg",
		format = {border = true}
	})
	test("[[Fichier:Test.svg|bordure]]", {
		src = "Test.svg",
		format = {border = true}
	})

	-- Format: frameless
	test("[[Fichier:Test.svg|frameless]]", {
		src = "Test.svg",
		format = {frameless = true}
	})
	test("[[Fichier:Test.svg|sans_cadre]]", {
		src = "Test.svg",
		format = {frameless = true}
	})
	test("[[Fichier:Test.svg|non_encadré]]", {
		src = "Test.svg",
		format = {frameless = true}
	})
	test("[[Fichier:Test.svg|non_encadre]]", {
		src = "Test.svg",
		format = {frameless = true}
	})

	-- Format: framed
	test("[[Fichier:Test.svg|framed]]", {
		src = "Test.svg",
		format = {framed = true}
	})
	test("[[Fichier:Test.svg|frame]]", {
		src = "Test.svg",
		format = {framed = true}
	})
	test("[[Fichier:Test.svg|enframed]]", {
		src = "Test.svg",
		format = {framed = true}
	})
	test("[[Fichier:Test.svg|cadre]]", {
		src = "Test.svg",
		format = {framed = true}
	})
	test("[[Fichier:Test.svg|encadré]]", {
		src = "Test.svg",
		format = {framed = true}
	})
	test("[[Fichier:Test.svg|encadre]]", {
		src = "Test.svg",
		format = {framed = true}
	})

	-- Format: thumbnail
	test("[[Fichier:Test.svg|thumbnail]]", {
		src = "Test.svg",
		format = {thumbnail = true}
	})
	test("[[Fichier:Test.svg|thumb]]", {
		src = "Test.svg",
		format = {thumbnail = true}
	})
	test("[[Fichier:Test.svg|vignette]]", {
		src = "Test.svg",
		format = {thumbnail = true}
	})

	-- Format: thumbnail with value
	test("[[Fichier:Test.svg|thumbnail=Test.png]]", {
		src = "Test.svg",
		format = {thumbnail = "Test.png"}
	})
	test("[[Fichier:Test.svg|thumb=Test.png]]", {
		src = "Test.svg",
		format = {thumbnail = "Test.png"}
	})
	test("[[Fichier:Test.svg|vignette=Test.png]]", {
		src = "Test.svg",
		format = {thumbnail = "Test.png"}
	})

	-- Format: border and frameless
	test("[[Fichier:Test.svg|border|frameless]]", {
		src = "Test.svg",
		format = {border = true, frameless = true}
	})
	test("[[Fichier:Test.svg|sans_cadre|bordure]]", {
		src = "Test.svg",
		format = {border = true, frameless = true}
	})

	-- Horizontal alignment: left
	test("[[Fichier:Test.svg|left]]", {
		src = "Test.svg",
		halign = "left"
	})
	test("[[Fichier:Test.svg|gauche]]", {
		src = "Test.svg",
		halign = "left"
	})

	-- Horizontal alignment: right
	test("[[Fichier:Test.svg|right]]", {
		src = "Test.svg",
		halign = "right"
	})
	test("[[Fichier:Test.svg|droite]]", {
		src = "Test.svg",
		halign = "right"
	})

	-- Horizontal alignment: center
	test("[[Fichier:Test.svg|center]]", {
		src = "Test.svg",
		halign = "center"
	})
	test("[[Fichier:Test.svg|centre]]", {
		src = "Test.svg",
		halign = "center"
	})
	test("[[Fichier:Test.svg|centré]]", {
		src = "Test.svg",
		halign = "center"
	})

	-- Vertical alignment: baseline
	test("[[Fichier:Test.svg|baseline]]", {
		src = "Test.svg",
		valign = "baseline"
	})
	test("[[Fichier:Test.svg|base]]", {
		src = "Test.svg",
		valign = "baseline"
	})
	test("[[Fichier:Test.svg|ligne-de-base]]", {
		src = "Test.svg",
		valign = "baseline"
	})

	-- Vertical alignment: sub
	test("[[Fichier:Test.svg|sub]]", {
		src = "Test.svg",
		valign = "sub"
	})
	test("[[Fichier:Test.svg|ind]]", {
		src = "Test.svg",
		valign = "sub"
	})
	test("[[Fichier:Test.svg|indice]]", {
		src = "Test.svg",
		valign = "sub"
	})

	-- Vertical alignment: super
	test("[[Fichier:Test.svg|super]]", {
		src = "Test.svg",
		valign = "super"
	})
	test("[[Fichier:Test.svg|sup]]", {
		src = "Test.svg",
		valign = "super"
	})
	test("[[Fichier:Test.svg|exp]]", {
		src = "Test.svg",
		valign = "super"
	})
	test("[[Fichier:Test.svg|exposant]]", {
		src = "Test.svg",
		valign = "super"
	})

	-- Vertical alignment: top
	test("[[Fichier:Test.svg|top]]", {
		src = "Test.svg",
		valign = "top"
	})
	test("[[Fichier:Test.svg|haut]]", {
		src = "Test.svg",
		valign = "top"
	})

	-- Vertical alignment: text-top
	test("[[Fichier:Test.svg|text-top]]", {
		src = "Test.svg",
		valign = "text-top"
	})
	test("[[Fichier:Test.svg|haut-texte]]", {
		src = "Test.svg",
		valign = "text-top"
	})
	test("[[Fichier:Test.svg|haut-txt]]", {
		src = "Test.svg",
		valign = "text-top"
	})

	-- Vertical alignment: middle
	test("[[Fichier:Test.svg|middle]]", {
		src = "Test.svg",
		valign = "middle"
	})
	test("[[Fichier:Test.svg|milieu]]", {
		src = "Test.svg",
		valign = "middle"
	})

	-- Vertical alignment: bottom
	test("[[Fichier:Test.svg|bottom]]", {
		src = "Test.svg",
		valign = "bottom"
	})
	test("[[Fichier:Test.svg|bas]]", {
		src = "Test.svg",
		valign = "bottom"
	})

	-- Vertical alignment: text-bottom
	test("[[Fichier:Test.svg|text-bottom]]", {
		src = "Test.svg",
		valign = "text-bottom"
	})
	test("[[Fichier:Test.svg|bas-texte]]", {
		src = "Test.svg",
		valign = "text-bottom"
	})
	test("[[Fichier:Test.svg|bas-txt]]", {
		src = "Test.svg",
		valign = "text-bottom"
	})

	-- Link
	test("[[Fichier:Test.svg|link=Foo]]", {
		src = "Test.svg",
		link = "Foo"
	})
	test("[[Fichier:Test.svg|lien = Foo]]", {
		src = "Test.svg",
		link = "Foo"
	})

	-- Alt
	test("[[Fichier:Test.svg|alt=Texte alternatif]]", {
		src = "Test.svg",
		alt = "Texte alternatif"
	})

	-- Class
	test("[[Fichier:Test.svg|class = foobar]]", {
		src = "Test.svg",
		class = "foobar"
	})
	test("[[Fichier:Test.svg|classe=foobar]]", {
		src = "Test.svg",
		class = "foobar"
	})

	-- Lang
	test("[[Fichier:Test.svg|lang=en]]", {
		src = "Test.svg",
		lang = "en"
	})
	test("[[Fichier:Test.svg|langue = en]]", {
		src = "Test.svg",
		lang = "en"
	})

	-- Size
	test("[[Fichier:Test.svg|20px]]", {
		src = "Test.svg",
		size = "20px"
	})
	test("[[Fichier:Test.svg|x14px]]", {
		src = "Test.svg",
		size = "x14px"
	})
	test("[[Fichier:Test.svg|20x14px]]", {
		src = "Test.svg",
		size = "20x14px"
	})

	-- Size: upright
	test("[[Fichier:Test.svg|upright]]", {
		src = "Test.svg",
		size = "upright"
	})
	test("[[Fichier:Test.svg|redresse]]", {
		src = "Test.svg",
		size = "upright"
	})

	-- Size: upright with value
	test("[[Fichier:Test.svg|upright=]]", {
		src = "Test.svg",
		size = {upright = ""}
	})
	test("[[Fichier:Test.svg|upright=1.2]]", {
		src = "Test.svg",
		size = {upright = "1.2"}
	})
	test("[[Fichier:Test.svg|upright 1.2]]", {
		src = "Test.svg",
		size = {upright = "1.2"}
	})
	test("[[Fichier:Test.svg|redresse=1.2]]", {
		src = "Test.svg",
		size = {upright = "1.2"}
	})
	test("[[Fichier:Test.svg|redresse_1.2]]", {
		src = "Test.svg",
		size = {upright = "1.2"}
	})

	-- Caption
	test("[[Fichier:Test.svg|Titre de l'image]]", {
		src = "Test.svg",
		caption = "Titre de l'image"
	})

	-- Everything
	test("[[Fichier:Test.svg|lang = fr|frameless|12x84px|gauche|border|link=|classe = noviewer|text-bottom|alt=Test|Titre de l'image]]", {
		src = "Test.svg",
		format = {frameless = true, border = true},
		halign = "left",
		valign = "text-bottom",
		size = "12x84px",
		link = "",
		alt = "Test",
		class = "noviewer",
		lang = "fr",
		caption = "Titre de l'image"
	})
	
end

function p:test_extract()
	local function test(wikicode, items, expected)
		local label = mw.text.nowiki(wikicode) .. "<br />" ..
			"{" .. table.concat(items, ", ") .. "}"
		self:equals_deep(label, Test_wikicode.extract(wikicode, items), expected, {nowiki = true})
	end
	
	test("Test [[Foo]] test", {'link'}, {{page = "Foo", text = "Foo"}})
	test("Test [[Foo]] test", {'image'}, nil)
	test("Test [[Fichier:Test.svg]] test", {'image'}, {{src = "Test.svg"}})
	test("Test [[Fichier:Test.svg]] test", {'link'}, nil)
	
	test("[[Foo]] test", {'^', 'link'}, {{page = "Foo", text = "Foo"}})
	test("Test [[Foo]] test", {'^', 'link'}, nil)
	
	test("Test [[Fichier:Test.svg]]", {'image', '$'}, {{src = "Test.svg"}})
	test("Test [[Fichier:Test.svg]] test", {'image', '$'}, nil)
	
	test("[[Foo]][[Foo]]", {'link', '*', 'link'}, {{page = "Foo", text = "Foo"}, "", {page = "Foo", text = "Foo"}})
	test("[[Foo]] test [[Foo]]", {'link', '*', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Foo", text = "Foo"}})
	
	test("[[Foo]][[Foo]]", {'link', '+', 'link'}, nil)
	test("[[Foo]] test [[Foo]]", {'link', '+', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Foo", text = "Foo"}})
	test("[[Foo]] test [[Bar]][[Foo]]", {'link', '+', 'link'}, {{page = "Foo", text = "Foo"}, " test [[Bar]]", {page = "Foo", text = "Foo"}})

	test("Foo", {'-'}, {''})
	test("Foo", {'^', '-', '$'}, {'Foo'})
	test("Foo", {'^', '-', '*', '+', '$'}, {'', 'Fo', 'o'})
	test("[[Foo]] test [[Bar]][[Foo]]", {'link', '-', 'link'}, {{page = "Foo", text = "Foo"}, " test ", {page = "Bar", text = "Bar"}})
	
	test(
		'<span class="datasortkey" data-sort-value="France"><span class="flagicon">[[Fichier:Flag of France.svg|20x18px|border|Drapeau de la France|class=noviewer]] </span>[[France|France]]</span>',
		{'^', '-', 'image', '-', 'link', '*', '$'},
		{
			'<span class="datasortkey" data-sort-value="France"><span class="flagicon">',
			{src = "Flag of France.svg", size = "20x18px", format = {border = true}, caption = "Drapeau de la France", class = "noviewer"},
			' </span>',
			{page = "France", text = "France"},
			'</span>'
		}
	)
end

return p