@mostajs/mjs-unit 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -115,6 +115,39 @@ Le compte rendu lie les résultats à la version (lue dans la SBOM), au plan et
115
115
  est `conforme`, `non conforme` ou `incomplet` (avec les défauts) ; il s'écrit toujours. qatrax.dev l'enregistre, le
116
116
  relie à l'analyse des vulnérabilités de la même SBOM, et scelle le dossier.
117
117
 
118
+ ## Java, C#, Python, Go, C++… — le mode lecteur (0.10.0)
119
+
120
+ Vos essais restent joués par l'outil de votre langage ; mjs-unit **lit** leur rapport et produit le même compte
121
+ rendu scellé (lié à la SBOM et au plan), avec CTRF et in-toto. Node ≥ 18 suffit dans la CI ; aucun JavaScript à écrire.
122
+
123
+ **Formats lus tels quels, reconnus à leur contenu** : JUnit XML · NUnit 2 et 3 · TRX (VSTest) · TestNG natif ·
124
+ Robot Framework (`output.xml`) · CTest (`Test.xml`) · Cucumber JSON · Behave JSON · Allure 2 (`allure-results`) ·
125
+ CTRF · TAP · JSON mjs-unit. Votre rapport natif suffit : aucune conversion.
126
+
127
+ | Langage | Rapport | Commande |
128
+ |---|---|---|
129
+ | Java (Maven) | `target/surefire-reports/TEST-*.xml` | `npx @mostajs/mjs-unit --depuis=target/surefire-reports --sbom=target/bom.json --plan=plan.json --compte-rendu` |
130
+ | Java (Gradle) | `build/test-results/test/TEST-*.xml` | `npx @mostajs/mjs-unit --depuis=build/test-results/test …` |
131
+ | C# (.NET) | `dotnet test --logger "junit;LogFilePath=resultats.xml"` | `npx @mostajs/mjs-unit --depuis=resultats.xml …` |
132
+ | Python | `pytest --junitxml=resultats.xml` | `npx @mostajs/mjs-unit --depuis=resultats.xml …` |
133
+ | Go | `go test -v ./... 2>&1 \| go-junit-report > resultats.xml` | `npx @mostajs/mjs-unit --depuis=resultats.xml …` |
134
+ | C# (NUnit) | `TestResult.xml` (nunit3-console) | `npx @mostajs/mjs-unit --depuis=TestResult.xml …` |
135
+ | C# (TRX) | `dotnet test --logger trx` → `TestResults/*.trx` | `npx @mostajs/mjs-unit --depuis=TestResults …` |
136
+ | Java (TestNG) | `target/surefire-reports/testng-results.xml` | `npx @mostajs/mjs-unit --depuis=target/surefire-reports/testng-results.xml …` |
137
+ | Robot Framework | `output.xml` | `npx @mostajs/mjs-unit --depuis=output.xml …` |
138
+ | C/C++ (CTest) | `ctest -T Test` → `Testing/<date>/Test.xml` | `npx @mostajs/mjs-unit --depuis Testing/*/Test.xml …` |
139
+ | BDD (Cucumber) | `--format json:cucumber.json` (JS, JVM, Ruby) | `npx @mostajs/mjs-unit --depuis=cucumber.json …` |
140
+ | BDD (Behave) | `behave -f json -o behave.json` | `npx @mostajs/mjs-unit --depuis=behave.json …` |
141
+ | Allure (tout langage) | `allure-results/` | `npx @mostajs/mjs-unit --depuis=allure-results …` (conteneurs et pièces jointes écartés ; un essai rejoué : le dernier fait foi) |
142
+
143
+ Nommez vos essais d'après le plan : `test_T_MOD_01_…` est rattaché à `T-MOD-01`. En BDD, Robot ou Allure, une
144
+ **étiquette** égale à la référence suffit (`@T-MOD-01`). Avec le menu :
145
+ `MJS_DEPUIS=target/surefire-reports npx mjs-unit-menu --choix=3`, puis `--choix=4` (plan, SBOM, compte rendu vers
146
+ qatrax.dev). Les lecteurs sont exportés : `import { lireRapportEssais, refDuPlan } from "@mostajs/mjs-unit/lecteurs"`.
147
+
148
+ Ce que le sceau prouve : le rapport n'a pas changé **après sa lecture**, avec **cette** SBOM et **ce** plan. Il ne
149
+ prouve pas que l'outil du langage a joué les essais honnêtement.
150
+
118
151
  ## API
119
152
 
120
153
  | Fonction | Rôle |
package/bin/cli.mjs CHANGED
@@ -17,15 +17,22 @@
17
17
  * TOUJOURS — même invalide, avec ses défauts ; le code de sortie reste celui des essais
18
18
  * --ctrf[=f] export CTRF (défaut : test-scripts/.out/ctrf.json)
19
19
  * --intoto[=f] énoncé in-toto test-result v0.1, non signé (défaut : test-scripts/.out/test-result.intoto.json)
