Module:Date/Test

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

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

Utilisation[modifier le code]

Fonctions utilisables depuis un modèle[modifier le code]

  • modeleDate(frame) – affiche une date, optionnellement avec les liens les plus pertinents (précisions ci-dessous).
  • dateISO(frame) – similaire à modeleInscriptionDate mais la date est au format aaaa-mm-jj. Paramètres nommés année, mois, jour. Pour respecter l'ISO 8601 qui définit la date uniquement selon le calendrier grégorien, cette fonction ne retourne rien pour les dates avant 1583.
  • dateInfobox(frame) affiche une date avec les liens pertinents, gère correctement les paramètres contenant déjà un modèle date, ou avec du texte suivant la date (précisions ci-dessous). Prévu pour être utilisé dans les Infobox.
  • dureeInfobox(frame) affiche la durée entre deux dates, si elle n'est pas déjà incluse. Prévu pour être utilisé dans les Infobox.
  • dateRepublicain(frame) – affiche une date grégorienne au format républicain (sans liens). Paramètres 1=année, 2=mois, 3=jour.
  • modeleAge(frame) - retourne l'âge (nombre d'années) depuis une date ou entre deux dates. Paramètres 1=année, 2=mois, 3=jour, 4=année, 5=mois, 6=jour.
  • erreurModuleData() - retourne un message d'erreur si Module:Date/Data ne se charge pas correctement.
  • checkDataCat(frame) - retourne une liste de pages annuelle et mensuelle pour faciliter les mises à jour de Date/Data. Paramètres 1=cat, mois=liste de mois si 'oui', alias = liste tous les alias si 'oui'

Fonctions utilisables depuis un autre module[modifier le code]

  • determinationMois( mois ) - à partir d'un nom de mois, de son numéro ou d'une abréviation, retourne, si le mois a bien été trouvé, son nom canonique et son numéro
  • determinationSaison( saison ) - à partir d'un nom de saison, retourne, si la saison a bien été trouvée, son nom canonique
  • do_dayRank(arguments) - Rang du jour dans l'année. Paramètre arguments = { année, mois, jour } ou { year = année, month = mois, day = jour }
  • isLeapYear(year) - retourne true si year est une année bissextile dans le calendrier grégorien.
  • toRoman(number) - transforme number en une chaine le représentant en « chiffres romains ».
  • age( an, mn, jn, ac, mc, jc ) - similaire à modeleAge, mais les paramètres ne sont pas dans une table
  • julianDay( year, month, day, hour, minute, second ) - retourne le jour julien de la date transmise, suivant le calendrier grégorien astronomique (avec année 0)
  • julianDayJulian( year, month, day, hour, minute, second ) - retourne le jour julien d'une date du calendrier julien astronomique (avec année 0)
  • julianDayToGregorian( jd ) - retourne trois variables année, mois, jour représentant la date du calendrier grégorien astronomique correspondant à ce jour julien.
  • julianDayToJulian( jd ) - retourne trois variables année, mois, jour représentant la date du calendrier julien correspondant à ce jour julien.
  • julianToGregorian( year, month, day ) - transforme une date du calendrier julien en date du calendrier grégorien.
  • gregorianToJulian( year, month, day ) - transforme une date du calendrier grégorien en date du calendrier julien.

Modules externes dont ce module a besoin pour fonctionner[modifier le code]

  • Date/Data - Base de donnée permettant de ne pas tester les pages que l'on sait existantes, ou n'existant pas.
  • TableBuilder – Utilise .insert et .concat pour simplifier la syntaxe.

modeleDate( frame )[modifier le code]

Paramètres[modifier le code]

  • 1 - jour ou vide - numérique, exception possible pour 1er ou 1er.
  • 2 - mois ou jour - numérique ou nom français ou anglais, éventuellement une abréviation courante.
  • 3 - année ou mois - Un nombre sera considéré comme année. Les années sont considérées comme suivant le calendrier grégorien après le 14 octobre 1582 (sauf si julien = 'oui') et le calendrier julien avant, sans année 0.
  • 4 - qualificatif ou année - texte correspondant à une page type « en photographie » pour « 2008 en photographie »
  • 5 - qualificatif
  • age ou âge - non vide pour afficher l'âge (aucun âge n'est affiché pour les dates dans le futur)
  • julien - 'oui' pour que la date soit considérée comme suivant le calendrier julien après le 14 octobre 1582. La date grégorienne avec liens est affichée suivie de la date julienne entre parenthèses.
  • compact - 'oui' pour abréger le nom du mois.
  • avJC - 'non' pour ne pas afficher 'av. J.-C.' après l'année si elle représente une année avant Jésus-Christ. Utile pour éviter les répétitions.
  • liens - 'oui' pour forcer l'ajout de liens quand la date ne contient pas de qualificatif.
  • nolinks - 'oui' pour empêcher l'ajout de liens (a précédence sur liens).

