#!/bin/bash # test-playground-parsers.sh — Parser-fixture-validering for Playground v3 # # Itererer 17 forventede fixture-filer (kanonisk liste fra Step 10), # bekrefter at de finnes og er >= 20 linjer, og bekrefter at de 14 # parser-funksjons-navnene fra archetype-routing-tabellen finnes i v3 HTML. # # Designet for graceful-degrade: hvis Step 10 har skipped capture, så # kjører testen kun parser-name-grep og rapporterer pending fixtures # som warn (ikke fail). Slik kan testen integreres tidlig. # # Bash 3.2-kompatibel. set -euo pipefail PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)" HTML_FILE="$PLUGIN_ROOT/playground/ms-ai-architect-playground.html" FIXTURES_DIR="$PLUGIN_ROOT/playground/test-fixtures" # shellcheck disable=SC1091 source "$PLUGIN_ROOT/tests/lib/e2e-helpers.sh" init_suite "Playground v3 — Parser fixtures" # Forventede fixtures per kanonisk archetype-routing-tabell (17 stk). # Rekkefølgen følger plan.md: 6 regulatory + 3 security + 2 economy + 6 documentation EXPECTED_FIXTURES="classify requirements transparency frimpact conformity dpia security ros review cost license adr summary poc utredning compare migrate" # ------------------------------------------------------- # 1. Fixtures-katalog finnes # ------------------------------------------------------- if [ ! -d "$FIXTURES_DIR" ]; then fail "Fixture-katalog mangler: $FIXTURES_DIR" print_summary exit 1 fi pass "Fixture-katalog eksisterer: $FIXTURES_DIR" # ------------------------------------------------------- # 2. Iterer 17 forventede fixtures, sjekk eksistens + min linjer # ------------------------------------------------------- actual=0 expected_total=0 for cmd in $EXPECTED_FIXTURES; do expected_total=$((expected_total + 1)) fixture="$FIXTURES_DIR/$cmd.md" if [ -f "$fixture" ]; then actual=$((actual + 1)) line_count=$(wc -l < "$fixture" | tr -d ' ') if [ "${line_count:-0}" -ge 20 ]; then pass "Fixture $cmd.md eksisterer og >= 20 linjer ($line_count)" else fail "Fixture $cmd.md eksisterer men < 20 linjer ($line_count)" fi fi done # Capture-status if [ "$actual" -eq 0 ]; then warn "Ingen fixtures kapturet ennå (Step 10 skipped). Kjører kun parser-name-grep." elif [ "$actual" -lt "$expected_total" ]; then warn "$actual av $expected_total fixtures kapturet. Resterende rapporteres som pending." pending=$((expected_total - actual)) for cmd in $EXPECTED_FIXTURES; do [ -f "$FIXTURES_DIR/$cmd.md" ] && continue warn "Fixture pending: $cmd.md" done pass "Capture-status: $actual/$expected_total fixtures (graceful-degrade tillatt)" else pass "Alle $expected_total fixtures kapturet" fi # ------------------------------------------------------- # 3. Parser-funksjons-navn til stede i v3 HTML # ------------------------------------------------------- if [ ! -f "$HTML_FILE" ]; then fail "v3 HTML mangler: $HTML_FILE" print_summary exit 1 fi pass "v3 HTML eksisterer: $HTML_FILE" # 14 parsere fra kanonisk routing-tabell PARSERS="parseAiAct parseRequirements parseTextDocument parseFria parseConformityChecklist parseMatrixRisk parseMatrixRisk6x5 parseFindings parseCostDistribution parseCapabilityMatrix parsePhasedPlan parseMarkdown parseVerdict parseComparison" parser_hits=0 for p in $PARSERS; do if grep -qE "function ${p}\b" "$HTML_FILE"; then pass "Parser-funksjon definert: $p" parser_hits=$((parser_hits + 1)) else fail "Parser-funksjon mangler: $p" fi done if [ "$parser_hits" -eq 14 ]; then pass "14/14 parsere til stede i v3 HTML" else fail "Forventet 14 parsere, fant $parser_hits" fi # ------------------------------------------------------- # 4. PARSERS routing-objekt eksponert via window.__PARSERS # ------------------------------------------------------- if grep -qE "window\.__PARSERS *=" "$HTML_FILE"; then pass "window.__PARSERS eksponert (run-time tilgjengelig)" else fail "window.__PARSERS mangler" fi # Sjekk at hver canonical archetype er en nøkkel i PARSERS-objektet. # Faktiske nøkler følger PARSERS-objektet i v3 HTML (ikke alle = report_archetype-verdier # på CATALOG-commands; noen er normalisert: "aiact", "requirements-list", "capability"). ARCHETYPES="aiact requirements-list text-document fria conformity-checklist matrix-risk matrix-risk-6x5 findings cost-distribution capability phased-plan markdown verdict comparison" arch_hits=0 for a in $ARCHETYPES; do if grep -qE "['\"]${a}['\"] *: *parse" "$HTML_FILE"; then pass "Archetype-routing-nøkkel: '${a}'" arch_hits=$((arch_hits + 1)) else fail "Archetype-routing-nøkkel mangler: '${a}'" fi done if [ "$arch_hits" -eq 14 ]; then pass "14/14 archetype-nøkler i PARSERS-routing-objektet" else fail "Forventet 14 archetype-nøkler, fant $arch_hits" fi # ------------------------------------------------------- # 5. Hver fixture indikerer korrekt arketype-treff (heuristisk) # ------------------------------------------------------- # Hvis fixture finnes og parser-name finnes, regn det som "rute-trygg". for cmd in $EXPECTED_FIXTURES; do fixture="$FIXTURES_DIR/$cmd.md" [ -f "$fixture" ] || continue # Sjekk at fixture-filen inneholder "## "-overskrift (alle parsere bruker section-split) if grep -qE "^## " "$fixture"; then pass "Fixture $cmd.md har section-headers (## )" else fail "Fixture $cmd.md mangler section-headers" fi done # ------------------------------------------------------- # 6. handlePasteImport routing-stub erstattet (Step 12 funksjonell) # ------------------------------------------------------- if grep -qE "function handlePasteImport" "$HTML_FILE"; then pass "handlePasteImport-funksjon definert" else fail "handlePasteImport-funksjon mangler" fi if grep -qE "window\.__handlePasteImport *=" "$HTML_FILE"; then pass "window.__handlePasteImport eksponert" else fail "window.__handlePasteImport mangler" fi # ------------------------------------------------------- # Oppsummering # ------------------------------------------------------- print_summary