Panels aufgeraeumt (alle vier Addons) + Test-Suite instandgesetzt

Panel-Umbau
-----------
Jedes Addon hatte seine Einstellungen als Kette dauerhaft offener Boxen - beim
Rock Generator 15 Stueck, man musste am ganzen Panel vorbeiscrollen, um an den
Erzeugen-Knopf zu kommen. Jetzt steht oben nur, was man bei jedem Asset anfasst
(Vorlage, Name, grosser Erzeugen-Knopf, Zufall), der Rest liegt in nummerierten,
eingeklappten Unter-Panels in der Reihenfolge des Arbeitsablaufs:

  Rock Gen    9 Unter-Panels (Benennung ... Textur-Bake)
  Tree Gen    4 (Wachstum, Blattwerk, Zusatz-Ebenen, Export)
  Grass Gen   4 (Form, Haltung, Batch, Kanal-Belegung)
  Asset Utils 5 (war schon so, dient als Vorlage)

Schalter, die ein ganzes Unter-Panel steuern (Vertex-Farben backen,
Wachstums-Stufen), sitzen jetzt als Haekchen im Panel-Kopf - Zustand sichtbar
ohne aufzuklappen.

Gemessen statt geglaubt: test_panels.py registriert alle vier Addons, laesst
jedes Panel zeichnen, prueft Tab-Zugehoerigkeit und Auf-/Zugeklappt-Absicht,
dass jeder angebotene Operator existiert - und vor allem, dass JEDE definierte
Property irgendwo erreichbar bleibt (Zweige wie base_shape='BOX' werden dabei
durchgeschaltet). Ergebnis: 0 von 122 Properties beim Umbau verloren.

Test-Suite
----------
Beim Gegenpruefen kam heraus, dass fuenf Tests still veraltet waren und eine
echte Regression nicht gemeldet haetten:

  test_rock_gen      suchte Objekte mit Praefix "Rock_" - die heissen seit dem
                     Benennungssystem "Fels_A_M_01". Fand 0 von 3.
  test_base_shapes   loeschte am Schleifenanfang ALLE Objekte, auch die eigenen
                     Kopien aus vorigen Durchlaeufen -> StructRNA removed.
  test_ecogame_tree  erwartete eine feste Namensliste ohne die spaeter
                     dazugekommenen _Leaf-Objekte.
  test_tree_addon    dito, ausserdem Zip-Version 1.22.0 fest verdrahtet.
  test_leaves        Zip-Version 1.23.0 fest verdrahtet.

Drei Muster vermieden statt nur die Symptome geflickt: neue Objekte ueber die
Differenz vorher/nachher finden statt ueber ein Namens-Praefix, Zips per glob
statt mit fester Version, Zusatz-Ebenen beim Zaehlen herausfiltern.

Neu: run_tests.ps1 faehrt die komplette Suite mit einem Befehl (-Filter fuer
einzelne). Genau das fehlte - deshalb war das Veralten nicht aufgefallen.
13 von 13 Tests bestehen.

Nebenbei
--------
build.ps1 ruft server-generate jetzt mit --html auf (browsbare index.html fuer
statisches Hosting). Nachgemessen und im README festgehalten: zwei Zips
derselben Extension-ID sind KEIN Versions-Archiv - server-generate warnt
("archive found with duplicates ... conflicting blender versions"), mehrere
Versionen einer ID gehen nur bei verschiedenen Blender-Bereichen.

Versionen: Rock 2.13.0, Tree 1.24.0, Grass 1.1.0, Asset Utils 1.1.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 12:12:38 +02:00
co-authored by Claude Opus 4.8
parent ef57050739
commit 71b9982441
26 changed files with 902 additions and 284 deletions
+49
View File
@@ -0,0 +1,49 @@
# Faehrt die komplette Test-Suite gegen die Addon-Dateien.
#
# Warum es das gibt: die Tests lagen einzeln herum und wurden nur beim Bauen des
# jeweiligen Features gestartet. Dadurch waren fuenf davon still veraltet - sie
# pruesten gegen Namen und Zip-Versionen, die es laengst nicht mehr gab, und
# haetten eine echte Regression nicht gemeldet. Ein Befehl fuer alles.
#
# Aufruf:
# .\run_tests.ps1
# .\run_tests.ps1 -Blender "E:\SteamLibrary\steamapps\common\Blender\blender.exe"
# .\run_tests.ps1 -Filter panels # nur tests\test_panels.py
#
# Hinweis: test_tree_addon.py prueft das GEBAUTE Zip aus dist\ - vorher
# .\build.ps1 laufen lassen, sonst meldet der Test das fehlende Zip.
param(
[string]$Blender = "blender",
[string]$Filter = "*"
)
$root = $PSScriptRoot
$tests = Get-ChildItem (Join-Path $root "tests") -Filter "test_$Filter.py" | Sort-Object Name
if (-not $tests) { throw "Keine Tests gefunden fuer Filter '$Filter'" }
$failed = @()
foreach ($t in $tests) {
$out = & $Blender --background --factory-startup --python $t.FullName 2>&1 | Out-String
# Die Tests melden ihr Ergebnis als letzte Zeile mit "ERGEBNIS:" bzw.
# "Alle Checks bestanden." - alles andere ist Blender-Rauschen.
$line = ($out -split "`n" |
Where-Object { $_ -match "ERGEBNIS|Alle Checks bestanden|FEHLGESCHLAGEN" } |
Select-Object -Last 1)
if (-not $line) { $line = "<keine Ergebniszeile>" }
$line = $line.Trim()
$ok = ($line -match "ALLE|OK$|bestanden") -and ($line -notmatch "FEHLER|FEHLGESCHLAGEN")
$color = if ($ok) { "Green" } else { "Red" }
if (-not $ok) { $failed += $t.BaseName }
Write-Host ("{0,-24} {1}" -f $t.BaseName, $line) -ForegroundColor $color
}
Write-Host ""
if ($failed) {
Write-Host ("FEHLGESCHLAGEN ({0}): {1}" -f $failed.Count, ($failed -join ", ")) -ForegroundColor Red
exit 1
}
Write-Host ("Alle {0} Tests bestanden." -f $tests.Count) -ForegroundColor Green