Revue précédents scripts de test suite évolution.

This commit is contained in:
Fabrice PENHOËT 2021-09-30 12:52:33 +02:00
parent 50b8a8fccc
commit e068aee5aa
6 changed files with 81 additions and 126 deletions

View File

@ -68,7 +68,7 @@ export class FreeDatas2HTML
}
if(datas2Parse !== "")
this.parser.datas2Parse=datas2Parse;
else if(datasRemoteSource!==undefined)
else if(datasRemoteSource !== undefined)
this.parser.datasRemoteSource=datasRemoteSource;
else
throw new Error(errors.converterNeedDatas);
@ -142,7 +142,8 @@ export class FreeDatas2HTML
return undefined;
}
// Lance FreeDatas2HTML suivant les données reçues :
// Traite les données fournies via le parseur adhoc
// Si un élément du DOM est fourni, appelle la fonction affichant les données
public async run(): Promise<any>
{
await this.parser.parse();
@ -150,37 +151,37 @@ export class FreeDatas2HTML
throw new Error(errors.parserFail);
else
{
this.fields=this.parser.parseResults.fields;
this.datas=this.parser.parseResults.datas;
this.parseErrors=this.parser.parseResults.errors;
if(this.fields === undefined)
if(this.parser.parseResults.fields === undefined)
throw new Error(errors.parserDatasNotFound);
else if(this.stopIfParseErrors && this.parseErrors !== undefined)
throw new Error(errors.parrserMeetErrors);
else if(this.stopIfParseErrors && this.parser.parseResults.errors !== undefined)
throw new Error(errors.parserMeetErrors);
else
{
// Si tout est ok, affichage initial de toutes les données du fichier
this.refreshView();
// revoir l'intérêt de copier ces 3 attributs ?
this.fields=this.parser.parseResults.fields;
this.datas=this.parser.parseResults.datas;
this.parseErrors=this.parser.parseResults.errors;
if(this._datasViewElt !== undefined)
this.refreshView();
return true;
}
}
}
refreshView() : void
public refreshView() : void
{
if(this.fields === undefined)
if(this.fields === undefined || this._datasViewElt === undefined || this._datasViewElt.eltDOM === undefined)
throw new Error(errors.converterRefreshFail);
this.datasHTML=this.createDatas2Display(this.fields, this.datas);
if(this._datasViewElt !== undefined && this._datasViewElt.eltDOM !== undefined)
this._datasViewElt.eltDOM.innerHTML=this.datasHTML;
// On réactive les éventuels champs de classement
for(let i in this.datasSortingFields)
else
{
let field=this.datasSortingFields[i];
field.field2HTML();
this.datasHTML=this.createDatas2Display(this.fields, this.datas);
this._datasViewElt.eltDOM.innerHTML=this.datasHTML;
// On réactive les éventuels champs de classement qui ont été écrasés
for(let i in this.datasSortingFields)
{
let field=this.datasSortingFields[i];
field.field2HTML();
}
}
}

View File

