From 4d4360e709475d8030b477c0d9bd2af1c9aebe72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Thu, 12 Aug 2021 18:38:09 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20possibilit=C3=A9=20de=20tout=20stopper?= =?UTF-8?q?=20=C3=A0=20la=20moindre=20erreur=20rencontr=C3=A9e=20par=20le?= =?UTF-8?q?=20parseur=20+=20suppression=20des=20noms=20de=20colonne=20vide?= =?UTF-8?q?=20pouvant=20=C3=AAtre=20re=C3=A7us.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/freeCSV2HTML.ts | 17 ++++++++++++++--- tests/datas/datas-errors2.csv | 14 ++++++++++++++ tests/freeCSV2HTMLSpec.ts | 27 +++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 tests/datas/datas-errors2.csv diff --git a/package.json b/package.json index b802ddd..bc6f74d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "freecsv2html", - "version": "0.2.0", + "version": "0.3.1", "description": "Conversion of a csv file into an HTML code with selection lists, data sorting, etc.", "main": "index.js", "scripts": { diff --git a/src/freeCSV2HTML.ts b/src/freeCSV2HTML.ts index 5d96676..d56a0ed 100644 --- a/src/freeCSV2HTML.ts +++ b/src/freeCSV2HTML.ts @@ -25,6 +25,7 @@ export class freeCSV2HTML public parseDatas: papaParseDatas[] = []; public parseErrors: papaParseErrors[] = []; public datasHTML: string = ""; + public stopIfParseErrors : boolean = false; set datasViewElt(elt: domElement) { @@ -83,9 +84,17 @@ export class freeCSV2HTML header: true, complete: function(results :any) { - converter.parseMeta=results.meta; converter.parseErrors=results.errors; converter.parseDatas=results.data; + // Attention, papaParse peut accepter un nom de colonne vide + let realFields: string[]=[]; + for(let i in results.meta.fields) + { + if(results.meta.fields[i].trim() !== "") + realFields.push(results.meta.fields[i]); + } + results.meta.fields=realFields; + converter.parseMeta=results.meta; resolve(true); }, error:function(error :any) @@ -110,13 +119,15 @@ export class freeCSV2HTML await this.parse(); - if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) + if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) // je force avec "!", car l'existence de parseMeta certaine après parse(). throw new Error(errors.datasNotFound); + else if(this.stopIfParseErrors && this.parseErrors.length!==0) + console.error(this.parseErrors); else { let converter=this; // Affichage initial des données du fichier - this.datasHTML=this.createDatasHTML(this.parseMeta!.fields, this.parseDatas); // je force avec "!", car l'existence de parseMeta certaine après parse(). + 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 diff --git a/tests/datas/datas-errors2.csv b/tests/datas/datas-errors2.csv new file mode 100644 index 0000000..95484d4 --- /dev/null +++ b/tests/datas/datas-errors2.csv @@ -0,0 +1,14 @@ +Z (numéro atomique),Élément,Symbole,Famille,Abondance,, +1,Hydrogène,H,Non-métal,1400000,dze, +2,Hélium,He,Gaz noble,8,, +3,Lithium,Li,Métal alcalin,20000,, +4,Béryllium,Be,Métal alcalino-terreux,2800,, +5,Bore,B,Métalloïde,10000,dd,dd +6,Carbone,C,Non-métal,200000,, +7,Azote,N,Non-métal,19000,, +8,Oxygène,O,Non-métal,461000000,, +9,Fluor,F,Halogène,585000,, +10,Néon,Ne,Gaz noble,5,, +11,Sodium,Na,Métal alcalin,23600000,, +12,Magnésium,Mg,Métal alcalino-terreux,23300000,, +13,Aluminium,Al,Métal pauvre,82300000,, diff --git a/tests/freeCSV2HTMLSpec.ts b/tests/freeCSV2HTMLSpec.ts index 514e02d..b682f26 100644 --- a/tests/freeCSV2HTMLSpec.ts +++ b/tests/freeCSV2HTMLSpec.ts @@ -80,6 +80,14 @@ describe("freeCSV2HTML", () => expect(converter.parseErrors.length).toBeGreaterThan(0); }); + it("Ne doit garder que les noms de colonne non vides.", async () => + { + converter.datasViewElt={ id:"datas" }; + converter.datasSourceUrl="http://localhost:9876/datas/datas-errors2.csv"; + await converter.parse(); + expect(converter.parseMeta.fields.length).toEqual(5); + }); + it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () => { converter.datasViewElt={ id:"datas" }; @@ -110,6 +118,25 @@ describe("freeCSV2HTML", () => 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 () => + { + converter.datasViewElt={ id:"datas" }; + converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; + converter.stopIfParseErrors=true; + await converter.run(); + let txtDatasViewsElt=document.getElementById("datas").innerHTML; + expect(txtDatasViewsElt).toEqual(""); + }); + + it("Sauf si cela est demandé, même si des erreurs sont rencontrées durant la parsage, les données trouvées dans le fichier seront affichées.", 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(""); + }); it("Doit afficher un tableau correspondant aux données du fichier csv", async () => {