Module:Unité/Test
Apparence
[voir] [modifier] [historique] [purger]
Ce module est principalement destiné à implémenter le modèle {{Unité}}.
Utilisation
Fonctions exportables
unite( frame )
– implémente le modèle unité. Les paramètres sont pris soit au niveau du modèle appelant le module via #invoke, soit directement dans la table fournie lorsque la fonction est appelée depuis un autre module. Essaye de parser les deux premiers paramètres pour facilité la saisie (par exemple fonction avecp.unite{ '1.23 ±0.05 e5 m/s-2' }
) ;_unite( args )
– affiche l'unité à partir des paramètres classiques du modèle Unité (exemplep._unite{ '1.23', 'm', '/s', '-2', ['±'] = '0.05', e='5' }
) ;formatNombres( texte )
– formate tous les nombres de la chaine fournie suivant les conventions du français ;formatNombre( nombre )
– transforme un nombre formaté ou non en chaine formatée suivant les conventions du français ; si la chaine n'est pas reconnue comme un nombre, elle n'est pas modifiée ;_formatNum( num )
– transforme un number, ou une chaine correspondant à un number en chaine formatée suivant les conventions du français ; si le paramètre ne représente pas un number lua il est retourné sans modification ;parseNombre( nombre )
– transforme si possible une chaine formatée en un chaine interprétable par tonumber() (retourne une chaine pour éviter les arrondis éventuels de lua) ; les chaines non reconnues sont retournées sans modification.
Autres fonctions
sanitizeNum( nombre )
– transforme les signes moins en tiret, les espaces insécables en espace simple (simplifie les pattern ultérieures) ;parseUnit( texte )
– essaye de séparer une chaine en différents paramètres du modèle unité ;nomUnit( unit, exposant )
– retourne si possible le nom de l'unité et son exposant en toute lettre.
Modules externes et autres éléments dont ce module a besoin pour fonctionner
- Module:Unité/Data – Liste d'unités et de multiples, avec leur abréviation et leur nom en toute lettre.
- Module:Delink – Utilisé pour supprimer les liens des unités pour essayer de les reconnaitre.
Exemples
Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.
Voir aussi : les tests unitaires et ceux du bac à sable.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Test unitaire pour [[Module:Date]]. Cliquer sur « Discussion » pour voir le résultat du test.
local p = require('Module:UnitTests')
local Unit = require( 'Module:' .. mw.title.getCurrentTitle().baseText )
local tableExemple = { '1' }
local frame = mw.getCurrentFrame()
local ref = frame:extensionTag( 'ref', 'blabla' )
local nowiki = frame:extensionTag( 'nowiki', '[[Arles]] : ' )
function p:test01_sanitizeNum()
local function test( param, result, comment )
local text = tostring( param )
if comment then
if text:match( '\n$' ) then
text = text .. '(' .. comment .. ')'
else
text = text .. ' (' .. comment .. ')'
end
end
self:equals( text, Unit.sanitizeNum( param ), result )
end
test( nil, '', 'pas de paramètre' )
test( '', '', 'chaine vide' )
test( '1', '1' )
test( '1234', '1234' )
test( ' 1234', '1234', 'espace avant' )
test( '1234 ', '1234', 'espace après' )
test( '1234\n', '1234', 'retour ligne après' )
test( ' 1234', '1234', 'tab avant' )
test( '1234 ', '1234', 'espace insécable après' )
test( '1.234', '1.234' )
test( '1,234', '1,234' )
test( '1,234,567', '1,234,567' )
test( '1 234', '1 234' )
test( '1 234', '1 234', 'espace insécable' )
test( '1 234', '1 234', 'espace fine' )
test( '1 234', '1 234', 'espace fine insécable' )
test( '1 234', '1 234', ' ' )
test( '-1234', '-1234' )
test( '−1234', '-1234', 'signe moins' )
test( '–1234', '-1234', 'demi cadratin' )
test( '−1234', '-1234', 'amp;minus;' )
test( nowiki .. '1234' .. ref, nowiki .. '1234' .. ref, 'avec strip marker' )
end
function p:test02_parseNombre()
local function test( param, result, comment )
local text = tostring( param )
if comment then
text = text .. ' (' .. comment .. ')'
end
self:equals( text, Unit.parseNombre( param ), result )
end
test( nil, '', 'pas de paramètre' )
test( '', '', 'chaine vide' )
test( '1', '1' )
test( '1234', '1234' )
test( '1 234', '1234' )
test( '1 234', '1234', 'espace insécable' )
test( '1 234', '1234', ' ' )
test( '12345678901234567890', '12345678901234567890' )
test( '12 345 678 901 234 567 890', '12345678901234567890' )
test( '1.234', '1.234' )
test( '1,234', '1.234' )
test( '1.234,567', '1.234567', 'pour être compatible avec l’ancien comportement du modèle' )
test( '1,234.567', '1234.567' )
test( '-1234,567', '-1234.567' )
test( '−1234,567', '-1234.567', 'signe moins' )
end
function p:test03_formatNum()
local function test( param, result, comment )
local text = tostring( param )
if type( param ) == 'table' then
text = table_to_str( param )
end
if comment then
text = text .. ' (' .. comment .. ')'
end
self:equals( text, Unit.formatNum( param ), result )
end
test( nil, nil, 'pas de paramètre' )
test( '', '', 'chaine vide' )
test( '1', '1' )
test( '1234', '1 234' )
test( '12345678901234567890', '12 345 678 901 234 567 890' )
test( '1.234', '1,234' )
test( '1.2345', '1,2345' )
test( '1.234567', '1,234 567' )
test( '1.2345678901234567890', '1,234 567 890 123 456 789 0' )
test( '1234.56789', '1 234,567 89' )
test( '1.230', '1,230' )
test( '-1', '−1' )
test( '-1234.56', '−1 234,56' )
test( 1234, '1 234', 'number' )
test( 1234.567890, '1 234,567 89' )
test( -1234, '−1 234' )
test( { '1234' }, '1 234', 'table' )
test( { 1234 }, '1 234', 'table contenant un number' )
test( { '1.234', round = '2' }, '1,23' )
test( { '1.2', round = '2' }, '1,2' )
test( { '1234', round = '2' }, '1 234' )
test( { '1234', round = '-1' }, '1 230' )
test( { 1.234, round = 2 }, '1,23', 'numbers' )
test( { '1.234', decimals = '2' }, '1,23' )
test( { '1.2', decimals = '2' }, '1,20' )
test( { '1.2', decimals = '5' }, '1,200 00' )
test( { '1234', decimals = '2' }, '1 234,00' )
test( { '1234', decimals = '-1' }, '1 230' )
test( '1.234e5', '1,234 ×10<sup>5</sup>' )
test( '1.234E5', '1,234 ×10<sup>5</sup>' )
test( 1.234e5, '123 400', 'number sous forme 1.234e5' )
test( 1.234e18, '1,234 ×10<sup>18</sup>', 'number sous forme 1.234e18' )
test( '-1.234e-5', '−1,234 ×10<sup>−5</sup>' )
test( { '1.234e5' }, '1,234 ×10<sup>5</sup>' )
test( { '1.234e5', noHtml = true }, '1,234 ×10⁵' )
end
function p:test04_formatNombre()
local function test( param, param2, param3, result, comment )
local text = tostring( param )
if param2 or param3 then
text = param .. ' / ' .. tostring( param2 ) .. ' / ' .. tostring( param3 )
end
if comment then
text = text .. ' (' .. comment .. ')'
end
self:equals( text, Unit.formatNombre( param, param2, param3 ), result )
end
test( nil, nil, nil, '', 'pas de paramètre' )
test( '', nil, nil, '', 'chaine vide' )
test( '1', nil, nil, '1' )
test( '−1 234', nil, nil, '−1 234' )
test( '1.234', '2', nil, '1,23' )
test( '1.234', nil, '2', '1,23' )
test( '1.234', nil, '5', '1,234 00' )
test( '1', nil, '2', '1,00' )
test( '', '2', nil, '' )
test( '', nil, '2', '' )
end
function p:test05_formatNombres()
local function test( param, param2, param3, result, comment )
local text = tostring( param )
if param2 or param3 then
text = param .. ' / ' .. tostring( param2 ) .. ' / ' .. tostring( param3 )
end
if comment then
text = text .. ' (' .. comment .. ')'
end
self:equals( text, Unit.formatNombres( param, param2, param3 ), result )
end
test( nil, nil, nil, '', 'pas de paramètre' )
test( '', nil, nil, '', 'chaine vide' )
test( '1', nil, nil, '1' )
test( '−1 234.5', nil, nil, '−1 234,5' )
test( '5.678e3', nil, nil, '5,678 ×10<sup>3</sup>' )
test( '1.567,89', nil, nil, '1,567 89' )
test( '1.234', '2', nil, '1,23' )
test( '1.234', nil, '2', '1,23' )
test( '1.234', nil, '5', '1,234 00' )
test( 'environ 1234.5', nil, nil, 'environ 1 234,5' )
test( 'entre −1 234.5 et 5.678e3', nil, nil, 'entre −1 234,5 et 5,678 ×10<sup>3</sup>' )
test( 'de 0,2 jusqu\'à 1.567,89', nil, 5, 'de 0,200 00 jusqu\'à 1,567 89' )
test( '1234-5678', nil, nil, '1 234-5 678' )
test( nowiki .. '1234', nil, nil, nowiki .. '1 234', 'avec nowiki' )
test( '1234' .. ref, nil, nil, '1 234' .. ref, 'avec ref' )
end
function p:test06_parseUnit()
local function test( param, result, comment )
local text = tostring( param )
if comment then
text = text .. ' (' .. comment .. ')'
end
self:equals_deep( text, Unit.parseUnit( param ), result )
end
test( nil, {}, 'pas de paramètre' )
test( '', {}, 'chaine vide' )
test( '1', { '1' } )
test( '1,234.567', { '1,234.567' } )
test( '1 234', { '1 234' } )
test( '−1 234', { '-1 234' } )
test( '1 m', { '1', 'm' } )
test( '1 m2', { '1', 'm', '2' } )
test( '1 km²', { '1', 'km', '2' } )
test( '1 m³', { '1', 'm', '3' } )
test( '1 m<sup>2</sup>', { '1', 'm', '2' }, 'HTML <nowiki><sup></nowiki>' )
test( '1 m2 s-1', { '1', 'm', '2', 's', '-1' } )
test( '1 m2/s', { '1', 'm', '2', '/s' } )
test( '1 J2K3s-1', { '1', 'J', '2', 'K', '3', 's', '-1' } )
test( '1 J kg m−2', { '1', 'J', '', 'kg', '', 'm', '-2' } )
test( '1 kilomètres par heure', { '1', 'kilomètres', '', 'par', '', 'heure' } )
test( '1 [[mètre carré|m{{exp|2}}]]', { '1', '[[mètre carré|m{{exp|2}}]]' } )
test( '1 [[mètre carré|m]]2', { '1', '[[mètre carré|m]]', '2' } )
test( '10 [[parsec]]s', { '10', '[[parsec]]s' } )
test( '1.23456789e15', { '1.23456789', e='15' } )
test( '1.23456789 e15', { '1.23456789', e='15' } )
test( '1.23456789x10e-15', { '1.23456789', e='-15' } )
test( '40.234°C', { '40.234', '°C' } )
test( 'm', { false, 'm' } )
test( 'm2', { false, 'm', '2' } )
test( 'e3 m2', { false, 'm', '2', e='3' } )
test( 'x10e3 m2', { false, 'm', '2', e='3' } )
test( '10{{3}} m2', { false, 'm', '2', e='3' } )
test( '55 à 56 cal', { '55', 'cal', ['à'] = '56' } )
test( '55 et 56 cal', { '55', 'cal', et = '56' } )
test( '55-56 cal', { '55', 'cal', ['–'] = '56' } )
test( '100±9 mm', { '100', 'mm', ['±'] = '9' } )
test( '100+-9 mm', { '100', 'mm', ['±'] = '9' } )
test( '100,5 +/- 9.3 e5 mm', { '100,5', 'mm', ['±'] = '9.3', e = '5' } )
test( '95+5-4 m', { '95', 'm', ['+'] = '5', ['−'] = '4' } )
test( '29.7 x 21 cm', { '29.7', 'cm', ['×'] = '21' } )
test( '50x25x3 m', { '50', 'm', ['×'] = '25', ['××'] = '3' } )
test( '[[Kilojoule|kJ]] [[Mole (unité)|mol]]-1', { false, '[[Kilojoule|kJ]]', '', '[[Mole (unité)|mol]]', '-1' } )
test( 'hab./km2', { false, 'hab.', '', '/km', '2' } )
test( 'fl oz', { false, 'fl oz' } )
test( 'fl. oz.', { false, 'fl. oz.' } )
test( 'fl.oz.', { false, 'fl.oz.' } )
test( '1.266,865,3 e17 m3s−2', { '1.266,865,3', 'm', '3', 's', '-2', e = "17" } )
test( '2.518 021 002… eV', { '2.518 021 002…', 'eV' } )
test( '2 1/2 lb', { '2', 'lb', fraction = '1/2' } )
test( '2 ½ lb', { '2', 'lb', fraction = '½' } )
test( '1/2 lb', { '', 'lb', fraction = '1/2' } )
end
return p