Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 174 → Rev 175

/trunk/scripts/modules/tests/Tests.php
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;
}
$this->traiterResultatTest($info);
return ($info['resultat'] ? '1' : '0');
return $champs_erreur;
}
/**
* 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,19 → 372,11
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;
}
$this->traiterResultatTest($info);
return $champs_erreur;
}
/**
362,24 → 383,14
* 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;
}
$this->traiterResultatTest($info);
return $noms_erreur;
}
/**
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,14 → 2129,7
*/
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();
foreach ($this->noms as &$nom) {
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;