89,18 → 89,58 |
Debug::printr('Nbre noms :'.count($this->noms)); |
} |
|
public function lancerTestsAuto() { |
$resultats = array(); |
|
// Lancement des tests unitaires |
foreach (array_keys($this->tests) as $numero) { |
$info = $this->getInfosTest($numero); |
|
if ($numero < 5) { |
// Tests spéciaux vérifiant la structure de la table |
$resultats[] = $this->lancerTestUnitaire($info); |
} else if ($numero >= 5 && $this->verifierResultats($resultats)) { |
// Si la structure est bonne nous lançons les autres tests |
|
} |
} |
} |
|
public function lancerTestUnitaire($info) { |
$methodeDeTest = $info['methode']; |
$erreurs = $this->$methodeDeTest; |
|
// Analyse des résultats |
if (isset($erreurs['special'])) { |
$info = $erreurs; |
} else { |
if (count($erreurs) > 0) { |
$info['message']['entete'] = explode(',', $info['entete']); |
$info['message']['lignes'] = $erreurs; |
} else { |
$info['resultat'] = true; |
} |
} |
|
$this->traiterResultatTest($info); |
|
if ($info['numero'] < 5) { |
return ($info['resultat'] ? '1' : '0'); |
} |
} |
|
public function lancerTests() { |
// Lancement des tests unitaires |
$resultats = array(); |
$resultats[] = $this->testerNombreDeChamps($this->colonnes); |
$resultats[] = $this->testerNomDesChamps($this->colonnes); |
$resultats[] = $this->testerTypeDesChamps($this->colonnes); |
$resultats[] = $this->testerNumNomClePrimaire($this->colonnes); |
$resultats[] = $this->testerNombreDeChamps(); |
$resultats[] = $this->testerNomDesChamps(); |
$resultats[] = $this->testerTypeDesChamps(); |
$resultats[] = $this->testerNumNomClePrimaire(); |
|
// Si la structure est bonne nous lançons les autres tests |
Debug::printr($resultats); |
if ($this->verifierResultats($resultats)) { |
$this->testerTailleDesChamps($this->colonnes, $this->analyses); |
$this->testerTailleDesChamps(); |
|
$this->testerNumNomSuperieurAZero(); |
|
187,6 → 227,7 |
$this->testerExclureTaxRefSyntaxe(); |
} |
} |
|
private function verifierResultats($resultats) { |
$ok = true; |
foreach ($resultats as $resultat) { |
219,27 → 260,29 |
/** |
* Test #01 |
*/ |
private function testerNombreDeChamps($colonnes) { |
private function testerNombreDeChamps() { |
$info = $this->getInfosTest(1); |
$info['special'] = true; |
|
$nbre_colonnes = count($colonnes); |
$nbre_colonnes = count($this->colonnes); |
$info['message'] = $nbre_colonnes; |
if ($nbre_colonnes >= 35) { |
$info['resultat'] = true; |
} |
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
|
return $info; |
} |
|
/** |
* Test #02 |
*/ |
private function testerNomDesChamps($colonnes) { |
private function testerNomDesChamps() { |
$info = $this->getInfosTest(2); |
$info['special'] = true; |
|
$champs_attendus = explode(',', $this->manuel['champs']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne; |
} |
|
251,24 → 294,22 |
$ok = false; |
} |
} |
|
$info['resultat'] = $ok; |
if (!$ok) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_manquant)); |
} |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $info; |
} |
|
/** |
* Test #03 |
*/ |
private function testerTypeDesChamps($colonnes) { |
$info = $this->getInfosTest(3); |
|
private function testerTypeDesChamps() { |
$champs_attendus = explode(',', $this->manuel['champs_type']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne['Type']; |
} |
|
285,36 → 326,26 |
|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false) |
|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) |
|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) { |
$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type; |
$champs_erreur[] = array($champ_attendu, $champ_attendu_type, $champs_present_type); |
} |
} |
} |
|
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
return $champs_erreur; |
} |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
} |
|
/** |
* Test #04 |
*/ |
private function testerNumNomClePrimaire($colonnes) { |
private function testerNumNomClePrimaire() { |
$info = $this->getInfosTest(4); |
$info['special'] = true; |
|
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') { |
$info['resultat'] = true; |
} |
} |
|
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $info; |
} |
|
|
321,11 → 352,9 |
/** |
* Test #05 |
*/ |
private function testerTailleDesChamps($colonnes, $analyses) { |
$info = $this->getInfosTest(5); |
|
private function testerTailleDesChamps() { |
$tailles_champs_maxi = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) { |
$tailles_champs_maxi[$colonne['Field']] = $match[1]; |
} |
332,7 → 361,7 |
} |
|
$tailles_trouvees = array(); |
foreach ($analyses as $analyse) { |
foreach ($this->analyses as $analyse) { |
if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) { |
$tailles_trouvees[$match[1]] = $analyse['Max_length']; |
} |
343,45 → 372,27 |
foreach ($champs_attendus as $champ_attendu) { |
if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) { |
if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) { |
$champs_erreur[] = $champ_attendu; |
$champs_erreur[] = array($champ_attendu, $tailles_champs_maxi[$champ_attendu], $tailles_trouvees[$champ_attendu]); |
} |
} |
} |
|
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
return $champs_erreur; |
} |
|
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #06 |
*/ |
private function testerNumNomSuperieurAZero() { |
$info = $this->getInfosTest(6); |
|
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur)); |
} else { |
$info['resultat'] = true; |
return $noms_erreur; |
} |
|
$this->traiterResultatTest($info); |
} |
|
/** |
* Test #07 |
*/ |
392,13 → 403,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_nom_retenu']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_nom_retenu'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
416,13 → 428,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (preg_match('/^0$/', $nom['num_tax_sup'])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 1) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
440,13 → 453,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
465,7 → 479,7 |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
} |
472,7 → 486,8 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
495,7 → 510,7 |
if ($nom_sup['rang'] >= $nom['rang']) { |
// Prise en compte de l'exception des clades |
if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['rang'], $nom_sup['num_nom'], $nom_sup['rang']); |
} |
} |
} |
504,7 → 519,8 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'rang', 'Taxon supérieur num_nom', 'Taxon supérieur rang'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
530,10 → 546,10 |
$classif_ok = $this->remonterClassif($nom); |
unset($this->detection_boucle_infini); |
|
if ($classif_ok === false) { |
$noms_erreur[] = $nom['num_nom']; |
if ($classif_ok === true) { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
} else { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
$noms_erreur[] = array($nom['num_nom'], $classif_ok); |
} |
} |
} |
542,7 → 558,8 |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'Message du problème'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
560,9 → 577,9 |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') { |
return false; |
return 'Hiérarchie avec le taxon #'.$nom['num_nom'].' ayant un taxon superieur #'.$nom['num_tax_sup'].' inexistant'; |
} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) { |
return false; |
return 'Boucle infinie pour le taxon #'.$nom['num_tax_sup']; |
} else { |
$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]); |
if ($retour === true) { |
571,7 → 588,7 |
return $retour; |
} |
} else { |
return false; |
return 'Valeur num_tax_sup incorrecte : '.$nom['num_tax_sup']; |
} |
} |
|
587,13 → 604,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (!isset($rangs[$nom['rang']])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['rang']); |
} |
} |
|
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'Rang'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
1714,10 → 1732,7 |
* Test #51 |
*/ |
private function testerSynonymeProparteExistence() { |
$info = array('nom' => 'synonyme_proparte -> existence', |
'description' => "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux ". |
"doit correspondre à une valeur du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(51); |
|
// Réalisation du test |
$noms_erreur = array(); |
1752,11 → 1767,7 |
* Test #52 |
*/ |
private function testerSynonymeDouteuxSyntaxe() { |
$info = array('nom' => 'synonyme_douteux -> syntaxe', |
'description' => "Le champ synonyme_douteux contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
$info = $this->getInfosTest(52); |
|
// Réalisation du test |
$noms_erreur = array(); |
1784,9 → 1795,7 |
* Test #53 |
*/ |
private function testerSynonymeDouteuxNumNomRetenu() { |
$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu', |
'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.", |
'resultat' => false); |
$info = $this->getInfosTest(53); |
|
// Réalisation du test |
$noms_erreur = array(); |
1811,11 → 1820,7 |
* Test #54 |
*/ |
private function testerSynonymeMalAppliqueSyntaxe() { |
$info = array('nom' => 'synonyme_mal_applique -> syntaxe', |
'description' => "Le champ synonyme_mal_applique contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
$info = $this->getInfosTest(54); |
|
// Réalisation du test |
$noms_erreur = array(); |
1843,11 → 1848,7 |
* Test #55 |
*/ |
private function testerSynonymeOrthographiqueSyntaxe() { |
$info = array('nom' => 'synonyme_orthographique -> syntaxe', |
'description' => "Le champ synonyme_orthographique contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(55); |
|
// Réalisation du test |
$noms_erreur = array(); |
1875,10 → 1876,7 |
* Test #56 |
*/ |
private function testerSynonymeOrthographiqueExistence() { |
$info = array('nom' => 'synonyme_orthographique -> existence', |
'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ". |
"à une valeur du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(56); |
|
// Réalisation du test |
$noms_erreur = array(); |
1906,11 → 1904,7 |
* Test #57 |
*/ |
private function testerHybrideParent01Syntaxe() { |
$info = array('nom' => 'hybride_parent_01 -> syntaxe', |
'description' => "Le champ hybride_parent_01 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(57); |
|
// Réalisation du test |
$noms_erreur = array(); |
1938,10 → 1932,7 |
* Test #58 |
*/ |
private function testerHybrideParent01Existence() { |
$info = array('nom' => 'hybride_parent_01 -> existence', |
'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(58); |
|
// Réalisation du test |
$noms_erreur = array(); |
1969,11 → 1960,7 |
* Test #59 |
*/ |
private function testerHybrideParent02Syntaxe() { |
$info = array('nom' => 'hybride_parent_02 -> syntaxe', |
'description' => "Le champ hybride_parent_02 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(59); |
|
// Réalisation du test |
$noms_erreur = array(); |
2001,10 → 1988,7 |
* Test #60 |
*/ |
private function testerHybrideParent02Existence() { |
$info = array('nom' => 'hybride_parent_02 -> existence', |
'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(60); |
|
// Réalisation du test |
$noms_erreur = array(); |
2032,13 → 2016,7 |
* Test #61 |
*/ |
private function testerPresenceSyntaxe() { |
$info = array('nom' => 'presence -> syntaxe', |
'description' => "Le champ presence contient soit :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(61); |
|
// Réalisation du test |
$noms_erreur = array(); |
2066,13 → 2044,7 |
* Test #62 |
*/ |
private function testerStatutOrigineSyntaxe() { |
$info = array('nom' => 'statut_origine -> syntaxe', |
'description' => "Le champ statut_origine peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(62); |
|
// Réalisation du test |
$noms_erreur = array(); |
2100,13 → 2072,7 |
* Test #63 |
*/ |
private function testerStatutIntroductionSyntaxe() { |
$info = array('nom' => 'statut_introduction -> syntaxe', |
'description' => "Le champ statut_introduction peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(63); |
|
// Réalisation du test |
$noms_erreur = array(); |
2134,13 → 2100,7 |
* Test #64 |
*/ |
private function testerStatutCultureSyntaxe() { |
$info = array('nom' => 'statut_culture -> syntaxe', |
'description' => "Le champ statut_culture peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(64); |
|
// Réalisation du test |
$noms_erreur = array(); |
2169,13 → 2129,6 |
*/ |
private function testerExclureTaxRefSyntaxe() { |
$info = $this->getInfosTest(65); |
$info = array('nom' => 'exclure_taxref -> syntaxe', |
'description' => "Le champ exclure_taxref contient soit :\n". |
" - une valeur vide.\n". |
" - une valeur null.\n". |
" - le chiffre 0.\n". |
" - le chiffre 1", |
'resultat' => false); |
|
// Réalisation du testCe n'est pas programmé. |
$noms_erreur = array(); |
2481,6 → 2434,7 |
|
private function getInfosTest($numero) { |
$info = $this->tests[$numero]; |
$info['methode'] = 'tester'.implode('', explode(' ', ucwords($info['abr']))); |
$info['numero'] = $numero; |
$info['resultat'] = false; |
return $info; |