20
+ * 0.10.0 — LE MODE LECTEUR (Java, C#, Python, Go) : aucun essai exécuté, le rapport de l'outil du langage est LU
21
+ * --depuis les arguments sont des RAPPORTS : mjs-unit --depuis target/surefire-reports/*.xml
22
+ * JUnit XML, NUnit 2/3, TRX, TestNG, Robot Framework, CTest, Cucumber JSON, Behave JSON,
23
+ * Allure 2, CTRF, TAP, JSON mjs-unit — reconnus à leur contenu
24
+ * --depuis=chemin un dossier (tous ses .xml, .json, .tap, .trx ; dans allure-results, les *-container et
25
+ * *-attachment sont écartés) ou un fichier
26
+ * → les mêmes sorties : --compte-rendu, --ctrf, --intoto, --json, --junit, --report
20
27
  *
21
28
  * @author Dr Hamid MADANI <drmdh@msn.com> · AGPL-3.0-or-later
22
29
  */
23
30
  import { register } from "node:module";
24
31
  import { pathToFileURL } from "node:url";
25
- import { writeFileSync, readFileSync, mkdirSync } from "node:fs";
32
+ import { writeFileSync, readFileSync, mkdirSync, statSync, readdirSync } from "node:fs";
26
33
  import { hostname } from "node:os";
27
34
  import { createHash } from "node:crypto";
28
- import { dirname } from "node:path";
35
+ import { dirname, join } from "node:path";
29
36
 
30
37
  register(new URL("../loader.mjs", import.meta.url));
31
38
  const { run, pending, registered, takeRuns, setDefaultTimeout, setTagFilter } = await import("../dist/index.js");
@@ -45,9 +52,11 @@ const title = opt("title");
45
52
  if (opt("timeout")) setDefaultTimeout(Number(opt("timeout")));
46
53
  if (opt("tag")) setTagFilter(opt("tag").split(","));
47
54
  const crOut = opt("compte-rendu"), ctrfOut = opt("ctrf"), intotoOut = opt("intoto"), sbomIn = opt("sbom"), planIn = opt("plan");
55
+ const depuis = opt("depuis"); // 0.10.0 — mode lecteur : "" (les arguments sont des rapports) ou un chemin
56
+ const lecteur = depuis !== undefined;
48
57
  const files = argv.filter((a) => !a.startsWith("--"));
49
58
  const debut = new Date().toISOString();
50
- if (!files.length) { console.error("usage: mjs-unit <fichier-de-test...> [--report[=f]] [--json[=f]]"); process.exit(2); }
59
+ if (!files.length && !depuis) { console.error("usage: mjs-unit <fichier-de-test...> [--report[=f]] [--json[=f]] — ou : mjs-unit --depuis <rapport...> (JUnit, NUnit, TRX, TestNG, Robot, CTest, Cucumber, Behave, Allure, CTRF, TAP)"); process.exit(2); }
51
60
 
52
61
  // ── Exécution, une suite par fichier ─────────────────────────────────────────
53
62
  // Le CLI DEMANDE au module ce qui a été enregistré et ce qui a été exécuté, fichier par fichier : il
@@ -55,7 +64,45 @@ if (!files.length) { console.error("usage: mjs-unit <fichier-de-test...> [--repo
55
64
  // hors du rapport, et un fichier sans aucun test disparaissait sans un mot.
56
65
  let totalFail = 0, totalDeclares = 0, totalExecutes = 0;
57
66
  const suites = [];
58
- for (const f of files) {
67
+ const sha = (b) => createHash("sha256").update(b).digest("hex");
68
+ // ── 0.10.0 — LE MODE LECTEUR : lire le rapport de l'outil du langage (Surefire, pytest, xUnit, go test…) ─────────
69
+ // Aucun essai n'est exécuté : les suites sont REMPLIES depuis les rapports, puis toute la chaîne suit (compte rendu,
70
+ // CTRF, in-toto, JSON, JUnit, HTML). Un rapport illisible est un défaut DIT ; un statut incompris est une erreur.
71
+ const lecture = lecteur ? { rapports: [], defauts: [] } : null;
72
+ let genereLe = null;
73
+ if (lecteur) {
74
+ const { lireRapportEssais } = await import("../dist/lecteurs.js");
75
+ const RAPPORT = /\.(xml|json|tap|trx)$/i;
76
+ const ANNEXE = /-(container|attachment)\.[^.]+$/i; // Allure : fixtures et pièces jointes, pas des résultats
77
+ const sources = depuis ? (statSync(depuis, { throwIfNoEntry: false })?.isDirectory() ? readdirSync(depuis).filter((n) => RAPPORT.test(n) && !ANNEXE.test(n)).sort().map((n) => join(depuis, n)) : [depuis]) : files;
78
+ if (!sources.length) { console.error(`✗ --depuis : aucun rapport (.xml, .json, .tap, .trx) dans ${depuis}`); process.exit(2); }
79
+ const STATUT = { pass: ["pass"], fail: ["fail", "failure"], skipped: ["skip"], blocked: ["fail", "error"] };
80
+ const ajouter = (rapport, f) => {
81
+ if (rapport.generatedAt && (!genereLe || rapport.generatedAt < genereLe)) genereLe = rapport.generatedAt;
82
+ for (const s of rapport.suites) {
83
+ const results = s.results.map((r) => { const [status, kind] = STATUT[r.status] ?? STATUT.blocked;
84
+ return { name: r.name, title: r.name, status, durationMs: r.durationMs ?? 0, ...(kind ? { kind } : {}), ...(r.error ? { error: r.error } : {}), ...(r.tags?.length ? { tags: r.tags } : {}),
85
+ ...(r.status === "blocked" ? { error: r.error ?? "statut incompris : ni réussi, ni échoué, ni ignoré" } : {}), ...(status === "skip" ? { skipReason: r.error ?? "ignoré par l'outil d'essai" } : {}) }; });
86
+ totalFail += results.filter((r) => r.status === "fail").length;
87
+ totalDeclares += results.length; totalExecutes += results.length;
88
+ suites.push({ file: s.file || f, results });
89
+ }
90
+ };
91
+ // Allure : un fichier par essai — lus ENSEMBLE, pour qu'un essai rejoué (même historyId) ne compte qu'une fois
92
+ const allure = []; let allureSource = null;
93
+ for (const f of sources) {
94
+ let brut;
95
+ try { brut = readFileSync(f); } catch (e) { lecture.defauts.push(`rapport illisible : ${f} — ${e?.code ?? e?.message ?? e}`); totalFail++; continue; }
96
+ const lu = lireRapportEssais(brut.toString("utf8"));
97
+ lecture.rapports.push({ fichier: f, format: lu.format, sha256: sha(brut) });
98
+ if (!lu.rapport) { lecture.defauts.push(`rapport illisible : ${f} — ${lu.erreur ?? lu.format}`); console.error(`✗ ${f} : ${lu.erreur ?? lu.format}`); totalFail++; continue; }
99
+ if (lu.format === "allure") { allure.push(...(Array.isArray(lu.brut) ? lu.brut : [lu.brut])); allureSource ??= depuis && statSync(depuis).isDirectory() ? depuis : f; continue; }
100
+ ajouter(lu.rapport, f);
101
+ }
102
+ if (allure.length) ajouter(lireRapportEssais(allure).rapport, allureSource);
103
+ console.log(`\n${totalFail ? "✗" : "✓"} ${totalExecutes} cas lu(s) dans ${lecture.rapports.length} rapport(s) — mode lecteur : aucun essai exécuté par mjs-unit`);
104
+ }
105
+ for (const f of lecteur ? [] : files) {
59
106
  const avant = registered();
60
107
  takeRuns(); // rien d'un fichier précédent ne doit être attribué à celui-ci
61
108
  await import(pathToFileURL(f).href); // le fichier enregistre ses cas (et peut appeler run() lui-même)
@@ -78,12 +125,12 @@ for (const f of files) {
78
125
  totalDeclares += declares; totalExecutes += cas.length;
79
126
  suites.push({ file: f, results });
80
127
  }
81
- console.log(`\n${totalExecutes === totalDeclares ? "✓" : "✗"} ${totalExecutes}/${totalDeclares} test(s) exécutés sur ${suites.length} fichier(s) — compte relevé auprès du module, pas supposé`);
128
+ if (!lecteur) console.log(`\n${totalExecutes === totalDeclares ? "✓" : "✗"} ${totalExecutes}/${totalDeclares} test(s) exécutés sur ${suites.length} fichier(s) — compte relevé auprès du module, pas supposé`);
82
129
 
83
130
  // ── Reporters optionnels ─────────────────────────────────────────────────────
84
131
  if (htmlOut !== undefined || jsonOut !== undefined || junitOut !== undefined) {
85
132
  const { renderHtmlReport, renderJsonReport, renderJunitReport } = await import("../dist/report.js");
86
- const report = { suites, generatedAt: new Date().toISOString(), title: title || undefined, hostname: hostname() };
133
+ const report = { suites, generatedAt: genereLe ?? new Date().toISOString(), title: title || undefined, hostname: hostname() };
87
134
  if (htmlOut !== undefined) {
88
135
  const out = htmlOut || "test-report.html";
89
136
  writeFileSync(out, renderHtmlReport(report));
@@ -104,18 +151,18 @@ if (htmlOut !== undefined || jsonOut !== undefined || junitOut !== undefined) {
104
151
  // ── 0.9.0 — le compte rendu de validation, écrit TOUJOURS quand il est demandé (même invalide) ─────────────
105
152
  if (crOut !== undefined || ctrfOut !== undefined || intotoOut !== undefined) {
106
153
  const { construireCompteRendu, renderCtrf, renderInTotoTestResult } = await import("../dist/report.js");
107
- const sha = (b) => createHash("sha256").update(b).digest("hex");
108
154
  const piece = (f) => { const b = readFileSync(f); return { fichier: f, sha256: sha(b), contenu: JSON.parse(b.toString("utf8")) }; };
109
155
  const lire = (f) => { if (!f) return { p: null }; try { return { p: piece(f) }; } catch (e) { return { p: null, e: `${f} — ${e?.code ?? e?.message ?? e}` }; } };
110
156
  const s = lire(sbomIn), pl = lire(planIn);
111
157
  const moi = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
112
158
  const env = process.env;
113
159
  const ci = env.CI_PIPELINE_URL || env.CI_JOB_URL || (env.GITHUB_RUN_ID && env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}` : undefined);
114
- const cr = construireCompteRendu({ suites, generatedAt: new Date().toISOString(), title: title || undefined, hostname: hostname() }, {
160
+ const cr = construireCompteRendu({ suites, generatedAt: genereLe ?? new Date().toISOString(), title: title || undefined, hostname: hostname() }, {
115
161
  sbom: s.p, sbomErreur: s.e, plan: pl.p, planErreur: pl.e,
116
- scripts: files.map((f) => { try { return { fichier: f, sha256: sha(readFileSync(f)) }; } catch { return { fichier: f, sha256: "" }; } }),
162
+ scripts: lecteur ? [] : files.map((f) => { try { return { fichier: f, sha256: sha(readFileSync(f)) }; } catch { return { fichier: f, sha256: "" }; } }),
163
+ lecture,
117
164
  environnement: { node: process.version, plateforme: `${process.platform}-${process.arch}`, hote: hostname(), ...(ci ? { ci } : {}), debut, fin: new Date().toISOString() },
118
- declares: totalDeclares, outil: { name: moi.name, version: moi.version },
165
+ declares: totalDeclares, outil: { name: moi.name, version: moi.version, ...(lecteur ? { mode: "lecteur" } : {}) },
119
166
  });
120
167
  const ecrire = (f, texte) => { mkdirSync(dirname(f), { recursive: true }); writeFileSync(f, texte); return sha(texte); };
121
168
  const exports_ = {};
@@ -1,16 +1,18 @@
1
1
  #!/usr/bin/env bash
2
2
  #
3
- # mjs-unit-menu — le cycle de validation en un menu (0.9.0) : essais → SBOM → compte rendu → qatrax.dev.
3
+ # mjs-unit-menu — le cycle de validation en un menu (0.10.0) : essais → SBOM → compte rendu → qatrax.dev.
4
4
  #
5
5
  # 1) lancer les essais (rapports HTML, JSON, JUnit)
6
6
  # 2) générer ou continuer la SBOM (npx mjs-sbom --diff)
7
7
  # 3) compte rendu complet : SBOM + plan + essais + CTRF + in-toto
8
- # 4) envoyer à qatrax.dev : POST /sbom puis POST /runs (le compte rendu), clé de CI du projet
8
+ # (MJS_DEPUIS posé : les essais ne sont pas exécutés, le rapport de l'outil du langage est LU — Java, C#, Python, Go, C++ : JUnit, NUnit, TRX, TestNG, Robot, CTest, Cucumber, Behave, Allure…)
9
+ # 4) envoyer à qatrax.dev : POST /import (le plan, s'il existe), POST /sbom, puis POST /runs (le compte rendu)
9
10
  # 5) lire les vulnérabilités de la version sur qatrax.dev (GET /vulnerabilites)
10
11
  # 6) afficher le dernier compte rendu (verdict, défauts)
11
12
  #
12
13
  # Sans interaction : mjs-unit-menu --choix=N (CI, scripts).
13
- # Variables : MJS_TESTS (fichiers d'essai, motif shell ; défaut test-scripts/**/*.test.mjs), MJS_SBOM (défaut
14
+ # Variables : MJS_TESTS (fichiers d'essai, motif shell ; défaut test-scripts/**/*.test.mjs), MJS_DEPUIS (0.10 : rapports
15
+ # d'un autre langage — dossier, fichier ou motif shell : target/surefire-reports, resultats.xml), MJS_SBOM (défaut
14
16
  # sbom.cyclonedx.json), MJS_PLAN (défaut : premier docs/DEVTEST-PLAN*.json), MJS_OUT (défaut test-scripts/.out),
15
17
  # QATRAX_URL, QATRAX_CLE (clé de CI, lue dans l'environnement, jamais écrite), QATRAX_PROJET.
16
18
  #
@@ -28,6 +30,7 @@ CR="$OUT/compte-rendu.json"
28
30
  essais() { local motif="${MJS_TESTS:-test-scripts/**/*.test.mjs}"; local f; f=( $motif ); printf '%s\n' "${f[@]}"; }
29
31
 
30
32
  lancer_essais() {
33
+ if [ -n "${MJS_DEPUIS:-}" ]; then echo "ℹ MJS_DEPUIS posé : lancez vos essais avec votre outil (mvn test, dotnet test, pytest, go test, robot, ctest, cucumber, behave…), puis choix 3 — mjs-unit LIT leur rapport"; return 0; fi
31
34
  mkdir -p "$OUT"; mapfile -t F < <(essais)
32
35
  [ ${#F[@]} -gt 0 ] || { echo "✗ aucun fichier d'essai (MJS_TESTS)"; return 2; }
33
36
  node "$CLI" "${F[@]}" --report="$OUT/report.html" --json="$OUT/report.json" --junit="$OUT/report.xml"
@@ -38,8 +41,13 @@ generer_sbom() {
38
41
  }
39
42
 
40
43
  compte_rendu() {
41
- mkdir -p "$OUT"; mapfile -t F < <(essais)
42
- [ ${#F[@]} -gt 0 ] || { echo "✗ aucun fichier d'essai (MJS_TESTS)"; return 2; }
44
+ mkdir -p "$OUT"
45
+ if [ -n "${MJS_DEPUIS:-}" ]; then
46
+ if [ -d "$MJS_DEPUIS" ] || [ -f "$MJS_DEPUIS" ]; then F=("--depuis=$MJS_DEPUIS"); else F=(--depuis $MJS_DEPUIS); fi
47
+ else
48
+ mapfile -t F < <(essais)
49
+ [ ${#F[@]} -gt 0 ] || { echo "✗ aucun fichier d'essai (MJS_TESTS)"; return 2; }
50
+ fi
43
51
  local opts=(--compte-rendu="$CR" --ctrf="$OUT/ctrf.json" --intoto="$OUT/test-result.intoto.json" --json="$OUT/report.json" --junit="$OUT/report.xml")
44
52
  [ -f "$SBOM" ] && opts+=(--sbom="$SBOM") || echo "⚠ pas de SBOM ($SBOM) : le compte rendu sera « incomplet » (choix 2)"
45
53
  [ -n "$PLAN" ] && [ -f "$PLAN" ] && opts+=(--plan="$PLAN")
@@ -49,9 +57,9 @@ compte_rendu() {
49
57
  # Les appels à qatrax.dev passent par Node (fetch) : pas de dépendance à curl, et la clé ne paraît dans aucune ligne de commande.
50
58
  qatrax() { # $1 = action (envoyer | vulnerabilites)
51
59
  : "${QATRAX_URL:?QATRAX_URL manquante}" "${QATRAX_CLE:?QATRAX_CLE manquante (clé de CI du projet)}" "${QATRAX_PROJET:?QATRAX_PROJET manquant}"
52
- ACTION="$1" SBOM="$SBOM" CR="$CR" node --input-type=module -e '
60
+ ACTION="$1" SBOM="$SBOM" CR="$CR" PLAN="$PLAN" node --input-type=module -e '
53
61
  import { readFileSync, existsSync } from "node:fs";
54
- const { QATRAX_URL: base, QATRAX_CLE: cle, QATRAX_PROJET: p, ACTION, SBOM, CR } = process.env;
62
+ const { QATRAX_URL: base, QATRAX_CLE: cle, QATRAX_PROJET: p, ACTION, SBOM, CR, PLAN } = process.env;
55
63
  const e = encodeURIComponent; const auth = { authorization: `Bearer ${cle}` };
56
64
  if (!existsSync(CR)) { console.error(`✗ pas de compte rendu (${CR}) : choix 3 d’abord`); process.exit(2); }
57
65
  const cr = JSON.parse(readFileSync(CR, "utf8")); const v = cr.produit?.version ?? "inconnue";
@@ -61,6 +69,8 @@ qatrax() { # $1 = action (envoyer | vulnerabilites)
61
69
  };
62
70
  if (ACTION === "envoyer") {
63
71
  let bon = true;
72
+ // 0.10.0 — le plan d’abord : sans lui, qatrax.dev ne sait pas quelle exigence chaque essai prouve.
73
+ if (PLAN && existsSync(PLAN)) bon = (await appel("POST", "/import", readFileSync(PLAN, "utf8"))).ok && bon;
64
74
  if (existsSync(SBOM)) bon = (await appel("POST", `/sbom?p=${e(p)}&version=${e(v)}`, readFileSync(SBOM, "utf8"))).ok && bon;
65
75
  else console.log(`⚠ pas de SBOM (${SBOM}) : seul le compte rendu part — qatrax.dev le consignera « SBOM non reçue »`);
66
76
  bon = (await appel("POST", `/runs?p=${e(p)}&format=json`, readFileSync(CR, "utf8"))).ok && bon;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @mostajs/mjs-unit/lecteurs — LIRE UN RAPPORT D'ESSAIS, QUEL QU'EN SOIT L'OUTIL (0.10.0).
3
+ * @author Dr Hamid MADANI <drmdh@msn.com>
4
+ * @license AGPL-3.0-or-later
5
+ *
6
+ * Descendus de @mostajs/qa-engine/formats (DEVRULES R-G : la logique partagée vit à la couche la plus basse) pour le
7
+ * mode lecteur de mjs-unit (`--depuis`) : un projet Java, C#, Python ou Go garde son outil d'essai, et mjs-unit LIT
8
+ * son rapport pour en faire le compte rendu de validation. qa-engine les reprend d'ici.
9
+ *
10
+ * JUnit XML (Surefire, Gradle, pytest, xUnit/JunitXml.TestLogger, go-junit-report, mjs-unit --junit) → 'junit'
11
+ * NUnit 2 et 3 (TestResult.xml) → 'nunit'
12
+ * TRX (dotnet test --logger trx : VSTest, xUnit, MSTest, NUnit) → 'trx'
13
+ * TestNG natif (testng-results.xml) → 'testng'
14
+ * Robot Framework (output.xml, RF 6 et 7) → 'robot'
15
+ * CTest (ctest -T Test → Testing/<horodatage>/Test.xml) → 'ctest'
16
+ * Cucumber JSON (cucumber-js, Cucumber-JVM, SpecFlow/Reqnroll…) → 'cucumber'
17
+ * Behave JSON (behave -f json) → 'behave'
18
+ * Allure 2 (allure-results/*-result.json, un fichier ou un tableau) → 'allure'
19
+ * TAP (node --test, Perl…) → 'tap'
20
+ * CTRF (ctrf-io, mjs-unit --ctrf) → 'ctrf'
21
+ * mjs-unit --json / --compte-rendu / --intoto → 'mjs-unit' / 'compte-rendu' / 'intoto'
22
+ * rapport HTML → 'html' : preuve lisible par un humain, non lue
23
+ *
24
+ * Les formats NUnit à Allure ont été ajoutés le 10/10/2026 à la demande du fondateur : ce sont ceux que lisent Xray,
25
+ * Allure TestOps, TestRail, Zephyr, ReportPortal et Azure DevOps (docs/01c §5 bis). Le rapport du client reste le sien.
26
+ *
27
+ * Le format se reconnaît au CONTENU. Un statut incompris devient `blocked`, jamais `pass`. Pur : aucune E/S, aucune
28
+ * dépendance — `./lecteurs` s'importe partout (navigateur compris).
29
+ */
30
+ export type FormatRapport = 'mjs-unit' | 'compte-rendu' | 'junit' | 'nunit' | 'trx' | 'testng' | 'robot' | 'ctest' | 'cucumber' | 'behave' | 'allure' | 'ctrf' | 'intoto' | 'tap' | 'html' | 'illisible';
31
+ export type StatutLu = 'pass' | 'fail' | 'skipped' | 'blocked';
32
+ /** `tags` : les étiquettes de l'outil (Cucumber @T-MOD-01, Robot, Allure) — `rattacherAuPlan` y cherche une référence du plan. */
33
+ export interface ResultatLu {
34
+ name: string;
35
+ status: StatutLu;
36
+ durationMs?: number;
37
+ error?: string;
38
+ tags?: string[];
39
+ }
40
+ export interface RapportLu {
41
+ title: string;
42
+ generatedAt: string | null;
43
+ suites: {
44
+ file: string;
45
+ results: ResultatLu[];
46
+ }[];
47
+ }
48
+ export interface LectureRapport {
49
+ format: FormatRapport;
50
+ /** la forme que lit importTestRun ; null si le corps n'est pas un rapport d'essais lisible par une machine */
51
+ rapport: RapportLu | null;
52
+ /** l'objet reçu (JSON), tel quel — c'est sur lui que porte l'empreinte d'un compte rendu */
53
+ brut: unknown;
54
+ erreur?: string;
55
+ }
56
+ /** Les formats lus, NOMMÉS dans chaque motif de refus : le client sait quoi envoyer sans chercher. */
57
+ export declare const FORMATS_LUS: {
58
+ readonly xml: "JUnit XML, NUnit 2/3, TRX (VSTest), TestNG, Robot Framework (output.xml), CTest (Test.xml)";
59
+ readonly json: "CTRF, Cucumber JSON, Behave JSON, Allure 2, in-toto test-result, JSON et compte rendu mjs-unit";
60
+ readonly texte: "TAP";
61
+ };
62
+ /** Le format d'un corps de rapport, reconnu à son contenu. */
63
+ export declare function detecterFormat(corps: unknown): FormatRapport;
64
+ /** Lit un rapport d'essais, quel qu'en soit le format ; jamais d'exception : un corps illisible est DIT illisible. */
65
+ export declare function lireRapportEssais(corps: unknown): LectureRapport;
66
+ /** La référence du plan que désigne ce nom d'essai, ou '' : le nom exact d'abord, puis par jetons. */
67
+ export declare function refDuPlan(nom: string, refs: Iterable<string>): string;
68
+ /**
69
+ * Pose sur chaque essai sa référence du plan (`T-MOD-01 — test_T_MOD_01_…`) et le fichier de son `autoRef`
70
+ * (`<fichier>::<ref>`). Un fichier déjà conforme au plan est gardé ; une référence présente dans plusieurs fichiers
71
+ * ne fait rien deviner (le fichier d'origine reste) ; un essai hors plan est laissé tel quel. Pur.
72
+ */
73
+ export declare function rattacherAuPlan<R extends {
74
+ name: string;
75
+ }>(suites: {
76
+ file: string;
77
+ results: R[];
78
+ }[], autoRefs: Iterable<string>): {
79
+ file: string;
80
+ results: R[];
81
+ }[];
82
+ //# sourceMappingURL=lecteurs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lecteurs.d.ts","sourceRoot":"","sources":["../src/lecteurs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;AACzM,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAC/D,kIAAkI;AAClI,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AACpH,MAAM,WAAW,SAAS;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,EAAE,CAAA;KAAE,EAAE,CAAA;CAAE;AAC3H,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,8GAA8G;IAC9G,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,4FAA4F;IAC5F,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,sGAAsG;AACtG,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAwCX,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAM5D;AAwQD,sHAAsH;AACtH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CA4BhE;AASD,sGAAsG;AACtG,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAWrE;AAcD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,CAAA;CAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,CAAA;CAAE,EAAE,CAuBlK"}
@@ -0,0 +1,518 @@
1
+ /**
2
+ * @mostajs/mjs-unit/lecteurs — LIRE UN RAPPORT D'ESSAIS, QUEL QU'EN SOIT L'OUTIL (0.10.0).
3
+ * @author Dr Hamid MADANI <drmdh@msn.com>
4
+ * @license AGPL-3.0-or-later
5
+ *
6
+ * Descendus de @mostajs/qa-engine/formats (DEVRULES R-G : la logique partagée vit à la couche la plus basse) pour le
7
+ * mode lecteur de mjs-unit (`--depuis`) : un projet Java, C#, Python ou Go garde son outil d'essai, et mjs-unit LIT
8
+ * son rapport pour en faire le compte rendu de validation. qa-engine les reprend d'ici.
9
+ *
10
+ * JUnit XML (Surefire, Gradle, pytest, xUnit/JunitXml.TestLogger, go-junit-report, mjs-unit --junit) → 'junit'
11
+ * NUnit 2 et 3 (TestResult.xml) → 'nunit'
12
+ * TRX (dotnet test --logger trx : VSTest, xUnit, MSTest, NUnit) → 'trx'
13
+ * TestNG natif (testng-results.xml) → 'testng'
14
+ * Robot Framework (output.xml, RF 6 et 7) → 'robot'
15
+ * CTest (ctest -T Test → Testing/<horodatage>/Test.xml) → 'ctest'
16
+ * Cucumber JSON (cucumber-js, Cucumber-JVM, SpecFlow/Reqnroll…) → 'cucumber'
17
+ * Behave JSON (behave -f json) → 'behave'
18
+ * Allure 2 (allure-results/*-result.json, un fichier ou un tableau) → 'allure'
19
+ * TAP (node --test, Perl…) → 'tap'
20
+ * CTRF (ctrf-io, mjs-unit --ctrf) → 'ctrf'
21
+ * mjs-unit --json / --compte-rendu / --intoto → 'mjs-unit' / 'compte-rendu' / 'intoto'
22
+ * rapport HTML → 'html' : preuve lisible par un humain, non lue
23
+ *
24
+ * Les formats NUnit à Allure ont été ajoutés le 10/10/2026 à la demande du fondateur : ce sont ceux que lisent Xray,
25
+ * Allure TestOps, TestRail, Zephyr, ReportPortal et Azure DevOps (docs/01c §5 bis). Le rapport du client reste le sien.
26
+ *
27
+ * Le format se reconnaît au CONTENU. Un statut incompris devient `blocked`, jamais `pass`. Pur : aucune E/S, aucune
28
+ * dépendance — `./lecteurs` s'importe partout (navigateur compris).
29
+ */
30
+ const STATUTS = {
31
+ pass: 'pass', passed: 'pass', ok: 'pass', success: 'pass', succes: 'pass',
32
+ fail: 'fail', failed: 'fail', error: 'fail', failure: 'fail', echec: 'fail', erreur: 'fail',
33
+ skip: 'skipped', skipped: 'skipped', todo: 'skipped', pending: 'skipped', ignore: 'skipped',
34
+ blocked: 'blocked',
35
+ };
36
+ const statut = (s) => STATUTS[String(s ?? '').toLowerCase()] ?? 'blocked';
37
+ /** Les formats lus, NOMMÉS dans chaque motif de refus : le client sait quoi envoyer sans chercher. */
38
+ export const FORMATS_LUS = {
39
+ xml: 'JUnit XML, NUnit 2/3, TRX (VSTest), TestNG, Robot Framework (output.xml), CTest (Test.xml)',
40
+ json: 'CTRF, Cucumber JSON, Behave JSON, Allure 2, in-toto test-result, JSON et compte rendu mjs-unit',
41
+ texte: 'TAP',
42
+ };
43
+ const ENVOYER = `envoyer un rapport lisible par une machine — XML : ${FORMATS_LUS.xml} ; JSON : ${FORMATS_LUS.json} ; ou ${FORMATS_LUS.texte} (mjs-unit : --json, --junit, --ctrf, --compte-rendu)`;
44
+ // ── Reconnaissance ──────────────────────────────────────────────────────────────────────────────
45
+ const ressembleATap = (t) => /^\s*TAP version \d+/m.test(t);
46
+ const sansBom = (t) => t.replace(/^\uFEFF/, '');
47
+ /** L'élément racine d'un XML (déclaration, commentaires et DOCTYPE ôtés), ou null. */
48
+ const racineXml = (t) => (/^\s*(?:<\?xml[^>]*\?>\s*)?(?:<!DOCTYPE[^>]*>\s*)?<([A-Za-z][\w:.-]*)[\s>/]/i.exec(t.replace(/<!--[\s\S]*?-->/g, '')) ?? [])[1] ?? null;
49
+ const RACINES = { testsuites: 'junit', testsuite: 'junit', 'test-run': 'nunit', 'test-results': 'nunit', TestRun: 'trx', 'testng-results': 'testng', robot: 'robot' };
50
+ function formatXml(t) {
51
+ const r = racineXml(t);
52
+ if (!r)
53
+ return 'illisible';
54
+ if (RACINES[r])
55
+ return RACINES[r];
56
+ if (r === 'Site' && /<Testing[\s>]/.test(t))
57
+ return 'ctest';
58
+ if (r.toLowerCase() === 'html' || /^\s*<!doctype html/i.test(t))
59
+ return 'html';
60
+ return 'illisible';
61
+ }
62
+ const estAllure = (o) => !!o && typeof o === 'object' && !Array.isArray(o) && typeof o.uuid === 'string' && typeof o.status === 'string' && typeof o.name === 'string'
63
+ && ('historyId' in o || 'fullName' in o || Array.isArray(o.labels));
64
+ const estGherkin = (o) => Array.isArray(o) && o.length > 0 && o.every((f) => f && typeof f === 'object' && Array.isArray(f.elements) && 'keyword' in f);
65
+ function formatDObjet(o) {
66
+ if (!o || typeof o !== 'object')
67
+ return 'illisible';
68
+ if (Array.isArray(o)) {
69
+ if (o.length && o.every(estAllure))
70
+ return 'allure';
71
+ // Cucumber : `uri` et des étiquettes objets ; Behave : `location` et des étiquettes chaînes
72
+ if (estGherkin(o))
73
+ return o.some((f) => 'uri' in f) ? 'cucumber' : o.some((f) => 'location' in f) ? 'behave' : 'cucumber';
74
+ return 'illisible';
75
+ }
76
+ if (o.format === 'mostajs-compte-rendu/1')
77
+ return 'compte-rendu';
78
+ if (o.reportFormat === 'CTRF' && o.results)
79
+ return 'ctrf';
80
+ if (o._type === 'https://in-toto.io/Statement/v1' && String(o.predicateType ?? '').startsWith('https://in-toto.io/attestation/test-result/'))
81
+ return 'intoto';
82
+ if (Array.isArray(o.suites))
83
+ return 'mjs-unit';
84
+ if (estAllure(o))
85
+ return 'allure';
86
+ return 'illisible';
87
+ }
88
+ /** Le format d'un corps de rapport, reconnu à son contenu. */
89
+ export function detecterFormat(corps) {
90
+ if (corps && typeof corps === 'object')
91
+ return formatDObjet(corps);
92
+ const t = sansBom(String(corps ?? ''));
93
+ if (ressembleATap(t))
94
+ return 'tap';
95
+ if (/^\s*</.test(t))
96
+ return formatXml(t);
97
+ try {
98
+ return formatDObjet(JSON.parse(t));
99
+ }
100
+ catch {
101
+ return 'illisible';
102
+ }
103
+ }
104
+ // ── Lecteurs ────────────────────────────────────────────────────────────────────────────────────
105
+ const ENTITES = { amp: '&', lt: '<', gt: '>', quot: '"', apos: "'" };
106
+ const decoder = (v) => String(v ?? '').replace(/&(?:#x([0-9a-f]+)|#(\d+)|(amp|lt|gt|quot|apos));/gi, (_m, h, d, n) => (h ? String.fromCodePoint(parseInt(h, 16)) : d ? String.fromCodePoint(Number(d)) : ENTITES[String(n).toLowerCase()]));
107
+ const attributs = (t) => Object.fromEntries([...String(t ?? '').matchAll(/([\w:.-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g)].map((m) => [m[1], decoder(m[2] ?? m[3])]));
108
+ const texteDe = (c) => decoder(String(c ?? '').replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g, '$1').replace(/<[^>]+>/g, '')).trim();
109
+ const grouper = (cas) => {
110
+ const m = new Map();
111
+ for (const { file, ...r } of cas) {
112
+ if (!m.has(file))
113
+ m.set(file, []);
114
+ m.get(file).push(r);
115
+ }
116
+ return [...m].map(([file, results]) => ({ file, results }));
117
+ };
118
+ const iso = (v) => { const d = new Date(v); return v != null && v !== '' && !Number.isNaN(d.getTime()) ? d.toISOString() : null; };
119
+ /** Un horodatage JUnit SANS fuseau (mjs-unit l'écrit en UTC sans « Z ») se lit en UTC, pas à l'heure locale du serveur. */
120
+ const isoUtc = (v) => (typeof v === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?$/.test(v) ? iso(`${v}Z`) : iso(v));
121
+ /** JSON mjs-unit (et suites d'un compte rendu) : statuts normalisés. */
122
+ function depuisSuites(o, title, generatedAt) {
123
+ return { title, generatedAt, suites: (o.suites ?? []).map((s) => ({ file: String(s?.file ?? ''), results: (s?.results ?? []).filter((r) => r?.name && !r?.hook).map((r) => ({
124
+ name: String(r.name), status: statut(r.status), ...(typeof r.durationMs === 'number' ? { durationMs: r.durationMs } : {}), ...(r.error ? { error: String(r.error) } : {})
125
+ })) })) };
126
+ }
127
+ /** JUnit XML — `<failure>` et `<error>` sont des échecs, `<skipped>` un essai non joué ; `file` d'après l'attribut. */
128
+ function depuisJunit(xml) {
129
+ const x = xml.replace(/<!--[\s\S]*?-->/g, '');
130
+ const tete = attributs((/<testsuites?\b([^>]*)>/.exec(x) ?? [])[1]);
131
+ const premiere = attributs((/<testsuite\b([^>]*)>/.exec(x) ?? [])[1]);
132
+ const cas = [];
133
+ for (const m of x.matchAll(/<testcase\b([^>]*?)(?:\/>|>([\s\S]*?)<\/testcase>)/g)) {
134
+ const a = attributs(m[1]);
135
+ const corps = m[2] ?? '';
136
+ if (!a.name)
137
+ continue;
138
+ let status = 'pass';
139
+ let error;
140
+ const f = /<(failure|error)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/\1>)/.exec(corps);
141
+ if (/<skipped\b/.test(corps))
142
+ status = 'skipped';
143
+ else if (f) {
144
+ status = 'fail';
145
+ const fa = attributs(f[2]);
146
+ error = [fa.type, fa.message].filter(Boolean).join(' : ') || texteDe(f[3]).slice(0, 500) || f[1];
147
+ }
148
+ cas.push({ file: a.file ?? '', name: a.name, status, ...(error ? { error } : {}), ...(a.time != null && !Number.isNaN(Number(a.time)) ? { durationMs: Math.round(Number(a.time) * 10000) / 10 } : {}) });
149
+ }
150
+ return { title: tete.name || premiere.name || 'JUnit XML', generatedAt: isoUtc(tete.timestamp || premiere.timestamp) ?? (tete.timestamp || premiere.timestamp || null), suites: grouper(cas) };
151
+ }
152
+ /** CTRF — `filePath` donne le fichier, `message` le motif ; l'heure est `summary.start`. */
153
+ function depuisCtrf(o) {
154
+ const cas = (o.results?.tests ?? []).filter((t) => t?.name).map((t) => ({ file: String(t.filePath ?? ''), name: String(t.name), status: statut(t.status),
155
+ ...(typeof t.duration === 'number' ? { durationMs: t.duration } : {}), ...(t.message ? { error: String(t.message) } : {}) }));
156
+ return { title: String(o.results?.tool?.name ?? 'CTRF'), generatedAt: iso(o.results?.summary?.start), suites: grouper(cas) };
157
+ }
158
+ /** in-toto test-result v0.1 — des NOMS seulement (ni fichier, ni durée) : à rattacher par le plan. */
159
+ function depuisInToto(o) {
160
+ const p = o.predicate ?? {};
161
+ const noms = (l, status) => (Array.isArray(l) ? l : []).map((n) => ({ file: '', name: String(n), status }));
162
+ return { title: 'in-toto test-result', generatedAt: null, suites: grouper([...noms(p.passedTests, 'pass'), ...noms(p.failedTests, 'fail'), ...noms(p.warnedTests, 'skipped')]) };
163
+ }
164
+ /** TAP de `node --test` — la ligne de FICHIER qui clôt chaque suite n'est pas un essai ; `# SKIP` / `# TODO` : ignoré. */
165
+ function depuisTap(tap) {
166
+ const results = [];
167
+ for (const brute of tap.split('\n')) {
168
+ const m = /^(not ok|ok)\s+\d+\s*-\s*(.+?)\s*$/.exec(brute.trim());
169
+ if (!m)
170
+ continue;
171
+ let name = m[2];
172
+ let status = m[1] === 'ok' ? 'pass' : 'fail';
173
+ if (/\.(test|spec)\.(m?js|ts)$/.test(name))
174
+ continue;
175
+ const marque = /\s+#\s*(SKIP|TODO)\b.*$/i.exec(name);
176
+ if (marque) {
177
+ name = name.slice(0, marque.index).trim();
178
+ status = 'skipped';
179
+ }
180
+ results.push({ name, status });
181
+ }
182
+ return { title: 'node --test', generatedAt: null, suites: [{ file: '', results }] };
183
+ }
184
+ // ── Formats étendus (10/10/2026) : NUnit, TRX, TestNG, Robot, CTest, Cucumber, Behave, Allure ──────────────
185
+ const sansCommentaires = (x) => x.replace(/<!--[\s\S]*?-->/g, '');
186
+ /** secondes → ms, au dixième (comme JUnit) */
187
+ const ms = (secondes) => { const n = Number(secondes); return secondes != null && secondes !== '' && Number.isFinite(n) ? Math.round(n * 10000) / 10 : undefined; };
188
+ const avecDuree = (d) => (d != null ? { durationMs: d } : {});
189
+ const avecErreur = (e) => (e ? { error: e.slice(0, 2000) } : {});
190
+ const avecTags = (t) => { const l = t.map((x) => String(x ?? '').replace(/^@/, '').trim()).filter(Boolean); return l.length ? { tags: l } : {}; };
191
+ /** « Acme.FactureTests.Test_X(1.5) » → « Test_X(1.5) » : l'espace de noms et la classe ôtés, les paramètres gardés. */
192
+ const nomCourt = (n) => n.replace(/^(?:[A-Za-z_]\w*\.)+(?=[A-Za-z_]\w*(?:\(|$))/, '');
193
+ /** ISO à plus de 3 décimales (.NET : 7) ramené à la milliseconde avant lecture. */
194
+ const isoFin = (v) => (typeof v === 'string' ? iso(v.replace(/(\.\d{3})\d+/, '$1')) : iso(v));
195
+ const blocDe = (balise, corps) => (new RegExp(`<${balise}\\b[^>]*>([\\s\\S]*?)<\\/${balise}>`).exec(corps) ?? [])[1];
196
+ /** NUnit 3 (`<test-run>`) et NUnit 2 (`<test-results>`). Inconclusive, Warning, NotRunnable : ni succès ni échec → blocked. */
197
+ function depuisNunit(xml) {
198
+ const x = sansCommentaires(sansBom(xml));
199
+ const v3 = racineXml(x) === 'test-run';
200
+ const tete = attributs((/<(?:test-run|test-results)\b([^>]*)>/.exec(x) ?? [])[1]);
201
+ const cas = [];
202
+ for (const m of x.matchAll(/<test-case\b([^>]*?)(?:\/>|>([\s\S]*?)<\/test-case>)/g)) {
203
+ const a = attributs(m[1]);
204
+ const corps = m[2] ?? '';
205
+ if (!a.name)
206
+ continue;
207
+ const res = String(a.result ?? '').toLowerCase();
208
+ const status = v3
209
+ ? (res === 'passed' ? 'pass' : res === 'failed' ? 'fail' : res === 'skipped' ? 'skipped' : 'blocked')
210
+ : (res === 'success' ? 'pass' : res === 'failure' || res === 'error' ? 'fail' : res === 'ignored' || res === 'skipped' || (a.executed === 'False' && !res) ? 'skipped' : 'blocked');
211
+ const motif = texteDe(blocDe('message', blocDe('failure', corps) ?? blocDe('reason', corps) ?? '') ?? '');
212
+ cas.push({ file: '', name: nomCourt(a.name), status, ...avecDuree(ms(v3 ? a.duration : a.time)),
213
+ ...avecErreur(motif || (status === 'blocked' ? `résultat NUnit « ${a.result ?? '?'} »` : undefined)) });
214
+ }
215
+ const debut = v3 ? isoFin(String(tete['start-time'] ?? '').replace(' ', 'T')) : (tete.date && tete.time ? `${tete.date}T${tete.time}` : null);
216
+ return { title: tete.name || (v3 ? 'NUnit 3' : 'NUnit 2'), generatedAt: debut, suites: grouper(cas) };
217
+ }
218
+ const TRX = { passed: 'pass', failed: 'fail', error: 'fail', timeout: 'fail', aborted: 'fail', notexecuted: 'skipped' };
219
+ /** TRX (VSTest) : `outcome` ; le nom sans la classe (TestDefinitions) ; durée « hh:mm:ss.fffffff ». */
220
+ function depuisTrx(xml) {
221
+ const x = sansCommentaires(sansBom(xml));
222
+ const classes = new Map();
223
+ for (const m of x.matchAll(/<UnitTest\b([^>]*)>([\s\S]*?)<\/UnitTest>/g))
224
+ classes.set(attributs(m[1]).id, attributs((/<TestMethod\b([^>]*?)\/?>/.exec(m[2]) ?? [])[1]).className ?? '');
225
+ const duree = (d) => { const m = /^(\d+):(\d+):(\d+(?:\.\d+)?)$/.exec(String(d ?? '')); return m ? ms(Number(m[1]) * 3600 + Number(m[2]) * 60 + Number(m[3])) : undefined; };
226
+ const cas = [];
227
+ for (const m of x.matchAll(/<UnitTestResult\b([^>]*?)(?:\/>|>([\s\S]*?)<\/UnitTestResult>)/g)) {
228
+ const a = attributs(m[1]);
229
+ if (!a.testName)
230
+ continue;
231
+ const classe = classes.get(a.testId) ?? '';
232
+ const name = classe && a.testName.startsWith(`${classe}.`) ? a.testName.slice(classe.length + 1) : a.testName;
233
+ const status = TRX[String(a.outcome ?? '').toLowerCase()] ?? 'blocked';
234
+ const motif = texteDe(blocDe('Message', blocDe('ErrorInfo', m[2] ?? '') ?? '') ?? '');
235
+ cas.push({ file: '', name, status, ...avecDuree(duree(a.duration)), ...avecErreur(motif || (status === 'blocked' ? `résultat TRX « ${a.outcome ?? '?'} »` : status === 'fail' ? `résultat TRX « ${a.outcome} »` : undefined)) });
236
+ }
237
+ const tete = attributs((/<TestRun\b([^>]*)>/.exec(x) ?? [])[1]);
238
+ return { title: tete.name || 'TRX', generatedAt: isoFin(attributs((/<Times\b([^>]*?)\/?>/.exec(x) ?? [])[1]).start), suites: grouper(cas) };
239
+ }
240
+ /** Heure TestNG « 2026-10-10T09:00:00 UTC » ; un fuseau abrégé ambigu (CEST…) est rendu tel quel. */
241
+ const heureTestng = (v) => (v ? iso(v.replace(/\s+(?:UTC|GMT|Z)$/, 'Z')) ?? v : null);
242
+ /** TestNG natif : PASS/FAIL/SKIP ; une méthode de configuration (is-config) n'est pas un essai — sauf en ÉCHEC, qui est dit. */
243
+ function depuisTestng(xml) {
244
+ const x = sansCommentaires(xml);
245
+ const cas = [];
246
+ for (const m of x.matchAll(/<test-method\b([^>]*?)(?:\/>|>([\s\S]*?)<\/test-method>)/g)) {
247
+ const a = attributs(m[1]);
248
+ if (!a.name)
249
+ continue;
250
+ const st = String(a.status ?? '').toUpperCase();
251
+ if (a['is-config'] === 'true' && st !== 'FAIL')
252
+ continue;
253
+ const status = st === 'PASS' ? 'pass' : st === 'FAIL' ? 'fail' : st === 'SKIP' ? 'skipped' : 'blocked';
254
+ const exc = /<exception\b([^>]*)>([\s\S]*?)<\/exception>/.exec(m[2] ?? '');
255
+ const motif = exc ? (status === 'skipped' ? texteDe(blocDe('message', exc[2]) ?? '') : [attributs(exc[1]).class, texteDe(blocDe('message', exc[2]) ?? '')].filter(Boolean).join(' : ')) : '';
256
+ cas.push({ file: '', name: a.name, status, ...avecDuree(a['duration-ms'] != null && a['duration-ms'] !== '' ? Number(a['duration-ms']) : undefined),
257
+ ...avecErreur(motif || (status === 'blocked' ? `statut TestNG « ${a.status ?? '?'} »` : undefined)) });
258
+ }
259
+ return { title: attributs((/<suite\b([^>]*)>/.exec(x) ?? [])[1]).name || 'TestNG', generatedAt: heureTestng(attributs((/<suite\b([^>]*)>/.exec(x) ?? [])[1])['started-at']), suites: grouper(cas) };
260
+ }
261
+ /** Heure Robot Framework 6 « 20261010 09:00:00.199 » → « 2026-10-10T09:00:00.199 » (heure locale de la machine d'essai). */
262
+ const heureRobot = (v) => { const m = /^(\d{4})(\d{2})(\d{2}) (\d{2}:\d{2}:\d{2}(?:\.\d+)?)$/.exec(String(v ?? '')); return m ? `${m[1]}-${m[2]}-${m[3]}T${m[4]}` : v ?? null; };
263
+ /** Robot Framework : le statut PROPRE au test (son dernier `<status>`), le fichier `.robot` de la suite qui le contient. */
264
+ function depuisRobot(xml) {
265
+ const x = sansCommentaires(xml);
266
+ const pile = [];
267
+ const cas = [];
268
+ for (const m of x.matchAll(/<suite\b([^>]*)>|<\/suite>|<test\b([^>]*)>([\s\S]*?)<\/test>/g)) {
269
+ if (m[0].startsWith('</suite')) {
270
+ pile.pop();
271
+ continue;
272
+ }
273
+ if (m[0].startsWith('<suite')) {
274
+ pile.push(attributs(m[1]).source ?? '');
275
+ continue;
276
+ }
277
+ const a = attributs(m[2]);
278
+ const corps = m[3] ?? '';
279
+ if (!a.name)
280
+ continue;
281
+ const statuts = [...corps.matchAll(/<status\b([^>]*?)(?:\/>|>([\s\S]*?)<\/status>)/g)];
282
+ const dernier = statuts[statuts.length - 1];
283
+ const sa = attributs(dernier?.[1]);
284
+ const st = String(sa.status ?? '').toUpperCase();
285
+ const status = st === 'PASS' ? 'pass' : st === 'FAIL' ? 'fail' : st === 'SKIP' || st === 'NOT RUN' ? 'skipped' : 'blocked';
286
+ // les étiquettes du TEST : celles des mots-clés (imbriqués) sont ôtées d'abord
287
+ let propre = corps;
288
+ for (let avant = ''; avant !== propre;) {
289
+ avant = propre;
290
+ propre = propre.replace(/<kw\b[^>]*>(?:(?!<kw\b)[\s\S])*?<\/kw>/g, '');
291
+ }
292
+ const tags = [...propre.matchAll(/<tag>([\s\S]*?)<\/tag>/g)].map((t) => decoder(t[1]));
293
+ const duree = sa.elapsed != null ? ms(sa.elapsed) : sa.starttime && sa.endtime ? (Date.parse(`${heureRobot(sa.endtime)}Z`) - Date.parse(`${heureRobot(sa.starttime)}Z`)) : undefined;
294
+ const motif = texteDe(dernier?.[2] ?? '');
295
+ cas.push({ file: [...pile].reverse().find(Boolean) ?? '', name: a.name, status, ...avecDuree(Number.isFinite(duree) ? duree : undefined), ...avecTags(tags),
296
+ ...avecErreur(motif || (status === 'blocked' ? `statut Robot « ${sa.status ?? '?'} »` : undefined)) });
297
+ }
298
+ return { title: attributs((/<suite\b([^>]*)>/.exec(x) ?? [])[1]).name || 'Robot Framework', generatedAt: heureRobot(attributs((/<robot\b([^>]*)>/.exec(x) ?? [])[1]).generated), suites: grouper(cas) };
299
+ }
300
+ /** CTest (Test.xml, format CDash) : passed/failed ; notrun « Disabled »/« Skipped » = ignoré, autre notrun = bloqué. */
301
+ function depuisCtest(xml) {
302
+ const x = sansCommentaires(xml);
303
+ const cas = [];
304
+ for (const m of x.matchAll(/<Test\s+Status="([^"]*)"\s*>([\s\S]*?)<\/Test>/g)) {
305
+ const corps = m[2];
306
+ const name = texteDe(blocDe('Name', corps) ?? '');
307
+ if (!name)
308
+ continue;
309
+ const mesure = (nom) => texteDe((new RegExp(`<NamedMeasurement\\b[^>]*name="${nom}"[^>]*>\\s*<Value\\b[^>]*>([\\s\\S]*?)<\\/Value>`).exec(corps) ?? [])[1] ?? '');
310
+ const sortieM = /<Measurement>\s*<Value\b([^>]*)>([\s\S]*?)<\/Value>/.exec(corps);
311
+ const sortie = sortieM && !/encoding=/.test(sortieM[1]) ? texteDe(sortieM[2]) : '';
312
+ const completion = mesure('Completion Status');
313
+ const st = m[1].toLowerCase();
314
+ const status = st === 'passed' ? 'pass' : st === 'failed' ? 'fail' : st === 'notrun' && /disabled|skip/i.test(completion) ? 'skipped' : 'blocked';
315
+ const motif = status === 'fail' ? sortie || [mesure('Exit Code'), completion].filter(Boolean).join(' — ') : status === 'pass' ? '' : completion || `statut CTest « ${m[1]} »`;
316
+ cas.push({ file: '', name, status, ...avecDuree(ms(mesure('Execution Time'))), ...avecErreur(motif || undefined) });
317
+ }
318
+ const t = Number(texteDe(blocDe('StartTestTime', x) ?? ''));
319
+ return { title: attributs((/<Site\b([^>]*)>/.exec(x) ?? [])[1]).BuildName || 'CTest', generatedAt: t ? iso(t * 1000) : null, suites: grouper(cas) };
320
+ }
321
+ /**
322
+ * Le statut d'un scénario Gherkin d'après ses étapes (et crochets) : un échec ou une ambiguïté → fail ; une étape non
323
+ * définie ou en attente → blocked (jamais un succès) ; tout ignoré → skipped ; tout réussi → pass ; aucune étape → blocked.
324
+ */
325
+ function statutGherkin(etapes) {
326
+ const r = etapes.map((e) => ({ st: String(e?.result?.status ?? '').toLowerCase(), msg: e?.result?.error_message, nom: e?.name ?? '' }));
327
+ const echec = r.find((e) => e.st === 'failed' || e.st === 'ambiguous' || e.st === 'error' || e.st === 'hook_error');
328
+ if (echec)
329
+ return { status: 'fail', error: (Array.isArray(echec.msg) ? echec.msg.join('\n') : echec.msg ? String(echec.msg) : '') || `étape ${echec.st === 'ambiguous' ? 'ambiguë' : 'en échec'} : ${echec.nom}` };
330
+ const nd = r.find((e) => e.st === 'undefined' || e.st === 'pending');
331
+ if (nd)
332
+ return { status: 'blocked', error: `étape ${nd.st === 'undefined' ? 'non définie (undefined)' : 'en attente (pending)'} : ${nd.nom}` };
333
+ if (!r.length)
334
+ return { status: 'blocked', error: 'scénario sans étape' };
335
+ if (r.some((e) => e.st === 'skipped' || e.st === 'untested'))
336
+ return { status: 'skipped' };
337
+ if (r.every((e) => e.st === 'passed'))
338
+ return { status: 'pass' };
339
+ return { status: 'blocked', error: `statut d'étape incompris : ${r.find((e) => e.st !== 'passed')?.st || '(vide)'}` };
340
+ }
341
+ /** Cucumber JSON : un Background (Cucumber-JVM : élément à part) compte dans le scénario qui le suit ; durées en ns. */
342
+ function depuisCucumber(features) {
343
+ const cas = [];
344
+ let debut = null;
345
+ for (const f of features) {
346
+ let fond = [];
347
+ for (const e of f.elements ?? []) {
348
+ if (e?.type === 'background') {
349
+ fond = e.steps ?? [];
350
+ continue;
351
+ }
352
+ const etapes = [...fond, ...(e.before ?? []), ...(e.steps ?? []), ...(e.after ?? [])];
353
+ fond = [];
354
+ const { status, error } = statutGherkin(etapes);
355
+ const ns = etapes.reduce((n, x) => n + (typeof x?.result?.duration === 'number' ? x.result.duration : 0), 0);
356
+ const t = iso(e.start_timestamp);
357
+ if (t && (!debut || t < debut))
358
+ debut = t;
359
+ cas.push({ file: String(f.uri ?? f.id ?? ''), name: String(e.name ?? ''), status, durationMs: Math.round(ns / 1e5) / 10, ...avecTags((e.tags ?? []).map((t) => t?.name ?? t)), ...avecErreur(error) });
360
+ }
361
+ }
362
+ return { title: 'Cucumber', generatedAt: debut, suites: grouper(cas) };
363
+ }
364
+ const BEHAVE = { passed: 'pass', failed: 'fail', error: 'fail', hook_error: 'fail', skipped: 'skipped', untested: 'skipped', undefined: 'blocked', pending: 'blocked' };
365
+ /** Behave JSON : le statut du scénario (à défaut, ses étapes) ; le Background n'est pas un essai ; durées en secondes. */
366
+ function depuisBehave(features) {
367
+ const cas = [];
368
+ for (const f of features) {
369
+ const file = String(f.location ?? '').replace(/:\d+$/, '');
370
+ for (const e of f.elements ?? []) {
371
+ if (e?.type === 'background' || String(e?.keyword ?? '').toLowerCase() === 'background')
372
+ continue;
373
+ const parEtapes = statutGherkin(e.steps ?? []);
374
+ const status = BEHAVE[String(e.status ?? '').toLowerCase()] ?? (e.status ? 'blocked' : parEtapes.status);
375
+ const s = (e.steps ?? []).reduce((n, x) => n + (typeof x?.result?.duration === 'number' ? x.result.duration : 0), 0);
376
+ const error = status === 'pass' || status === 'skipped' ? undefined : parEtapes.error ?? `statut Behave « ${e.status} »`;
377
+ cas.push({ file, name: String(e.name ?? ''), status, ...avecDuree(ms(s)), ...avecTags(e.tags ?? []), ...avecErreur(error) });
378
+ }
379
+ }
380
+ return { title: 'Behave', generatedAt: null, suites: grouper(cas) };
381
+ }
382
+ const ALLURE = { passed: 'pass', failed: 'fail', broken: 'fail', skipped: 'skipped' };
383
+ /** Allure 2 : un résultat par essai ; un essai REJOUÉ (même historyId) : le dernier fait foi, comme dans Allure. */
384
+ function depuisAllure(liste) {
385
+ const parHistoire = new Map();
386
+ for (const r of liste) {
387
+ const k = String(r.historyId ?? r.uuid);
388
+ const avant = parHistoire.get(k);
389
+ if (!avant || (Number(r.stop) || 0) >= (Number(avant.stop) || 0))
390
+ parHistoire.set(k, r); // l'ordre d'insertion (1re apparition) est gardé
391
+ }
392
+ let debut = null;
393
+ const cas = [...parHistoire.values()].map((r) => {
394
+ if (typeof r.start === 'number' && (debut == null || r.start < debut))
395
+ debut = r.start;
396
+ const status = ALLURE[String(r.status).toLowerCase()] ?? 'blocked';
397
+ const motif = r.statusDetails?.message ? String(r.statusDetails.message) : status === 'blocked' ? `statut Allure « ${r.status} »` : undefined;
398
+ return { file: '', name: String(r.name), status, ...avecDuree(typeof r.start === 'number' && typeof r.stop === 'number' ? r.stop - r.start : undefined),
399
+ ...avecTags((r.labels ?? []).filter((l) => l?.name === 'tag').map((l) => l.value)), ...avecErreur(motif) };
400
+ });
401
+ return { title: 'Allure', generatedAt: debut != null ? iso(debut) : null, suites: grouper(cas) };
402
+ }
403
+ /** Lit un rapport d'essais, quel qu'en soit le format ; jamais d'exception : un corps illisible est DIT illisible. */
404
+ export function lireRapportEssais(corps) {
405
+ const format = detecterFormat(corps);
406
+ const texte = typeof corps === 'string' ? sansBom(corps) : '';
407
+ let brut = corps;
408
+ if (typeof corps === 'string' && ['mjs-unit', 'compte-rendu', 'ctrf', 'intoto', 'cucumber', 'behave', 'allure'].includes(format))
409
+ brut = JSON.parse(texte);
410
+ switch (format) {
411
+ case 'mjs-unit': return { format, rapport: depuisSuites(brut, String(brut.title ?? 'mjs-unit'), brut.generatedAt ? String(brut.generatedAt) : null), brut };
412
+ case 'compte-rendu': return { format, rapport: depuisSuites(brut, String(brut.titre ?? 'compte rendu'), brut.genereLe ? String(brut.genereLe) : null), brut };
413
+ case 'junit': return { format, rapport: depuisJunit(texte), brut: texte };
414
+ case 'nunit': return { format, rapport: depuisNunit(texte), brut: texte };
415
+ case 'trx': return { format, rapport: depuisTrx(texte), brut: texte };
416
+ case 'testng': return { format, rapport: depuisTestng(texte), brut: texte };
417
+ case 'robot': return { format, rapport: depuisRobot(texte), brut: texte };
418
+ case 'ctest': return { format, rapport: depuisCtest(texte), brut: texte };
419
+ case 'cucumber': return { format, rapport: depuisCucumber(brut), brut };
420
+ case 'behave': return { format, rapport: depuisBehave(brut), brut };
421
+ case 'allure': return { format, rapport: depuisAllure(Array.isArray(brut) ? brut : [brut]), brut };
422
+ case 'ctrf': return { format, rapport: depuisCtrf(brut), brut };
423
+ case 'intoto': return { format, rapport: depuisInToto(brut), brut };
424
+ case 'tap': return { format, rapport: depuisTap(texte), brut: texte };
425
+ case 'html': return { format, rapport: null, brut: null, erreur: `rapport HTML : une preuve lisible par un humain, pas par une machine — ${ENVOYER}` };
426
+ default: {
427
+ let erreur = `format non reconnu — ${ENVOYER}`;
428
+ if (typeof corps === 'string' && !/^\s*</.test(texte)) {
429
+ try {
430
+ JSON.parse(texte);
431
+ }
432
+ catch (e) {
433
+ erreur = `JSON illisible : ${e.message} — ${ENVOYER}`;
434
+ }
435
+ }
436
+ if (typeof corps === 'string' && /^\s*</.test(texte))
437
+ erreur = `XML reconnu, mais d’aucun format d’essais lu (racine <${racineXml(texte) ?? '?'}>) — ${ENVOYER}`;
438
+ return { format: 'illisible', rapport: null, brut: null, erreur };
439
+ }
440
+ }
441
+ }
442
+ // ── La référence d'un essai dans le plan ──────────────────────────────────────────────────────────
443
+ // La référence est en tête du nom (`T-MOD-01 — …`). Java, C#, Python et Go refusent le tiret dans un nom de fonction :
444
+ // `test_T_MOD_01_…` (ou `T_MOD_01_…`) est reconnu par JETONS, `test` de tête ignoré ; la clé du plan la plus longue
445
+ // l'emporte (T-MOD-01 plutôt que T-MOD). Règle reprise de qatrax.dev (rapports.mjs, cleDe), descendue ici.
446
+ const jetons = (s) => String(s ?? "").split(/[^A-Za-z0-9]+/).filter(Boolean).map((t) => t.toLowerCase());
447
+ /** La référence du plan que désigne ce nom d'essai, ou '' : le nom exact d'abord, puis par jetons. */
448
+ export function refDuPlan(nom, refs) {
449
+ const liste = [...refs].map(String).filter(Boolean);
450
+ const exact = /^\s*([A-Za-z][A-Za-z0-9]*(?:-[A-Za-z0-9]+)*)\s*[—–·:-]/.exec(String(nom ?? ""));
451
+ if (exact && liste.includes(exact[1]))
452
+ return exact[1];
453
+ let j = jetons(nom);
454
+ if (j[0] === "test")
455
+ j = j.slice(1);
456
+ let meilleure = "";
457
+ for (const ref of liste) {
458
+ const k = jetons(ref);
459
+ if (k.length && k.length <= j.length && k.every((t, i) => t === j[i]) && k.length > jetons(meilleure).length)
460
+ meilleure = ref;
461
+ }
462
+ return meilleure;
463
+ }
464
+ // ── Rattacher les essais au plan (référence en tête du nom, fichier de l'autoRef) ──────────────────
465
+ // Règle de qatrax.dev (rapports.mjs, rattacher), descendue ici (R-G) : le compte rendu est SCELLÉ, qatrax ne peut plus
466
+ // le réécrire ; le rattachement se fait donc à la source, avant le sceau. Vérification de bout en bout du 10/10/2026 :
467
+ // sans lui, un client Java passait intégrité et SBOM… et son exigence restait non prouvée.
468
+ const finitPar = (a, b) => { const x = a.replace(/\\/g, "/"); const y = b.replace(/\\/g, "/"); return !!x && !!y && (x.endsWith(y) || y.endsWith(x)); };
469
+ /** Une étiquette (Cucumber @T-MOD-01, Robot, Allure) qui EST une référence du plan ; le nom prime toujours. */
470
+ const refDEtiquette = (tags, table) => {
471
+ for (const t of Array.isArray(tags) ? tags : []) {
472
+ const k = String(t ?? '').replace(/^@/, '').trim();
473
+ if (table.has(k))
474
+ return k;
475
+ }
476
+ return '';
477
+ };
478
+ /**
479
+ * Pose sur chaque essai sa référence du plan (`T-MOD-01 — test_T_MOD_01_…`) et le fichier de son `autoRef`
480
+ * (`<fichier>::<ref>`). Un fichier déjà conforme au plan est gardé ; une référence présente dans plusieurs fichiers
481
+ * ne fait rien deviner (le fichier d'origine reste) ; un essai hors plan est laissé tel quel. Pur.
482
+ */
483
+ export function rattacherAuPlan(suites, autoRefs) {
484
+ const table = new Map();
485
+ for (const a of autoRefs) {
486
+ const i = String(a ?? "").lastIndexOf("::");
487
+ if (i < 0)
488
+ continue;
489
+ const ref = a.slice(i + 2).trim();
490
+ const f = a.slice(0, i).trim();
491
+ if (!ref || !f)
492
+ continue;
493
+ if (!table.has(ref))
494
+ table.set(ref, []);
495
+ if (!table.get(ref).includes(f))
496
+ table.get(ref).push(f);
497
+ }
498
+ if (!table.size)
499
+ return suites;
500
+ const parFichier = new Map();
501
+ const mettre = (f, r) => { if (!parFichier.has(f))
502
+ parFichier.set(f, []); parFichier.get(f).push(r); };
503
+ for (const s of suites) {
504
+ for (const r0 of s.results) {
505
+ const ref = refDuPlan(r0.name, table.keys()) || refDEtiquette(r0.tags, table);
506
+ if (!ref) {
507
+ mettre(s.file, r0);
508
+ continue;
509
+ }
510
+ const exact = new RegExp(`^\\s*${ref.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*[—–·:-]`).test(r0.name);
511
+ const r = exact ? r0 : { ...r0, name: `${ref} — ${r0.name}`, ...(r0.title ? { title: `${ref} — ${r0.title}` } : {}) };
512
+ const fichiers = table.get(ref);
513
+ mettre(s.file && fichiers.some((f) => finitPar(s.file, f)) ? s.file : fichiers.length === 1 ? fichiers[0] : s.file, r);
514
+ }
515
+ }
516
+ return [...parFichier].map(([file, results]) => ({ file, results }));
517
+ }
518
+ //# sourceMappingURL=lecteurs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lecteurs.js","sourceRoot":"","sources":["../src/lecteurs.ts"],"names":[],"mappings":"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"}
package/dist/report.d.ts CHANGED
@@ -77,7 +77,17 @@ export interface ContexteCompteRendu {
77
77
  outil: {
78
78
  name: string;
79
79
  version: string;
80
+ mode?: "lecteur";
80
81
  };
82
+ /** 0.10.0 — mode lecteur : les rapports LUS (Java, C#, Python…) et leurs empreintes ; les défauts de lecture */
83
+ lecture?: {
84
+ rapports: {
85
+ fichier: string;
86
+ format: string;
87
+ sha256: string;
88
+ }[];
89
+ defauts?: string[];
90
+ } | null;
81
91
  }
82
92
  export type StatutCompteRendu = "succes" | "echec" | "erreur" | "ignore";
83
93
  export type Verdict = "conforme" | "non conforme" | "incomplet";
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE;AACpE,uCAAuC;AACvC,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAE7G;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,MAAM,CAGvE;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA0B5D;AAWD,wCAAwC;AACxC,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU;;;;;;EAG3C;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE3D;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmD3D;AAQD,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAC;IAChE,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5G,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,6FAA6F;AAC7F,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAGD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsDvG;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAW1D;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAkBtE"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/report.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { refDuPlan, rattacherAuPlan } from "./lecteurs.js";
1
2
  /**
2
3
  * Le `classname` JUnit d'un cas : le chemin du fichier sans extension, en notation pointée, suivi de ses
3
4
  * groupes `describe` — `test-scripts/a.test.mjs` + [Groupe] → `test-scripts.a.test.Groupe`.
@@ -127,11 +128,19 @@ export function construireCompteRendu(report, ctx) {
127
128
  defauts.push(ctx.sbomErreur ? `SBOM illisible : ${ctx.sbomErreur}` : "SBOM absente : la version éprouvée est inconnue (--sbom)");
128
129
  else if (!comp.version)
129
130
  defauts.push("SBOM sans version de produit (metadata.component.version)");
130
- const cas = report.suites.flatMap((s) => s.results.filter((r) => !r.hook).map((r) => ({ r, fichier: s.file })));
131
+ // 0.10.0 — une référence écrite à la manière de Java, C#, Python (test_T_MOD_01_…) est cherchée dans le plan.
132
+ const refsPlan = (ctx.plan?.contenu?.tests ?? []).map((t) => String(t?.ref ?? "")).filter(Boolean);
133
+ for (const d of ctx.lecture?.defauts ?? [])
134
+ defauts.push(d);
135
+ // 0.10.0 — rattachées au plan AVANT le sceau (référence en tête du nom, fichier de l'autoRef) : qatrax ne réécrit pas
136
+ // un compte rendu scellé, et c'est par `autoRef` qu'il prouve une exigence.
137
+ const autoRefs = (ctx.plan?.contenu?.tests ?? []).map((t) => String(t?.autoRef ?? "")).filter(Boolean);
138
+ const suites = autoRefs.length ? rattacherAuPlan(report.suites, autoRefs) : report.suites;
139
+ const cas = suites.flatMap((s) => s.results.filter((r) => !r.hook).map((r) => ({ r, fichier: s.file })));
131
140
  const resultats = cas.map(({ r, fichier }) => {
132
141
  const titre = r.title ?? r.name;
133
142
  const statut = statutDe(r);
134
- return { ref: refDe(titre), titre, fichier, statut, dureeMs: Math.round(r.durationMs || 0),
143
+ return { ref: refDe(titre) || (refsPlan.length ? refDuPlan(titre, refsPlan) : ""), titre, fichier, statut, dureeMs: Math.round(r.durationMs || 0),
135
144
  ...(statut === "ignore" ? { motif: r.skipReason ?? "" } : {}), ...(r.error ? { message: String(r.error).slice(0, 2000) } : {}) };
136
145
  });
137
146
  for (const x of resultats) {
@@ -165,6 +174,7 @@ export function construireCompteRendu(report, ctx) {
165
174
  genereLe: report.generatedAt,
166
175
  ...(report.title ? { titre: report.title } : {}),
167
176
  outil: ctx.outil,
177
+ ...(ctx.lecture ? { lecture: { rapports: ctx.lecture.rapports } } : {}),
168
178
  produit: { nom: String(comp.name ?? "inconnu"), version: String(comp.version || "inconnue"), purl: String(comp.purl ?? "") },
169
179
  sbom: ctx.sbom ? { fichier: ctx.sbom.fichier, serialNumber: String(sb?.serialNumber ?? ""), revision: Number(sb?.version) || 1, sha256: ctx.sbom.sha256 } : null,
170
180
  source: { publication: prop("mostajs:publication"), etiquette: prop("mostajs:git:tag"), commit: prop("mostajs:git:commit") },
@@ -175,7 +185,7 @@ export function construireCompteRendu(report, ctx) {
175
185
  synthese,
176
186
  defauts,
177
187
  // Les suites au format du rapport JSON : le compte rendu reste lisible par qatrax.dev (qa-engine) tel quel.
178
- suites: report.suites,
188
+ suites,
179
189
  };
180
190
  }
181
191
  /** Export CTRF (Common Test Report Format) d'un compte rendu. */
@@ -204,7 +214,8 @@ export function renderInTotoTestResult(cr) {
204
214
  predicateType: "https://in-toto.io/attestation/test-result/v0.1",
205
215
  predicate: {
206
216
  result,
207
- configuration: [...(cr.plan ? [{ name: cr.plan.fichier, digest: { sha256: cr.plan.sha256 } }] : []), ...(cr.scripts ?? []).map((s) => ({ name: s.fichier, digest: { sha256: s.sha256 } }))],
217
+ configuration: [...(cr.plan ? [{ name: cr.plan.fichier, digest: { sha256: cr.plan.sha256 } }] : []), ...(cr.scripts ?? []).map((s) => ({ name: s.fichier, digest: { sha256: s.sha256 } })),
218
+ ...(cr.lecture?.rapports ?? []).map((r) => ({ name: r.fichier, digest: { sha256: r.sha256 } }))],
208
219
  ...(cr.environnement?.ci ? { url: cr.environnement.ci } : {}),
209
220
  passedTests: noms((x) => x.statut === "succes"),
210
221
  warnedTests: noms((x) => x.statut === "ignore"),
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mostajs/mjs-unit",
3
- "version": "0.9.0",
4
- "description": "Micro-framework de test pour l'écosystème @mostajs/* : zéro dépendance, API minimale (test/expect/run), runner CLI (preuves HTML/JSON/JUnit XML via --report/--json/--junit ; compte rendu de validation CRA lié à la SBOM, CTRF, in-toto test-result via --compte-rendu/--ctrf/--intoto ; menu en shell mjs-unit-menu), notions JUnit (échec/erreur, classname, crochets, délai, étiquettes, tests paramétrés), reporters réutilisables (./report), et un resolver ESM qui exécute sous Node les dist à imports sans extension (convention moduleResolution=bundler).",
3
+ "version": "0.10.0",
4
+ "description": "Micro-framework de test pour l'écosystème @mostajs/* : zéro dépendance, API minimale (test/expect/run), runner CLI (preuves HTML/JSON/JUnit XML via --report/--json/--junit ; compte rendu de validation CRA lié à la SBOM, CTRF, in-toto test-result via --compte-rendu/--ctrf/--intoto ; mode lecteur --depuis : lit le rapport natif de Java, C#, Python, Go, C++… — JUnit XML, NUnit, TRX, TestNG, Robot Framework, CTest, Cucumber JSON, Behave JSON, Allure 2, CTRF, TAP — et en fait le même compte rendu ; lecteurs réutilisables ./lecteurs ; menu en shell mjs-unit-menu), notions JUnit (échec/erreur, classname, crochets, délai, étiquettes, tests paramétrés), reporters réutilisables (./report), et un resolver ESM qui exécute sous Node les dist à imports sans extension (convention moduleResolution=bundler).",
5
5
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
6
6
  "license": "AGPL-3.0-or-later",
7
7
  "type": "module",
@@ -27,6 +27,11 @@
27
27
  "import": "./dist/report.js",
28
28
  "default": "./dist/report.js"
29
29
  },
30
+ "./lecteurs": {
31
+ "types": "./dist/lecteurs.d.ts",
32
+ "import": "./dist/lecteurs.js",
33
+ "default": "./dist/lecteurs.js"
34
+ },
30
35
  "./register": {
31
36
  "default": "./register.mjs"
32
37
  },
@@ -58,7 +63,16 @@
58
63
  "esm",
59
64
  "bundler",
60
65
  "zero-dependency",
61
- "mostajs"
66
+ "mostajs",
67
+ "nunit",
68
+ "trx",
69
+ "testng",
70
+ "robot-framework",
71
+ "cucumber",
72
+ "behave",
73
+ "allure",
74
+ "ctest",
75
+ "junit"
62
76
  ],
63
77
  "mostajs": {
64
78
  "niveau": "N0",