@ -2,13 +2,15 @@ import { FreeDatas2HTML, Render} from "../src/freeDatas2HTML";
const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js");
/// Tests à revoir pour ne pas dépendre du bon fonctionnement de Parser et Render (mock...)
describe("Test du script central de FreeDatas2HTML", () =>
{
let converter: FreeDatas2HTML;
beforeEach( () =>
{
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
document.body.insertAdjacentHTML('afterbegin', fixtures.datasViewEltHTML);
});
@ -35,18 +37,12 @@ describe("Test du script central de FreeDatas2HTML", () =>
const checkElt=FreeDatas2HTML.checkInDOMById({ id:"datas" });
expect(checkElt).toEqual({ id:"datas", eltDOM: eltInDOM });
});
it("Doit générer une erreur si l'url fournie pour le fichier de données est vide.", () =>
{
expect(() => { return converter.datasSourceUrl=" "; }).toThrowError(errors.parserNeedUrl);
});
it("Doit retourner false si un numéro de champ n'est pas trouvé dans les données.", async () =>
{
let check=converter.checkFieldExist(2);// aucune donnée chargée, donc le champ ne peut être trouvé
let check=converter.checkFieldExist(2); // aucune donnée chargée, donc le champ ne peut être trouvé
expect(check).toBeFalse();
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
check=converter.checkFieldExist(-2);
expect(check).toBeFalse();
check=converter.checkFieldExist(1.1);
@ -54,17 +50,16 @@ describe("Test du script central de FreeDatas2HTML", () =>
check=converter.checkFieldExist(10);
expect(check).toBeFalse();
});
it("Doit retourner true si un numéro de champ a bien été trouvé dans les données.", async () =>
it("Doit retourner true si un numéro de champ est bien trouvé dans les données.", async () =>
{
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
let check=converter.checkFieldExist(0);
expect(check).toBeTrue();
check=converter.checkFieldExist(2);
expect(check).toBeTrue();
});
it("Doit générer une erreur si une fonction est associée à un champ n'existant pas dans les données.", async () =>
{
const simpleSort = (a: any, b: any) =>
@ -77,12 +72,12 @@ describe("Test du script central de FreeDatas2HTML", () =>
return 0;
};
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound); // données non chargées
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:10, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound);
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
await converter.run();
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:10, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound);
});
it("Doit accepter le fonction associée à un champ, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", async () =>
it("Doit accepter la fonction associée à un champ, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", async () =>
{
const simpleSort = (a: any, b: any) =>
{
@ -93,94 +88,59 @@ describe("Test du script central de FreeDatas2HTML", () =>
else
return 0;
};
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }];
expect(converter.getSortingFunctionForField(0)).toBeDefined();
expect([7,9,3,5].sort(converter.getSortingFunctionForField(0).sort)).toEqual([9,7,5,3]);
});
});
describe("Parsage du fichier et création du tableau de données", () =>
describe("Affichage des données reçues.", () =>
{
it("Doit générer une erreur si la lecture du fichier échoue.", async () =>
it("Doit générer une erreur si des données n'ont pas été importées.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv";
await expectAsync(converter.parse()).toBeRejectedWith(new Error(errors.parserFail));
// Parseur non lancé :
expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
// Lancé, mais sur un fichier vide : à revoir, car c'est le parseur qui génère d'abord une erreur
//converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/nodatas.csv"});
//await converter.run();
//expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
});
it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () =>
it("Doit générer une erreur si l'élément du DOM où afficher les données est inconnu.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
await converter.parse();
expect(converter.parseErrors.length).toBeGreaterThan(0);
await converter.run();
expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
});
it("Ne doit garder que les noms de colonne non vides.", async () =>
it("Ne doit pas générer d'erreur si les informations nécessaires sont ok.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors2.csv";
await converter.parse();
expect(converter.parseMetas.fields.length).toEqual(5);
});
it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
expect(converter.parseErrors.length).toEqual(0);
});
it("Doit générer une erreur si lancé sur url fournie pour le fichier de données.", async () =>
{
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserNeedUrl));
});
it("Ne doit pas générer d'erreur si les deux paramètres fournis sont ok.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await expectAsync(converter.run()).toBeResolved();
await converter.run();
expect(() => { return converter.refreshView(); }).not.toThrowError();
});
it("Doit générer une erreur si aucune donnée n'a été trouvée dans le fichier et ne rien afficher dans l'emplacement prévu pour les données.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/nodatas.csv";
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserDatasNotFound));
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual("");
});
it("Si la moindre erreur est rencontrée durant la parsage et que cela est demandé, ne rien afficher dans l'emplacement prévu pour les données.", async () =>
it("Doit générer une erreur, si la moindre erreur est rencontrée durant la parsage et que cela n'est pas accepté.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas-errors1.csv"});
converter.stopIfParseErrors=true;
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual("");
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserMeetErrors));
});
it("Sauf si cela est demandé, les données trouvées dans le fichier seront affichées même si des erreurs sont rencontrées durant la parsage.", async () =>
it("Si cela n'est pas demandé, le script ne sera pas bloqué, même si des erreurs sont rencontrées durant le parsage.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).not.toEqual("");
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas-errors1.csv"});
await expectAsync(converter.run()).toBeResolved();
});
/// Plutôt pour tester Render
it("Doit afficher un tableau correspondant aux données du fichier csv", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.run();
const render=new Render(converter);
const htmlForDatas=render.rend2HTML(converter.parseDatas);
const htmlForDatas=render.rend2HTML(converter.datas);
// On ne peut comparer directement au contenu du DOM,
// car le navigateur change certains caractères (exemple : ">" devient "&gt;")
expect(converter.datasHTML).toEqual(htmlForDatas);
@ -194,12 +154,12 @@ describe("Test du script central de FreeDatas2HTML", () =>
it("Si demandé, doit afficher le nombre de lignes de données du fichier.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
converter.datasViewElt={ id:"datas" };
converter.datasCounter={ id:"counter" };
await converter.run();
let txtDatasViewsElt=document.getElementById("counter").innerHTML;
expect(txtDatasViewsElt).toEqual("118");
});
});
});

