Module:Country data/Bac à sable/Test
Apparence
[voir] [modifier] [historique] [purger]
Ce module contient des informations utilisées par le système country.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Modèle:Documentation module Country data. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Test unitaire pour [[Module:Country data/Bac à sable]]. Cliquer sur « Discussion » pour voir le résultat du test.
local p = require('Module:UnitTests')
-- TODO Déplacer dans Module:Country data/test et gérer à la fois l'original et le bac à sable
local modulename = mw.title.getCurrentTitle().baseText
local Countrydata = require( 'Module:' .. modulename )
local TestWikicode = require('Module:Test wikicode')
local frame
--[[
Retourne une table contenant uniquement les clés keys de la table tbl
]]--
local function intersectKeys(tbl, keys)
local newTbl = {}
for k, v in pairs(tbl) do
for i, key in ipairs(keys) do
if k == key then
newTbl[k] = v
break
end
end
end
return newTbl
end
local function identity(...) return ... end
local function preprocessModuleAndTemplate(moduleFunction, templateName, args, useData)
if not frame then frame = mw.getCurrentFrame() end
useData = useData and (' |usedata=' .. useData) or ''
if mw.text.trim(args):sub(0, 1) ~= '|' then args = ' |' .. args end
local moduleCode = '{{#invoke:' .. modulename .. ' |' .. moduleFunction .. args .. useData .. '}}'
local templateCode = '{{' .. templateName .. args .. '}}'
return moduleCode, templateCode, frame:preprocess(moduleCode), frame:preprocess(templateCode)
end
local function getTestPrefix(args, moduleCode, templateCode, moduleRes, templateRes, useData, addIntro)
local testPrefix = ''
if addIntro then
testPrefix =
'!colspan=4 style="border-top-width:4px;padding-top:1em;padding-bottom:1em;"|<big>Paramètres : ' .. '<code>' .. mw.text.nowiki(args) .. '</code></big>\n|-\n' ..
'|colspan=2|Code\n' ..
'|style="vertical-align:top;"|<pre>' .. mw.text.nowiki(templateCode) .. '</pre>\n' ..
'|style="vertical-align:top;"|<pre>' .. mw.text.nowiki(moduleCode) .. '</pre>\n|-\n'
end
if not useData then
testPrefix = testPrefix .. '!colspan=4 style="text-align:left;"|En utilisant les données prioritaires\n|-\n'
elseif useData == 'template' then
testPrefix = testPrefix .. '!colspan=4 style="text-align:left;"|En utilisant les données des modèles\n|-\n'
elseif useData == 'module' then
testPrefix = testPrefix .. '!colspan=4 style="text-align:left;"|En utilisant les données des modules\n|-\n'
end
testPrefix = testPrefix ..
'|colspan=2|Résultat\n' ..
'|style="vertical-align:top;"|' .. templateCode .. '<br /><pre>' .. mw.text.nowiki(templateRes) .. '</pre>\n' ..
'|style="vertical-align:top;"|' .. moduleCode .. '<br /><pre>' .. mw.text.nowiki(moduleRes) .. '</pre>\n|-\n'
return testPrefix
end
--[[
Compare une fonction du module avec un template.
La comparaison se fait sur la structure du wikicode (via TestWikicode.extract).
]]--
function p:compareModuleToTemplateWikicode(moduleFunction, templateName)
local function test(args, items, transformers, useData, addIntro)
local moduleCode, templateCode, moduleRes, templateRes = preprocessModuleAndTemplate(moduleFunction, templateName, args, useData)
local testPrefix = getTestPrefix(args, moduleCode, templateCode, moduleRes, templateRes, useData, addIntro)
local moduleExtracts = TestWikicode.extract(moduleRes, items)
local templateExtracts = TestWikicode.extract(templateRes, items)
p:equals('Structure (<code>' .. table.concat(items, ', ') .. '</code>)', moduleExtracts ~= nil, templateExtracts ~= nil, {
before = testPrefix
})
for k, transformer in ipairs(transformers or {}) do
if transformer then
local index, label, fun = unpack(transformer)
p:equals_deep(
label,
moduleExtracts ~= nil and fun(moduleExtracts[index]) or nil,
templateExtracts ~= nil and fun(templateExtracts[index]) or nil,
{nowiki = true}
)
end
end
end
--[[
items est une sequence passée à TestWikicode.extract.
transformers est une sequence de sequences du type {index, label, fonction} permettant
de comparer certains items parmi les résultats extraits :
* index est l'index de l'item à comparer ;
* label est un intitulé pour cet item ;
* fonction permet de transformer l'item avant la comparaison.
]]--
return function (args, items, transformers)
test(args, items, transformers, nil, true)
test(args, items, transformers, 'template')
test(args, items, transformers, 'module')
end
end
--[[
Compare une fonction du module avec un template.
La comparaison se fait sur le résultat brut.
]]--
function p:compareModuleToTemplateSimple(moduleFunction, templateName)
local function test(args, useData, addIntro)
local moduleCode, templateCode, moduleRes, templateRes = preprocessModuleAndTemplate(moduleFunction, templateName, args, useData)
local testPrefix = getTestPrefix(args, moduleCode, templateCode, moduleRes, templateRes, useData, addIntro)
p:equals('Valeur', moduleRes, templateRes, {
before = testPrefix
})
end
return function (args, items, transformers)
test(args, nil, true)
test(args, 'template')
test(args, 'module')
end
end
-- Test pays() vs {{pays}}
function p:test01_pays()
local validate = p:compareModuleToTemplateWikicode('pays', 'pays')
local function test(args)
local items = {'image', '-', 'link'}
local validators = {
{1, 'Image', function (image)
return intersectKeys(image, {'src', 'size', 'format'})
end},
{3, 'Lien', identity},
}
validate(args, items, validators)
end
test('France')
test('Népal')
test('Sint Maarten')
test('Commonwealth d\'Angleterre')
test('Nouvelle-Calédonie')
test('France|taille=10')
test('France|nom=Test')
test('France|libre')
test('FRA')
end
-- Test pays_lien_seul() vs {{pays/lien seul}}
function p:test02_pays_lien_seul()
local validate = p:compareModuleToTemplateWikicode('pays_lien_seul', 'pays/lien seul')
local function test(args)
local items = {'^', 'link', '$'}
local validators = {
{1, 'Lien', identity},
}
validate(args, items, validators)
end
test('France')
test('Commonwealth d\'Angleterre')
test('Sint Maarten')
test('FRA')
end
-- Test marine_de_guerre() vs {{marine de guerre}}
function p:test03_marine_de_guerre()
local validate = p:compareModuleToTemplateWikicode('marine_de_guerre', 'marine de guerre')
local function test(args)
local items = {'image', '-', 'link'}
local validators = {
{1, 'Image', function (image)
return intersectKeys(image, {'src', 'size', 'format'})
end},
{3, 'Lien', identity},
}
validate(args, items, validators)
end
test('Afrique du Sud')
test('Népal')
test('Nouvelle-Calédonie')
test('France|size=10px')
test('Afrique du Sud|name=Test')
test('France|name=Test')
test('Afrique du Sud|1922')
test('FRA')
end
-- Test armee_de_terre() vs {{armée de terre}}
function p:test04_armee_de_terre()
local validate = p:compareModuleToTemplateWikicode('armee_de_terre', 'armée de terre')
local function test(args)
local items = {'image', '-', 'link'}
local validators = {
{1, 'Image', function (image)
return intersectKeys(image, {'src', 'size', 'format'})
end},
{3, 'Lien', identity},
}
validate(args, items, validators)
end
test('Afrique du Sud')
test('Népal')
test('Nouvelle-Calédonie')
test('France|size=10px')
test('France|name=Test')
test('Royaume d\'Italie|name=Test')
test('Afrique du Sud|1951')
test('FRA')
end
-- Test armee_de_l_air() vs {{armée de l\'air}}
function p:test05_armee_de_l_air()
local validate = p:compareModuleToTemplateWikicode('armee_de_l_air', 'armée de l\'air')
local function test(args)
local items = {'image', '-', 'link'}
local validators = {
{1, 'Image', function (image)
return intersectKeys(image, {'src', 'size', 'format'})
end},
{3, 'Lien', identity},
}
validate(args, items, validators)
end
test('Canada')
test('Népal')
test('Nouvelle-Calédonie')
test('France|size=10px')
test('France|name=Test')
test('Royaume d\'Italie|name=Test')
test('Canada|1924')
test('FRA')
end
-- Test drapeau() vs {{drapeau}}
function p:test06_drapeau()
local validate = p:compareModuleToTemplateWikicode('drapeau', 'drapeau')
local function test(args)
local items = {'image'}
local validators = {
{1, 'Image', function (image)
return intersectKeys(image, {'src', 'size', 'format'})
end},
}
validate(args, items, validators)
end
test('France')
test('Népal')
test('Nouvelle-Calédonie')
test('France|taille=10')
test('France|libre')
test('FRA')
end
-- Test getalias() vs {{getalias}}
function p:test07_getalias()
local test = p:compareModuleToTemplateSimple('getalias', 'getalias')
test('France')
test('Commonwealth d\'Angleterre')
test('Commonwealth d\'Angleterre|shortname')
test('France|flag')
test('France|link')
test('France|flag|libre')
test('France|link|army')
test('FRA')
end
return p