From ebca8d0223ad44ba6e6af7bdedf1931380bd5db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9mence=20Fernandez?= Date: Thu, 18 Sep 2025 09:58:34 +0200 Subject: [PATCH] Extract text inside a text:a tag and create a test --- scripts/shared.js | 2 +- tests/fixtures/cellules avec emails.ods | Bin 0 -> 11918 bytes tests/ods-files.js | 36 ++++++++++++++++++------ 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 tests/fixtures/cellules avec emails.ods diff --git a/scripts/shared.js b/scripts/shared.js index a5aba9b..6a97bbd 100644 --- a/scripts/shared.js +++ b/scripts/shared.js @@ -34,7 +34,7 @@ function extraxtODSCellText(cell) { } else if (pChild.nodeName === 'text:line-break') { text += '\n'; // Append newline for } else if (pChild.nodeName === 'text:a') { - text += pChild.nodeName + text += pChild.textContent } } } else if (child.nodeName === 'text:line-break') { diff --git a/tests/fixtures/cellules avec emails.ods b/tests/fixtures/cellules avec emails.ods new file mode 100644 index 0000000000000000000000000000000000000000..50aa9b7cc70529e054af4b6e710bdd7083e8795f GIT binary patch literal 11918 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 OU*?ZV2b=N7-v0wsg;Kcy literal 0 HcmV?d00001 diff --git a/tests/ods-files.js b/tests/ods-files.js index 5926b5b..31f02ec 100644 --- a/tests/ods-files.js +++ b/tests/ods-files.js @@ -45,14 +45,34 @@ test('.ods file with new lines in content is ', async t => { const feuille1 = table.get('Feuille1') -const expectedValue = `Deviens génial, deviens génial -Tu n'sais pas encore l'enfer qui t'attend -Le regard des uns, le rejet des autres -Si t'es bizarre, si t'es pas marrant -Deviens génial, deviens génial -Deviens génial, deviens génial -Pourquoi t'aimeraient-ils seulement comme tu es ? (hein) -Si t'es pas comme eux quand t'es naturel` + const expectedValue = `Deviens génial, deviens génial + Tu n'sais pas encore l'enfer qui t'attend + Le regard des uns, le rejet des autres + Si t'es bizarre, si t'es pas marrant + Deviens génial, deviens génial + Deviens génial, deviens génial + Pourquoi t'aimeraient-ils seulement comme tu es ? (hein) + Si t'es pas comme eux quand t'es naturel` t.deepEqual(feuille1[0][0].value, expectedValue) +}); + +test('.ods cells with mails should be recognized', async t => { + const odsFileWithEmails = (await readFile('./tests/fixtures/cellules avec emails.ods')).buffer + const table = await getODSTableRawContent(odsFileWithEmails); + + const feuille1 = table.get('Feuille1') + + const row1 = feuille1[0] + t.deepEqual(row1[0].value, 'Nom') + t.deepEqual(row1[1].value, 'Email') + + const row2 = feuille1[1] + + t.deepEqual(row2[0].value, 'Dav') + t.deepEqual(row2[1].value, 'david@mail.fr') + + const row3 = feuille1[2] + t.deepEqual(row3[0].value, 'Fanny') + t.deepEqual(row3[1].value, 'lemaildeFanny@cemail.com') }); \ No newline at end of file