Fonctionnement[modifier le code]

  • par défaut, le modèle n'ajoute des liens que si un qualificatif a été renseigné.
  • le modèle cherche à afficher la date avec des liens vers les pages liées au qualificatif. S'il n'y a pas de page liée au qualificatif un lien sera fait vers la page générale.
  • le premier paramètre est vide et le troisième correspond à un mois (texte uniquement), tous les paramètres sont considérés comme décalés et l'année ne sera pas affichée.
  • s'il n'y a pas de page spécifique pour ce mois-année, le mois sera affiché lié avec le jour à l'éphéméride. Priorité est donnée à l'éphéméride du qualificatif sur le lien mois-année sans qualificatif.
  • le modèle s'aide de la base de donnée Date/Data pour éviter d'utiliser la fonction mw.title (équivalent du parser #ifexist:).
  • cette base permet de remplacer le qualificatif par une catégorie plus générique. Si le qualificatif est « en tennis », l'éphéméride et la page mensuelle sera liée au qualificatif « en sport ».

Fonction modeleDate[modifier le code]

Motif testé Chaîne testée Module Fonctions coûteuses
modèle d'avant / module
date récente 14|octobre|2001 1 / 0
date ancienne (1700 - 1943), jour =1 1|octobre|1842 1 / 1
date très ancienne (<1700), jour = 1er 1|janvier|537 1 / 0
qualificatif qui n'est pas dans la base 14|octobre|2010|en animation asiatique 4 / 1
date ancienne, qualificatif qui n'est pas dans la base 14|octobre|1842|en animation asiatique 4 / 2
avec qualificatif 14|Octobre|2001|en astronautique 3 / 0
avec qualificatif avec éphémérides 14|octobre|2005|dans les chemins de fer 4 / 0
pas de jour |octobre|2001 1 / 0
pas de jour avec qualificatif |Octobre|2001|en astronautique 3 / 0
qualificatif avec page annuelle qui pourrait exister 14|octobre|2006|en Égypte 4 / 1
qualificatif avec page mensuelle existante 14|octobre|2008|en France 3 / 0
qualificatif avec page mensuelle qui pourrait exister 14|octobre|2012|en France 4 / 1
qualificatif avec page annuelle et mensuelle qui pourrait exister 14|octobre|2012|en économie 4 / 2
date ancienne avec qualificatif 14|octobre|1845|en aéronautique 4 / 1
date négative 13|octobre|-63 1 / 0
date av. J.-C. (orthographe de la page) 1|octobre|63 av. J.-C. 1 / 0
date avJC (orthographe abrégée) 13|octobre|63 avJC 1 / 0
date négative, paramètre pour cacher av. J.-C. 13|octobre|-63|avJC=non 1 / 0
année invalide 14|octobre|2001 en sport 1 / 0
jour + mois avec majuscule 14|Octobre|2001 1 / 0
mois en abrégé 14|oct.|2001 1 / 0
mois en chiffre 14|10|2001 1 / 0
mois invalide 14|otcobre|2001 Mois invalide (otcobre) 1 / 0
jour invalide jeudi 14|octobre|2001 1 / 0
jour invalide (trop grand pour le mois) 31|septembre|2001 Jour invalide (31 septembre) 1 / 0
uniquement l’année ||2001 1 / 0
uniquement l’année avec qualificatif ||2001|en littérature 1 / 0
sans année 14|octobre 0 / 0
jour uniquement 14 0 / 0
mois uniquement |Octobre Octobre 0 / 0
sans argument 0 / 0
date du calendrier julien 1|octobre|2001|julien=oui 1er octobre 2001 ( dans le calendrier grégorien)
date du calendrier julien (changement de mois) 25|octobre|2001|julien=oui 25 octobre 2001 ( dans le calendrier grégorien)
date du calendrier julien (changement d'année) 25|décembre|2001|julien=oui 25 décembre 2001 ( dans le calendrier grégorien)
date de naissance 14|octobre|2001|age=oui (22 ans)

Comparaison avec {{date de naissance}}[modifier le code]

  • les fonctions coûteuses sont les mêmes que celles du modèle Date
  • sans l'âge, voir comparaison avec {{Date}}
Motif testé Chaîne testée Modèle Date de naissance Module
simple 1|8|2006|âge=oui (17 ans) (17 ans)
avec qualificatif 1|août|2006|en Suisse|age=oui (17 ans) (17 ans)
date ancienne 2|1|598|age=oui (1426 ans)
l'an dernier 2|1|2012|age=oui (12 ans) (12 ans)
cette année 2|1|2013|age=oui (11 ans) (11 ans)
l'an prochain 2|1|2014|age=oui (10 ans) (10 ans)
sans jour |8|2006|âge=oui (17 ans) (17 ans)
annee seule ||2006|âge=oui


dateInfobox( frame )[modifier le code]

Fonction destinée aux infobox, notamment pour afficher les dates de naissance et de mort. Les dates sont affichées avec des liens. Gère les cas où le paramètre contient déjà un modèle date. Le contenu du paramètre situé après la date (par exemple un lieu, une référence) est conservé.

Paramètres[modifier le code]

  • 1 : type de date à afficher (naissance / n, mort / m, ou date / d)
  • 2 : Date ou date de naissance
  • 3 : Date de mort si type n ou m
  • qualificatif : suffixe des pages de date à lier (exemple : en musique)
  • nolinks : n'affiche pas de lien
  • préfixe : préfixe à afficher s'il y a un jour (par défaut vide)
  • préfixe sans jour : préfixe à afficher s'il n'y a pas de jour (par défaut vide)

Ces paramètres doivent être directement dans le #invoke appelant la fonction.

Exemples[modifier le code]

  • {{#invoke:Date|dateInfobox|date|13 juillet 1927}}
  • {{#invoke:Date|dateInfobox|naissance|13 juillet 1927|}} (96 ans)
  • {{#invoke:Date|dateInfobox|naissance|13 juillet 1927|14 mai 2017}}
  • {{#invoke:Date|dateInfobox|naissance|30 juin 2017-}} (6 ans)
  • {{#invoke:Date|dateInfobox|mort|13 juillet 1927|30 juin 2017}} (à 89 ans)
  • {{#invoke:Date|dateInfobox|mort||30 juin 2017}}
  • {{#invoke:Date|dateInfobox|mort|13 juillet 1927|}}
  • {{#invoke:Date|dateInfobox|date|13 juillet 1927| qualificatif = en France}}
  • {{#invoke:Date|dateInfobox|date|13 juillet 1927| préfixe = le}} → le
  • {{#invoke:Date|dateInfobox|date|13 juillet 1927| préfixe = le | préfixe sans jour = en}} → le
  • {{#invoke:Date|dateInfobox|date|juillet 1927| préfixe = le}}
  • {{#invoke:Date|dateInfobox|date|juillet 1927| préfixe = le | préfixe sans jour = en}} → en
  • {{#invoke:Date|dateInfobox|date|13 juillet [[1927]]}}
  • {{#invoke:Date|dateInfobox|date|13 juillet [[1927 en France|1927]]}} → 13 juillet 1927
  • {{#invoke:Date|dateInfobox|date|{{date|13 juillet 1927|en France}}}}

dureeInfobox( frame )[modifier le code]

Fonction destinée aux infobox, pour afficher la durée entre deux dates, notamment pour un poste ou une fonction. Gère les cas où la durée est déjà spécifiée dans l'une des valeurs. La durée est préfixée d'un retour à la ligne (<br />) et écrite en petit (<small>).

Paramètres[modifier le code]

  • 1 : Date de début
  • 2 : Date de fin (optionnelle, date du jour par défaut)

Ces paramètres doivent être directement dans le #invoke appelant la fonction.

Exemples[modifier le code]

  • {{#invoke:Date|dureeInfobox|8 septembre 2022}}
    (1 an, 7 mois et 28 jours)
  • {{#invoke:Date|dureeInfobox|{{date|27 juin 1940-}}|{{date|6 septembre 1940}}}}
    (2 mois et 10 jours)

Voir aussi : les tests unitaires et ceux du bac à sable.

-- Test unitaire pour [[Module:Date]]. Cliquer sur « Discussion » pour voir le résultat du test.
local p = require('Module:UnitTests')

local Date = require( 'Module:' .. mw.title.getCurrentTitle().baseText )
local Wikidata = require( 'Module:Wikidata' )

function p:test01_validationJourMoisAnnee()
	local function test( resultat, ... )
		local t, r = Date.validationJourMoisAnnee( ... )
		local args = ...
		local text
		if type( args ) == 'table' then
			text = table_to_str( args )
		else
			text = 'param' .. table_to_str( { ... } )
		end
		if t then
			self:equals_deep( text, r, resultat )
		else
			if type( resultat ) == 'table' then
				resultat = table_to_str( resultat )
			else
				resultat = '<span class="error">' .. resultat .. '</span>'
			end
			self:equals( text, r, resultat )
		end
	end
	test( {}, { } )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {jour='17', mois='06', annee='2015' } )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {jour='17', mois='06', ['annee']='2015' } )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {'17', '06', '2015' } )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {17, 6, 2015 } )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {jour=17, mois=6, annee=2015 } )
	test( { jour=nil, mois=nil,    numMois=nil, annee=2015 }, {jour=nil, mois=nil, annee=2015 } )
	test( { jour=17,  mois='juin', numMois=6,   annee=nil },  {'17', '06'})
	test( { jour=nil, mois='juin', numMois=6,   annee=2015 }, {'', '06', '2015'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=2015 }, {'', '', '2015'} )
	test( { jour=nil, mois='juin', numMois=6,   annee=nil },  {'', '06'} )
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {'17', '06', '2015' } )
	test( { jour=17,  mois='juin', numMois=6,   annee=nil },  {'17', 'juin'})
	test( { jour=nil, mois='juin', numMois=6,   annee=2015 }, {'', 'juin', '2015'} )
	test( { jour=nil, mois='été',  numMois=nil, annee=2015 }, {'', 'été', '2015'} )
	test( { jour=nil, mois='juin-juillet', numMois=nil, annee=2015 }, {'', 'juin-juillet', '2015'} )
	test( { jour=nil, mois='juin/juillet', numMois=nil, annee=2015 }, {'', 'juin/juillet', '2015'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=2015 }, {'', '', '2015'} )
	test( { jour=nil, mois='juin', numMois=6,   annee=nil },  {'', 'juin'} )
	test( { jour=1,   mois='juin', numMois=6,   annee=nil },  {'1er', 'juin'})
	test( { jour=1,   mois='juin', numMois=6,   annee=nil },  {mw.getCurrentFrame():preprocess('{{1er}}'), 'juin'})
	test( { jour=17,  mois='juin', numMois=6,   annee=2015 }, {'17', 'Juin', '2015' } )
	test( { jour=nil, mois='Juin', numMois=6,   annee=2015 }, {'', 'Juin', '2015'} )
	test( { jour=17,  mois='aout', numMois=8,   annee=2015 }, {'17', 'aout', '2015'} )
	test( { jour=17,  mois='août', numMois=8,   annee=2015 }, {'17', 'août', '2015'} )
	test( { jour=17,  mois='août', numMois=8,   annee=2015 }, {'17', '08', '2015'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=44 },   {'', '', '44'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=3 },    {'', '', '3'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=3 },    {'', '', '0003'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '-44'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '44avJC'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '44 Av. J-C'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '44 av. J.C.'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '44avJC'} )
	test( { jour=nil, mois=nil,    numMois=nil, annee=-44 },  {'', '', '44avJC'} )
	test( { jour=17,  mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil }, {'17', '06', '2015', masquerAnnee= true } )
	test( { jour=17,  mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true }, {'17', '06', '2015', masquerAnnee= true, masquerMois= true } )
	test( { jour=17,  mois='juin', numMois=6, annee=2015 },   {'le 17', '06', '2015' } )
	test( { jour=17,  mois='juin', numMois=6, annee=2015 },   {'Mercredi 17', 'Juin', '2015' } )
	test( { jour=17,  mois='juin', numMois=6, annee=2015 },   {'le 17', 'June', '2015' } )
	test( 'Jour invalide (32)', {'32', '06', '2015' } )
	test( 'Jour invalide (31 juin)', {'31', '06', '2015' } )
	test( 'Jour invalide (30 février)', {'30', '02', '2015' } )
	test( 'Jour invalide (29 février 2015)', {'29', '02', '2015' } )
	test( { jour=29,  mois='février', numMois=2, annee=2016 }, {'29', '02', '2016' } )
	test( 'Mois invalide (13)', {'17', '13', '2015' } )
	test( 'Mois invalide (blabla)', {'17', 'blabla', '2015' } )
	test( 'Mois invalide (2015)', {'17 juin', '2015' } )
	test( 'Année invalide (juin 2015)', {'', '17', 'juin 2015' } )
	test( 'Date invalide (jour seul : 17)',   {'17'} )
	test( 'Année invalide (0)',   {'17', 'juin', '0'} )
	test( 'Année invalide (en musique)', { 'juin', '2015', 'en musique' } )
end

function p:test02_separationJourMoisAnnee()
	local function test( date, resultat )
		local t, r = Date.separationJourMoisAnnee( date )
		if t then
			self:equals_deep( date, r, resultat )
		else
			if type( resultat ) == 'table' then
				resultat = table_to_str( resultat )
			else
				resultat = '<span class="error">' .. resultat .. '</span>'
			end
			self:equals( date, r, resultat )
		end
	end
	test( '', { } )
	test( '17/06/2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17/06', { jour=17, mois='juin', numMois=6, annee=nil } )
	test( '06/2015', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '2015/06', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '2015', { jour=nil, mois=nil, numMois=nil, annee=2015 } )
	test( '17 / 06 / 2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17 / 06', { jour=17, mois='juin', numMois=6, annee=nil } )
	test( '06 / 2015', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '2015 / 06', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '17-06-2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17-06', { jour=17, mois='juin', numMois=6, annee=nil } )
	test( '06-2015', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '2015-06', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '2015-06-17', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '2015-06-17T19:03', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '2015-06-17T19:03+01', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '2015-06-17T18:03:45Z', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '+2015-06-17T00:00:00Z', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '+00000002015-06-17T00:00:00Z', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '-00000000044-06-17T00:00:00Z', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '-0044-06-17T00:00:00Z', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17.06.2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17.06', { jour=17, mois='juin', numMois=6, annee=nil } )
	test( '06.2015', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( '17 juin 2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17 juin', { jour=17, mois='juin', numMois=6, annee=nil } )
	test( 'juin 2015', { jour=nil, mois='juin', numMois=6, annee=2015 } )
	test( 'été 2015', { jour=nil, mois='été', numMois=nil, annee=2015 } )
	test( 'juin-juillet 2015', { jour=nil, mois='juin-juillet', numMois=nil, annee=2015 } )
	test( 'juin/juillet 2015', { jour=nil, mois='juin/juillet', numMois=nil, annee=2015 } )
	test( '17/06/2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil } )
	test( '17/06-/2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true } )
	test( '17 juin 2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil } )
	test( '17 juin- 2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true } )
	test( '17 juin- 2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17-06-2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil } )
	test( '17-06--2015-', { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true } )
	test( '17 juin-', { jour=17, mois='juin', numMois=6, annee=nil, masquerAnnee=nil, masquerMois= true } )
	test( 'juin 2015-', { jour=nil, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil } )
	test( '1er juin 2015', { jour=1, mois='juin', numMois=6, annee=2015 } )
	test( mw.getCurrentFrame():preprocess('{{1er}}') .. ' juin 2015', { jour=1, mois='juin', numMois=6, annee=2015 } )
	test( mw.getCurrentFrame():preprocess('1{{er}}') .. ' juin 2015', { jour=1, mois='juin', numMois=6, annee=2015 } )
	test( '17 juin -44', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17/06/-44', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17-06--44', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17/06/44avjc', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17/06/44 Av. J-C.', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( '17-06-44 Av. J-C.', { jour=17, mois='juin', numMois=6, annee=-44 } )
	test( 'juin -44', { mois='juin', numMois=6, annee=-44 } )
	test( '06/-44', { mois='juin', numMois=6, annee=-44 } )
	test( 'June 17, 2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( 'June 17,2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( 'le Mercredi 17 Juin 2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '2015 juin', 'Date invalide (2015 juin)' )
	test( '32/2015', 'Date invalide (32/2015)' )
	test( '06/17', 'Mois invalide (17)' )
	test( 'Otcobre', 'Mois invalide (Otcobre)' )
	test( 'blaa bla', 'Date invalide (blaa bla)' )
	test( '17\194\160juin\194\1602015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17&nbsp;juin&nbsp;2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '<span class="nowrap">17 juin 2015</span>', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17&nbsp;&#160;juin\194\1602015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17   juin&#32;2015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17&#8239;juin\226\128\1752015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '17&thinsp;&#8201;juin\226\128\1372015', { jour=17, mois='juin', numMois=6, annee=2015 } )
	test( '<time class="nowrap date-lien" datetime="2015-06-17">[[17 juin |17]] [[juin 2015 |juin]] [[2015]]</time>', { jour=17, mois='juin', numMois=6, annee=2015 } )
end

function p:test04_modeleDate_avant_rendu()
	local function test( args, expected )
		local text = table_to_str( args )
		args.debug = true
		local result = Date.modeleDate( args )
		if type( result ) == 'table' then
			self:equals_deep( text, result, expected )
		else
			self:equals( text, result, '<span class="error">' .. expected .. '</span>' )
		end
	end
	test( { '17', 'juin', '2015' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { jour='17', mois='juin', annee='2015' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { jour='17', mois='juin', annee='2015', liens='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=false } )
	test( { jour='17', mois='juin', ['année']='2015' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { jour='17', mois='juin', annee='2015', masquerAnnee=true }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true, masquerAnnee=true } )
	test( { jour='17', mois='juin', annee='2015', masquerMois=true, masquerAnnee=true }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true, masquerMois=true, masquerAnnee=true } )
	test( { 17, 6, 2015 }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { jour=17, mois=6, annee=2015 }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { jour=nil, mois=6, annee=2015 }, { jour=nil, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { '17', 'juin', '-44' }, { jour=17, mois='juin', numMois=6, annee=-44, republicain = false, nolinks=true } )
	test( { '17', 'juin', '44 av. J.-C.' }, { jour=17, mois='juin', numMois=6, annee=-44, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015-' }, { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil, republicain = false, nolinks=true } )
	test( { '17', 'juin-', '2015-' }, { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true, republicain = false, nolinks=true } )
	test( {' 17', 'juin', '2015', 'en musique' }, { jour=17, mois='juin', numMois=6, annee=2015, qualificatif='en musique', republicain = false, nolinks=false } )
	test( {' 17', 'juin', '2015', 'en musique', liens='non' }, { jour=17, mois='juin', numMois=6, annee=2015, qualificatif='en musique', republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015-', 'en musique' }, { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil, qualificatif='en musique', republicain = false, nolinks=false } )
	test( { '17 juin 2015' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { '17 juin 2015-' }, { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois=nil, republicain = false, nolinks=true } )
	test( { '17 juin- 2015-' }, { jour=17, mois='juin', numMois=6, annee=2015, masquerAnnee= true, masquerMois= true, republicain = false, nolinks=true } )
	test( { '17 juin 2015', 'en musique' }, { jour=17, mois='juin', numMois=6, annee=2015, qualificatif='en musique', republicain = false, nolinks=false } )
	test( { '', '17', 'juin', '2015' }, 'Année invalide (juin)' )
	test( { 'juin', '2015' }, 'Mois invalide (2015)' )
	test( { 'juin', '2015', 'en musique' }, 'Année invalide (en musique)' )
	test( { '17', 'juin', '2015', 'en sport' }, { jour=17, mois='juin', numMois=6, annee=2015, qualificatif='en sport', republicain = false, nolinks=false } )
	test( { '17', 'juin', '2015', age='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, ['âge']=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', ['âge']='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, ['âge']=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', ['âge']=true }, { jour=17, mois='juin', numMois=6, annee=2015, ['âge']=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', ['âge']='' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', naissance='oui'  }, { jour=17, mois='juin', numMois=6, annee=2015, naissance=true , republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', naissance=true }, { jour=17, mois='juin', numMois=6, annee=2015, naissance=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', mort='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, mort=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', ['décès'] = 'mort' }, { jour=17, mois='juin', numMois=6, annee=2015, mort=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', avJC='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, avJC=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', avJC='non' }, { jour=17, mois='juin', numMois=6, annee=2015, avJC=false, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', avJC='pipo' }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', nolinks='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, nolinks=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', compacte='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, compact=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', compact='non'  }, { jour=17, mois='juin', numMois=6, annee=2015, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', julien='oui' }, { jour=17, mois='juin', numMois=6, annee=2015, julien=true, republicain = false, nolinks=true } )
	test( { '17', 'juin', '2015', julien='court' }, { jour=17, mois='juin', numMois=6, annee=2015, julien='court', republicain = false, nolinks=true } )
end

function p:test05_dateInfobox()
	local frame = mw.getCurrentFrame()
	local function test( testArgs, expected )
		local text = table_to_str( testArgs )
		local resultat = Date.dateInfobox{ args = testArgs }
		self:equals( text, resultat , expected )
	end
	local function md( str )
		return frame:preprocess( '{{date|' .. str .. '}}' )
	end
	local function mdl( str )
		return frame:preprocess( '{{date|' .. str .. '|liens=oui}}' )
	end
	local nWikidata =  Wikidata.addLinkBack( mdl( '14 mai 1913' ), 'Q42', 'P569' )
	local n2Wikidata =  Wikidata.addLinkBack( mdl( '14 mai 1913' ) .. ' ou ' .. mdl( '17 septembre 1915' ), 'Q42', 'P569' )
	local mWikidata =  Wikidata.addLinkBack( mdl( '5 juin 2007' ), 'Q42', 'P570' )
	local m2Wikidata =  Wikidata.addLinkBack( mdl( '5 juin 2007' ) .. ' ou ' .. mdl( '18 juin 2007' ), 'Q42', 'P570' )
	local function wdlink( str )
		return Wikidata.addLinkBack( str, 'Q42', 'P585' )
	end
	
	--test( { }, nil )
	test( { '', '14 mai 1913' }, mdl( '14 mai 1913' ) )
	test( { 'd', '14 mai 1913' }, mdl( '14 mai 1913' ) )
	test( { 'd', '[[14 mai]] [[1913]]' }, mdl( '14 mai 1913' ) )
	test( { 'n', '14 mai 1913' }, mdl( '14 mai 1913|naissance=oui|âge=oui' ) )
	test( { 'n', mdl( '14 mai 1913' ) }, mdl( '14 mai 1913' ) )
	test( { 'm', '14 mai 1913' }, nil )
	test( { '', '14 mai 1913', 'en musique' }, mdl( '14 mai 1913|en musique' ) )
	test( { 'd', '14 mai 1913', 'en musique' }, mdl( '14 mai 1913|en musique' ) )
	test( { 'n', '14 mai 1913', '', 'en musique' }, mdl( '14 mai 1913|en musique|naissance=oui|âge=oui' ) )
	test( { 'm', '14 mai 1913', '', 'en musique' }, nil )
	test( { '', '14 mai 1913', '5 juin 2007' }, mdl( '14 mai 1913' ) )
	test( { 'd', '14 mai 1913', '5 juin 2007' }, mdl( '14 mai 1913' ) )
	test( { 'n', '14 mai 1913', '5 juin 2007' }, mdl( '14 mai 1913|naissance=oui' ) )
	test( { 'm', '14 mai 1913', '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' )..' (à 94\194\160ans)' )
	test( { 'm', '14 mai 1913', '5 juin 2007', 'en musique' }, mdl( '5 juin 2007|en musique|mort=oui' )..' (à 94\194\160ans)' )
	test( { 'm', '14 mai 1913', mdl( '5 juin 2007' ) }, mdl( '5 juin 2007' ) )
	test( { 'n', '', '5 juin 2007' }, nil )
	test( { 'm', '', '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', 'inconnue', '5 juin 2007' }, 'inconnue' )
	test( { 'm', 'inconnue', '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', 'vers 1913', '5 juin 2007' }, 'vers 1913' )
	test( { 'n', 'vers ' .. md( '1913' ), '5 juin 2007' }, 'vers ' .. mdl( '1913' ) )
	test( { 'm', 'vers 1913', '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', 'avant ' .. md( 'juillet 1913' ), '5 juin 2007' }, 'avant ' .. mdl( 'juillet 1913' ) )
	test( { 'm', 'avant ' .. md( 'juillet 1913' ), '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', 'après ' .. md( 'juillet 1913' ), '5 juin 2007' }, 'après ' .. mdl( 'juillet 1913' ) )
	test( { 'm', 'après ' .. md( 'juillet 1913' ), '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', 'entre ' .. md( 'juillet 1913' ) .. ' et ' .. md( 'janvier 1914' ), '5 juin 2007' }, 'entre ' .. md( 'juillet 1913' ) .. ' et ' .. md( 'janvier 1914' ) )
	test( { 'm', 'entre ' .. md( 'juillet 1913' ) .. ' et ' .. md( 'janvier 1914' ), '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', md( 'juillet 1913-' ) .. ' ou ' .. md( 'août 1913' ), '5 juin 2007' }, md( 'juillet 1913-' ) .. ' ou ' .. md( 'août 1913' ) )
	test( { 'm', md( 'juillet 1913-' ) .. ' ou ' .. md( 'août 1913' ), '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' ) )
	test( { 'n', '14 mai 1913', 'inconnue' }, mdl( '14 mai 1913|naissance=oui' ) )
	test( { 'm', '14 mai 1913', 'inconnue' }, 'inconnue' )
	test( { 'm', '14 mai 1913', 'vers ' .. md('2007') }, 'vers ' .. mdl('2007') )
	test( { 'n', '14 mai 1913', 'vers 2007' }, mdl( '14 mai 1913|naissance=oui' ) )
	test( { 'm', '14 mai 1913', 'vers 2007' }, 'vers 2007' )
	test( { 'd', nWikidata }, nWikidata )
	test( { 'n', nWikidata }, nWikidata .. ' <span class="noprint">(' .. Date.age( 1913, 5, 14 ) .. '\194\160ans)</span>' )
	test( { 'n', n2Wikidata }, n2Wikidata )
	test( { 'n', nWikidata, '5 juin 2007' }, nWikidata )
	test( { 'n', nWikidata, mWikidata }, nWikidata )
	test( { 'n', nWikidata, mWikidata }, nWikidata )
	test( { 'm', '14 mai 1913', mWikidata }, mWikidata .. ' (à 94\194\160ans)' )
	test( { 'm', nWikidata, mWikidata }, mWikidata .. ' (à 94\194\160ans)' )
	test( { 'm', 'vers 1913', mWikidata }, mWikidata )
	test( { 'm', '14 mai 1913', m2Wikidata }, m2Wikidata )
	test( { 'm', nWikidata, m2Wikidata }, m2Wikidata )
	test( { 'd', 'texte avant ' .. md( '14 mai 1913' ) }, 'texte avant ' .. mdl( '14 mai 1913' ) )
	test( { 'd', md( '14 mai 1913' ) .. 'texte collé après' }, mdl( '14 mai 1913' ) .. 'texte collé après' )
	test( { 'd', '4 av. J.-C. texte après' }, mdl( '4 av. J.-C.' ) .. ' texte après' )
	test( { 'd', '14 mai 1913\127ljfslej' }, mdl( '14 mai 1913' ) .. '\127ljfslej' )
	test( { 'd', '14 mai 1913 en l\'[[Abbaye de Westminster]]' }, mdl( '14 mai 1913' ) .. ' en l\'[[Abbaye de Westminster]]' )
	test( { 'd', '14 mai 1913<br />en l\'[[Abbaye de Westminster]]' }, mdl( '14 mai 1913' ) .. '<br />en l\'[[Abbaye de Westminster]]' )
	test( { 'n', '14 mai 1913\127ljfslej' }, mdl( '14 mai 1913|naissance=oui' ) .. '\127ljfslej <span class="noprint">(' .. Date.age( 1913, 5, 14 ) .. '\194\160ans)</span>' )
	test( { 'n', '14 mai 1913 en l\'[[Abbaye de Westminster]]' }, mdl( '14 mai 1913|naissance=oui' ) .. ' en l\'[[Abbaye de Westminster]] <span class="noprint">(' .. Date.age( 1913, 5, 14 ) .. '\194\160ans)</span>' )
	test( { 'm', '14 mai 1913\127ljfslej', '5 juin 2007' }, mdl( '5 juin 2007|mort=oui' )..' (à 94\194\160ans)' )
	test( { 'm', '14 mai 1913', '5 juin 2007\127ljfslej' }, mdl( '5 juin 2007|mort=oui' )..'\127ljfslej (à 94\194\160ans)' )
	test( { 'm', '14 mai 1913', '5 juin 2007 en l\'[[Abbaye de Westminster]]' }, mdl( '5 juin 2007|mort=oui' ) .. ' en l\'[[Abbaye de Westminster]] (à 94\194\160ans)' )
	test( { 'm', '14 mai 1913', '5 juin 2007 (à 94 ans)' },  mdl( '5 juin 2007|mort=oui' ) .. ' (à 94\194\160ans)' )
	test( { 'd', '14 mai 1913', ['préfixe'] = 'le' }, 'le ' .. mdl( '14 mai 1913' ) )
	test( { 'd', '14 mai 1913', ['préfixe'] = 'le', ['préfixe sans jour'] = 'en' }, 'le ' .. mdl( '14 mai 1913' ) )
	test( { 'd', 'mai 1913', ['préfixe'] = 'le', ['préfixe sans jour'] = '' }, mdl( 'mai 1913' ) )
	test( { 'd', 'mai 1913', ['préfixe'] = 'le', ['préfixe sans jour'] = 'en' }, 'en ' .. mdl( 'mai 1913' ) )
	test( { 'd', '1913', ['préfixe sans jour'] = 'en' }, 'en ' .. mdl( '1913' ) )
	test( { 'd', 'mai 44', ['préfixe'] = 'le', ['préfixe sans jour'] = 'en' }, 'en ' .. mdl( 'mai 44' ) )
	test( { 'd', 'mai -44', ['préfixe'] = 'le', ['préfixe sans jour'] = 'en' }, 'en ' .. mdl( 'mai -44' ) )
	test( { 'd', md( '14 mai 1913' ) }, mdl( '14 mai 1913' ) )
	test( { 'd', mdl( '14 mai 1913-' ) }, mdl( '14 mai 1913-' ) )
	test( { 'd', mdl( '14 mai- 1913-' ) }, mdl( '14 mai- 1913-' ) )
	test( { 'd', md( '14 mai 1913-' ) }, mdl( '14 mai 1913-' ) )
	test( { 'd', md( '14 mai- 1913-' ) }, mdl( '14 mai- 1913-' ) )
	test( { 'd', md( '9 octobre 768' ) }, mdl( '9 octobre 768' ) )
	test( { 'd', md( '4 octobre 1582' ) }, mdl( '4 octobre 1582' ) )
	test( { 'd', md( '14 octobre 1582' ) }, mdl( '14 octobre 1582' ) )
	test( { 'd', '14 mai 1913-' }, mdl( '14 mai 1913-' ) )
	test( { 'd', '14 mai- 1913-' }, mdl( '14 mai- 1913-' ) )
	test( { 'd', '14 mai' }, mdl( '14 mai' ) )
	test( { 'd', md( '2 mai' ) }, mdl( '2 mai' ) )
	test( { 'd', md( '14 mai' ) }, mdl( '14 mai' ) )
	test( { 'd', md( 'mai 1913' ) }, mdl( 'mai 1913' ) )
	test( { 'd', '31 janvier -1' }, mdl( '31 janvier -1' ) )
	test( { 'd', '31 janvier 1 av. J.-C.' }, mdl( '31 janvier -1' ) )
	test( { 'd', '[[31 janvier]] [[1 av. J.-C.]]' }, mdl( '31 janvier -1' ) )
	test( { 'd', md( '31 janvier -1' ) }, mdl( '31 janvier -1' ) )
	test( { 'd', mdl( '31 janvier -1' ) }, mdl( '31 janvier -1' ) )
	test( { 'd', '14 mai -44' }, mdl( '14 mai -44' ) )
	test( { 'd', md( '14 mai -44' ) }, mdl( '14 mai -44' ) )
	test( { 'd', mdl( '14 mai -44' ) }, mdl( '14 mai -44' ) )
	test( { 'd', '14 mai -44-' }, mdl( '14 mai -44-' ) )
	test( { 'd', md( '14 mai -44-' ) }, mdl( '14 mai -44-' ) )
	test( { 'd', mdl( '14 mai -44-' ) }, mdl( '14 mai -44-' ) )
	test( { 'd', '14 mai- -44-' }, mdl( '14 mai- -44-' ) )
	test( { 'd', md( '14 mai- -44-' ) }, mdl( '14 mai- -44-' ) )
	test( { 'd', mdl( '14 mai- -44-' ) }, mdl( '14 mai- -44-' ) )
	test( { 'd', md( 'mai -44' ) }, mdl( 'mai -44' ) )
	test( { 'd', mdl( 'mai -44' ) }, mdl( 'mai -44' ) )
	test( { 'd', 'mai -44-' }, mdl( 'mai -44-' ) )
	test( { 'd', md( 'mai -44-' ) }, mdl( 'mai -44-' ) )
	test( { 'd', mdl( 'mai -44-' ) }, mdl( 'mai -44-' ) )
	test( { 'd', '-44' }, mdl( '-44' ) )
	test( { 'd', '44 av. J.-C.' }, mdl( '-44' ) )
	test( { 'd', '[[44 av. J.-C.]]' }, mdl( '-44' ) )
	test( { 'd', md( '-44' ) }, mdl( '-44' ) )
	test( { 'd', mdl( '-44' ) }, mdl( '-44' ) )
	test( { 'd', '44' }, mdl( '44' ) )
	test( { 'd', md( '44' ) }, mdl( '44' ) )
	test( { 'd', mdl( '44' ) }, mdl( '44' ) )
	test( { 'd', '-344' }, mdl( '-344' ) )
	test( { 'd', md( '-344' ) }, mdl( '-344' ) )
	test( { 'd', mdl( '-344' ) }, mdl( '-344' ) )
	test( { 'd', '344 av. J.-C.' }, mdl( '-344' ) )
	test( { 'd', '[[344 av. J.-C.]]' }, mdl( '-344' ) )
	test( { 'd', '31 janvier 344 av. J.-C.' }, mdl( '31 janvier -344' ) )
	test( { 'd', '[[31 janvier]] [[344 av. J.-C.]]' }, mdl( '31 janvier -344' ) )
	test( { 'd', md( '2 mars 1959' ) .. '<br/>' .. md( '14 juillet 1989' ) }, md( '2 mars 1959' ) .. '<br/>' .. md( '14 juillet 1989' ) )
end

function p:test06_dureeInfobox()
	local frame = mw.getCurrentFrame()
	local function test( testArgs, expected )
		local text = table_to_str( testArgs )
		local resultat = Date.dureeInfobox{ args = testArgs }
		self:equals( text, resultat , expected )
	end
	local function md( str )
		return frame:preprocess( '{{date|' .. str .. '}}' )
	end
	local function mdl( str )
		return frame:preprocess( '{{date|' .. str .. '|liens=oui}}' )
	end
	local function duree( str )
		return frame:preprocess( '{{durée|' .. str .. '}}' )
	end
	local function dureeFormatee( str )
		local res = duree( str )
		if res then
			return '<br /><small>(' .. res .. ')</small>'
		end
	end
	
	test( { '8 septembre 2022' }, dureeFormatee( '8|septembre|2022' ) )
	test( { '[[8 septembre]] [[2022]]' }, dureeFormatee( '8|septembre|2022' ) )
	test( { md( '8 septembre 2022' ) }, dureeFormatee( '8|septembre|2022' ) )
	test( { mdl( '8 septembre 2022' ) }, dureeFormatee( '8|septembre|2022' ) )
	test( { '8 septembre 2022<br><small>(' .. duree( '8|septembre|2022' ) .. ')</small>' }, nil )
	test( { '[[8 septembre]] [[2022]]<br><small>(' .. duree( '8|septembre|2022' ) .. ')</small>' }, nil )
	test( { md( '8 septembre 2022' ) .. '<br><small>(' .. duree( '8|septembre|2022' ) .. ')</small>' }, nil )
	test( { mdl( '8 septembre 2022' ) .. '<br><small>(' .. duree( '8|septembre|2022' ) .. ')</small>' }, nil )
	test( { '20 janvier 1993', '20 janvier 2001' }, dureeFormatee( '20|janvier|1993|20|janvier|2001' ) )
	test( { '[[20 janvier]] [[1993]]', '[[20 janvier]] [[2001]]' }, dureeFormatee( '20|janvier|1993|20|janvier|2001' ) )
	test( { md( '20 janvier 1993' ), md( '20 janvier 2001' ) }, dureeFormatee( '20|janvier|1993|20|janvier|2001' ) )
	test( { mdl( '20 janvier 1993' ), mdl( '20 janvier 2001' ) }, dureeFormatee( '20|janvier|1993|20|janvier|2001' ) )
	test( { 'texte avant ' .. md( '20 janvier 1993' ) .. ' texte après', 'texte avant ' .. md( '20 janvier 2001' ) .. ' texte après' }, dureeFormatee( '20|janvier|1993|20|janvier|2001' ) )
	test( { '20 janvier 1993', '20 janvier 2001<br><small>(' .. duree( '20|janvier|1993|20|janvier|2001' ) .. ')</small>' }, nil )
	test( { '[[20 janvier]] [[1993]]', '[[20 janvier]] [[2001]]<br><small>(' .. duree( '20|janvier|1993|20|janvier|2001' ) .. ')</small>' }, nil )
	test( { md( '20 janvier 1993' ), md( '20 janvier 2001' ) .. '<br><small>(' .. duree( '20|janvier|1993|20|janvier|2001' ) .. ')</small>' }, nil )
	test( { mdl( '20 janvier 1993' ), mdl( '20 janvier 2001' ) .. '<br><small>(' .. duree( '20|janvier|1993|20|janvier|2001' ) .. ')</small>' }, nil )
	test( { '27 juin 1940-', '6 septembre 1940' }, dureeFormatee( '27|6|1940|6|9|1940' ) )
	test( { md( '27 juin 1940-' ), md( '6 septembre 1940' ) }, dureeFormatee( '27|6|1940|6|9|1940' ) )
	test( { mdl( '27 juin 1940-' ), mdl( '6 septembre 1940' ) }, dureeFormatee( '27|6|1940|6|9|1940' ) )
	test( { '23 décembre- 1977-', '26 décembre 1977' }, dureeFormatee( '23|12|1977|26|12|1977' ) )
	test( { md( '23 décembre- 1977-' ), md( '26 décembre 1977' ) }, dureeFormatee( '23|12|1977|26|12|1977' ) )
	test( { mdl( '23 décembre- 1977-' ), mdl( '26 décembre 1977' ) }, dureeFormatee( '23|12|1977|26|12|1977' ) )
	test( { '23 décembre- 1977-', '26 décembre 1977<br>(' .. duree( '23|12|1977|26|12|1977' ) .. ')' }, nil )
	test( { md( 'juin 885' ), md( 'novembre 887' ) }, dureeFormatee( '|juin|885||novembre|887' ) )
	test( { md( '[[876]]' ), md( 'novembre 887' ) }, dureeFormatee( '||876||novembre|887' ) )
	test( { md( 'août 843' ), md( '6 octobre 877' ) }, dureeFormatee( '|août|843|6|octobre|877' ) )
	test( { md( 'août 843' ), md( '6 octobre 877' ) .. '<br /><small>(34 ans et 2 mois)</small>' }, nil )
	test( { '1404', '1417' }, dureeFormatee( '||1404|||1417' ) )
	test( { '[[1404]]', '[[1417]]' }, dureeFormatee( '||1404|||1417' ) )
	test( { md( '1404' ), md( '1417' ) }, dureeFormatee( '||1404|||1417' ) )
	test( { mdl( '1404' ), mdl( '1417' ) }, dureeFormatee( '||1404|||1417' ) )
	test( { '-404', '-400' }, dureeFormatee( '||-404|||-400' ) )
	test( { '[[-404]]', '[[-400]]' }, dureeFormatee( '||-404|||-400' ) )
	test( { '404 av. J.-C.', '400 av. J.-C.' }, dureeFormatee( '||-404|||-400' ) )
	test( { '[[404 av. J.-C.]]', '[[400 av. J.-C.]]' }, dureeFormatee( '||-404|||-400' ) )
	test( { md( '-404' ), md( '-400' ) }, dureeFormatee( '||-404|||-400' ) )
	test( { mdl( '-404' ), mdl( '-400' ) }, dureeFormatee( '||-404|||-400' ) )
	test( { '-404', '-400<br><small>(' .. duree( '||-404|||-400' ) .. ')</small>' }, nil )
	test( { '404 av. J.-C.', '400 av. J.-C.<br><small>(' .. duree( '||-404|||-400' ) .. ')</small>' }, nil )
	test( { '613', '613' }, dureeFormatee( '||613|||613' ) )
	test( { md( '31 octobre 657' ), '[[673]]' }, nil )
	test( { '[[481]]/[[482]]', md( '27|novembre|511' ) }, nil )
	test( { '[[511]]', md( '25 juin 524' ) .. ' (' .. frame:preprocess( '{{unité|13|ans}}' ) .. ')' }, nil )
	test( { 'vers [[882]]', 'vers [[890]]' }, nil )
	test( { '28 avril', '31 mai 2023' }, nil )
	test( { '1 juin', '13 septembre 2018' }, nil )
	test( { '1 juin' }, nil )
	test( { md( '3|septembre|1843' ), md( '26|juillet|1842' ) }, nil )
	test( { 'avant le ' .. md( '3|septembre|1843' ), md( '26|juillet|2001' ) }, nil )
	test( { 'après le ' .. md( '3|septembre|1843' ), md( '26|juillet|2001' ) }, nil )
	test( { 'vers le ' .. md( '3|septembre|1843' ), md( '26|juillet|2001' ) }, nil )
	test( { md( '3|septembre-|1843-' ) .. ' ou ' .. md( '4|septembre|1843' ), md( '26|juillet|2001' ) }, nil )
end

-- Vérifie que la conversion date julienne vers jour julien puis jour julien vers date julienne redonne le résultat initial
function p:test07_julien()
	local function test(y, m, d)
		local resY, resM, resD = Date.julianDayToJulian(Date.julianDayJulian(y, m, d))
		self:equals_deep(table_to_str({y, m, d}), {resY, resM, resD}, {y, m, d})
	end
	
	test( -4712, 1, 1 )
	test( -4712, 1, 31 )
	test( -4712, 2, 1 )
	test( -4712, 2, 28 )
	test( -4712, 2, 29 )
	test( -4712, 3, 1 )
	test( -4712, 12, 31 )
	test( -4711, 1, 1 )
	test( -1, 8, 8 )
	test( -1, 12, 31 )
	test( 1, 1, 1 )
	test( 1580, 2, 29 )
	test( 1580, 3, 1 )
	test( 1582, 10, 14 )
	test( 1582, 10, 24 )
end

-- Vérifie que la conversion date grégorienne vers jour julien puis jour julien vers date grégorienne redonne le résultat initial
function p:test08_gregorian()
	local function test(y, m, d)
		local resY, resM, resD = Date.julianDayToGregorian(Date.julianDay(y, m, d))
		self:equals_deep(table_to_str({y, m, d}), {resY, resM, resD}, {y, m, d})
	end
	
	test( -4712, 11, 24 )
	test( -4712, 12, 31 )
	test( -4711, 1, 1 )
	test( -1, 12, 31 )
	test( 1, 1, 1 )
	test( 1580, 2, 28 )
	test( 1580, 2, 29 )
	test( 1580, 3, 1 )
	test( 1582, 10, 14 )
	test( 1582, 10, 24 )
end
	
return p