View File

@ -3,7 +3,7 @@ import { FreeDatas2HTML, Pagination } from "../src/freeDatas2HTML";
const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js");
describe("Test de la pagination.", () =>
xdescribe("Test de la pagination.", () =>
{
let converter: FreeDatas2HTML;
let pagination: Pagination;
@ -11,10 +11,9 @@ describe("Test de la pagination.", () =>
beforeEach( async () =>
{
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
pagination=new Pagination(converter, { id:"pages" }, "Page à afficher :");
});
@ -35,7 +34,7 @@ describe("Test de la pagination.", () =>
it("Doit générer une erreur si la pagination est initialisée sans données à traiter.", () =>
{
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new Pagination(converter, { id:"pages" }); }).toThrowError(errors.paginationNeedDatas);
});

View File

@ -9,17 +9,15 @@ describe("Test du moteur de rendu HTML.", () =>
beforeEach(() =>
{
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:8080/datas/datas1.csv"});
render=new Render(converter);
converter.parseMetas={ fields : [ "Z", "Élément", "Symbole", "Famille" ] };
converter.fields=[ "Z", "Élément", "Symbole", "Famille" ] ;
datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Z":"2","Élément":"Hélium","Symbole":"He","Famille":"Gaz noble"},{"Z":"3","Élément":"Lithium","Symbole":"Li","Famille":"Métal alcalin"},{"Z":"4","Élément":"Béryllium","Symbole":"Be","Famille":"","Champ ignoré":"Je me sens ignoré !"}] ;// Famille volontairement vide et champ à ignoré pour le dernier
});
it("Doit générer une erreur, si lancé sans fournir une liste des champs de données.", () =>
{
converter.parseMetas=undefined;
expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas);
converter.parseMetas={ delimiter: " "};
converter.fields=undefined;
expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas);
});

View File

@ -3,7 +3,7 @@ import { FreeDatas2HTML, Selector } from "../src/freeDatas2HTML";
const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js");
describe("Test des filtres de données", () =>
xdescribe("Test des filtres de données", () =>
{
let converter: FreeDatas2HTML;
let selector: Selector;
@ -11,10 +11,9 @@ describe("Test des filtres de données", () =>
beforeEach( async () =>
{
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
});
afterEach( () =>
@ -26,7 +25,7 @@ describe("Test des filtres de données", () =>
{
it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () =>
{
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new Selector(converter, 0, { id:"selector1" }); }).toThrowError(errors.selectorNeedDatas);
});
@ -61,10 +60,9 @@ describe("Test des filtres de données", () =>
beforeEach( async () =>
{
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.parse();
await converter.run();
selector=new Selector(converter, 3, { id:"selector1" });
});
@ -79,16 +77,16 @@ describe("Test des filtres de données", () =>
it("Si des valeurs vides sont présentes dans une champ utilisé pour un sélecteur, elles doivent être ignorées.", async () =>
{
converter.datasSourceUrl="http://localhost:9876/datas/datas1-emtyinfield.csv";
await converter.parse();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1-emtyinfield.csv"});
await converter.run();
selector.selector2HTML();
expect(document.getElementById("selector1").innerHTML).toEqual(fixtures.selector1HTML);
});
it("Si un séparateur est fourni, les valeurs distinctes extraites de ce champ doivent le prendre en compte.", async () =>
{
converter.datasSourceUrl="http://localhost:9876/datas/datas1+tagsfield.csv";
await converter.parse();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1+tagsfield.csv"});
await converter.run();
selector=new Selector(converter, 5, { id:"selector1" });
selector.separator="|";
selector.selector2HTML();

View File

@ -11,9 +11,8 @@ xdescribe("Test des champs de classement.", () =>
beforeEach( async () =>
{
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.run();
});
@ -26,7 +25,7 @@ xdescribe("Test des champs de classement.", () =>
{
it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () =>
{
converter=new FreeDatas2HTML();
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas);
});