From f963f8fa687bbe07d838f1d3a62ade97f789adf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Thu, 12 Aug 2021 17:43:34 +0200 Subject: [PATCH] =?UTF-8?q?Suppression=20des=20erreurs=20lorsque=20les=20i?= =?UTF-8?q?nformations=20fournis=20pour=20un=20s=C3=A9lecteur=20ne=20sont?= =?UTF-8?q?=20pas=20correctes.=20Il=20sera=20juste=20ignor=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/errors.js | 2 +- src/freeCSV2HTML.ts | 23 ++++++++++++++------ tests/freeCSV2HTMLSpec.ts | 46 +++++++++++++++++++-------------------- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/errors.js b/src/errors.js index 41d51c3..5628da4 100644 --- a/src/errors.js +++ b/src/errors.js @@ -4,7 +4,7 @@ module.exports = elementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ", needDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.", needNaturalNumber: "Merci de fournir un nombre entier supérieur ou égal à zéro pour désigner chaque colonne.", - needUrl: "Merci de fournir l'url du fichier CSV à parser.", + needUrl: "Merci de fournir une url valide pour le fichier CSV à parser.", parserFail: "La lecture des données du fichier a échoué.", selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.", }; \ No newline at end of file diff --git a/src/freeCSV2HTML.ts b/src/freeCSV2HTML.ts index b589b27..a38e594 100644 --- a/src/freeCSV2HTML.ts +++ b/src/freeCSV2HTML.ts @@ -48,20 +48,28 @@ export class freeCSV2HTML set datasSelectors(selectionElts: selectors[]) { + this._datasSelectors=[]; // remise à zéro let checkContainerExist: HTMLElement|null; for(let i = 0; i < selectionElts.length; i++) { checkContainerExist=document.getElementById(selectionElts[i].id); if(checkContainerExist === null) - throw new Error(errors.elementNotFound+selectionElts[i].id); + console.error(errors.elementNotFound+selectionElts[i].id); else if(Number.isInteger( selectionElts[i].colCSV) === false || selectionElts[i].colCSV < 0) - throw new Error(errors.needNaturalNumber); + console.error(errors.needNaturalNumber); else - selectionElts[i].eltDOM=checkContainerExist; + { + selectionElts[i].eltDOM=checkContainerExist; + this._datasSelectors.push(selectionElts[i]); + } } - this._datasSelectors=selectionElts; } + get datasSelectors() : selectors[] + { + return this._datasSelectors; + } + public async parse(): Promise { const converter=this; @@ -99,6 +107,7 @@ export class freeCSV2HTML throw new Error(errors.needDatasElt); if(this._datasSourceUrl === "" ) throw new Error(errors.needUrl); + await this.parse(); if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) // je force avec "!", car l'existence de parseMeta certaine après parse(). @@ -110,7 +119,7 @@ export class freeCSV2HTML { let converter=this; // Affichage initial des données du fichier - this.datasHTML=this.createDatasHTML(this.parseMeta.fields, this.parseDatas); + this.datasHTML=this.createDatasHTML(this.parseMeta!.fields, this.parseDatas); this._datasViewElt.eltDOM.innerHTML=this.datasHTML; // Si demandé, création des listes permettant de filter les données @@ -120,11 +129,11 @@ export class freeCSV2HTML let selectorsHTML : string [] = []; for(let i in this._datasSelectors) { - if(this._datasSelectors[i].colCSV > (this.parseMeta.fields.length-1)) + if(this._datasSelectors[i].colCSV > (this.parseMeta!.fields.length-1)) throw new Error(errors.selectorFieldNotFound); else { - let values=[], colName=this.parseMeta.fields[this._datasSelectors[i].colCSV]; + let values=[], colName=this.parseMeta!.fields[this._datasSelectors[i].colCSV]; for (let row in this.parseDatas) { if(values.indexOf(this.parseDatas[row][colName].trim()) === -1) diff --git a/tests/freeCSV2HTMLSpec.ts b/tests/freeCSV2HTMLSpec.ts index 0f8b227..a904cba 100644 --- a/tests/freeCSV2HTMLSpec.ts +++ b/tests/freeCSV2HTMLSpec.ts @@ -34,22 +34,29 @@ describe("freeCSV2HTML", () => expect(() => { return converter.datasViewElt={ id:"datas" }; }).not.toThrowError(); }); - it("Doit générer une erreur s'il n'y a pas un élément dans la page pour chaque id fourni pour afficher un des sélecteurs.", () => + it("Ne doit accepter que les sélecteurs pour lesquels un élément a été trouvé dans la page pour l'id fourni.", () => { - expect(() =>{ return converter.datasSelectors=[{ colCSV:2, id:"selector2" },{ colCSV:3, id:"selector3" }]; }).toThrowError(errors.elementNotFound+"selector3"); + converter.datasSelectors=[{ colCSV:2, id:"selector2" },{ colCSV:3, id:"selector3" }]; + expect(converter.datasSelectors.length).toEqual(1); + expect(converter.datasSelectors[0].id).toEqual("selector2"); }); - it("Doit générer une erreur si tous les numéros de colonne des sélecteurs ne sont pas des nombres naturels.", () => + it("Ne doit accepter que les sélecteurs pour lesquels les numéros de colonne fourrnis sont des nombres naturels.", () => { - expect(() => { return converter.datasSelectors=[{ colCSV:2.3, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); - expect(() => { return converter.datasSelectors=[{ colCSV:2, id:"selector1" },{ colCSV:-1, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); - }); - - it("Ne doit pas générer une erreur si toutes les informations fournies pour les sélecteurs sont correctes.", () => - { - expect(() => { return converter.datasSelectors=[{ colCSV:0, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).not.toThrowError(); + converter.datasSelectors=[{ colCSV:2.3, id:"selector1" },{ colCSV:3, id:"selector2" }]; + expect(converter.datasSelectors.length).toEqual(1); + expect(converter.datasSelectors[0].id).toEqual("selector2"); + converter.datasSelectors=[{ colCSV:2, id:"selector1" },{ colCSV:-1, id:"selector2" }]; + expect(converter.datasSelectors.length).toEqual(1); + expect(converter.datasSelectors[0].id).toEqual("selector1"); }); + it("Doit accepter tous les sélecteurs si leurs informations sont valides.", () => + { + converter.datasSelectors=[{ colCSV:0, id:"selector1" },{ colCSV:3, id:"selector2" }]; + expect(converter.datasSelectors.length).toEqual(2); + }); + 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.needUrl); @@ -62,14 +69,14 @@ describe("freeCSV2HTML", () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv"; - await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserFail)); + await expectAsync(converter.parse()).toBeRejectedWith(new Error(errors.parserFail)); }); it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; - await converter.run(); + await converter.parse(); expect(converter.parseErrors.length).toBeGreaterThan(0); }); @@ -94,16 +101,7 @@ describe("freeCSV2HTML", () => converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await expectAsync(converter.run()).toBeResolved(); }); - - it("Doit afficher une erreur dans la page si la lecture du fichier échoue.", async () => - { - converter.datasViewElt={ id:"datas" }; - converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv"; - await converter.run(); - let txtDatasViewsElt=document.getElementById("datas").innerHTML; - expect(txtDatasViewsElt).toEqual(errors.parserFail); - }); - + it("Doit afficher une erreur dans la page si aucune donnée n'a été trouvée dans le fichier.", async () => { converter.datasViewElt={ id:"datas" }; @@ -122,7 +120,7 @@ describe("freeCSV2HTML", () => expect(txtDatasViewsElt).toEqual(fixtures.datasHTML); }); }); - + describe("Création et action des sélecteurs permettant de filter les données affichées.", () => { beforeEach( () => @@ -187,5 +185,5 @@ describe("freeCSV2HTML", () => expect(txtDatasViewsElt).toEqual(fixtures.datasHTMLFor2SelectNone); }); }); - + }); \ No newline at end of file