diff --git a/json_to_md.py b/json_to_md.py
index 008e3a58..0c56066b 100644
--- a/json_to_md.py
+++ b/json_to_md.py
@@ -7,23 +7,51 @@ import re
from collections import defaultdict
import os
-def build_tree(nodeids):
- tree = lambda: defaultdict(tree)
- root = tree()
- for nid in nodeids:
- parts = nid.replace("\\", "/").split("/") # normalize path
- current = root
- for part in parts:
- current = current[part]
- return root
-def write_tree(f, subtree, path=""):
- for key in sorted(subtree):
- full_path = f"{path}/{key}" if path else key
- f.write(f"\n📁 `{full_path}`
\n\n")
- if subtree[key]: # has children
- write_tree(f, subtree[key], full_path)
- f.write(" \n\n")
+def build_tree(collectors):
+ tree = {}
+ file_map = {}
+
+ for collector in collectors:
+ nodeid = collector.get("nodeid", "")
+ parts = nodeid.split("/")
+ current = tree
+
+ for part in parts[:-1]:
+ current = current.setdefault(part, {})
+
+ last = parts[-1]
+ current[last] = collector # Feuille contient le collector complet
+ file_map[nodeid] = collector
+
+ return tree
+
+def write_tree(f, tree, prefix=""):
+ for name, content in sorted(tree.items()):
+ path = os.path.join(prefix, name)
+ if isinstance(content, dict):
+ f.write(f"\n📁 `{path}`
\n\n")
+ write_tree(f, content, path)
+ f.write(f" \n\n")
+ else:
+ # C’est une feuille : afficher infos collector
+ outcome = content.get("outcome", "unknown")
+ emoji = "✅" if outcome == "passed" else "❌"
+ f.write(f"- **outcome:** `{outcome}`\n")
+ results = content.get("result", [])
+ if results:
+ f.write("- **result:**\n```\n")
+ for item in results:
+ if isinstance(item, dict):
+ for k, v in item.items():
+ f.write(f"{k}: {v}\n")
+ f.write("\n")
+ else:
+ f.write(f"{item}\n")
+ f.write("```\n")
+ else:
+ f.write("- **result:** `None`\n")
+ f.write("\n")
def stringify(obj):
if obj is None or obj == "":
@@ -92,38 +120,9 @@ def json_to_md_nested(json_path, md_path, allure_dir=None):
if "collectors" in data:
f.write("## 📚 Collectés\n")
+ tree = build_tree(data["collectors"])
+ write_tree(f, tree)
- # 1. Collect all nodeids that represent paths
- nodeids = [collector.get("nodeid", "unknown").split("::")[0] for collector in data["collectors"]]
-
- # 2. Build directory tree from paths
- dir_tree = build_tree(nodeids)
-
- # 3. Write the tree recursively
- write_tree(f, dir_tree)
-
- # 4. Ensuite, tu peux afficher les détails pour chaque vrai test (en dehors de la hiérarchie)
- for collector in data["collectors"]:
- nodeid = collector.get("nodeid", "unknown")
- outcome = collector.get("outcome", "unknown")
- emoji = "✅" if outcome == "passed" else "❌"
- f.write(f"\n{emoji} `{nodeid}`
\n\n")
- f.write(f"- **outcome:** `{outcome}`\n")
-
- results = collector.get("result", [])
- if results:
- f.write("- **result:**\n```\n")
- for item in results:
- if isinstance(item, dict):
- for k, v in item.items():
- f.write(f"{k}: {v}\n")
- f.write("\n")
- else:
- f.write(f"{item}\n")
- f.write("```\n")
- else:
- f.write("- **result:** `None`\n")
- f.write(" \n\n")