Files
sow-tools/internal/assets/fixmdl_test.go
T
archvillainetteandClaude Opus 4.8 dd01c96473 feat(assets): seven asset commands + Run dispatch/helpers
check-dupes, clean-dupes, check-mdl, fix-mdl, convert, upscale, compile
behind a single runner indirection, mirroring internal/depot's Run shape.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 14:13:54 +02:00

49 lines
1.3 KiB
Go

package assets
import (
"bytes"
"os"
"path/filepath"
"testing"
"git.westgate.pw/ShadowsOverWestgate/sow-tools/internal/assets/mdl"
)
func TestFixMDL(t *testing.T) {
dir := t.TempDir()
// Uppercase name + internal mismatch.
upper := filepath.Join(dir, "Foo.MDL")
body := "newmodel wrong\nbeginmodelgeom wrong\nendmodelgeom wrong\ndonemodel wrong\n"
if err := os.WriteFile(upper, []byte(body), 0o644); err != nil {
t.Fatal(err)
}
// dry-run: nothing changes on disk.
var out, errw bytes.Buffer
if code := runFixMDL([]string{"--dry-run", dir}, &out, &errw); code != exitOK {
t.Fatalf("dry-run exit = %d\n%s", code, errw.String())
}
if _, err := os.Stat(upper); err != nil {
t.Fatal("dry-run renamed a file")
}
// real run: file is lowercased and its identity rewritten to match.
out.Reset()
errw.Reset()
if code := runFixMDL([]string{dir}, &out, &errw); code != exitOK {
t.Fatalf("fix exit = %d\n%s", code, errw.String())
}
lowered := filepath.Join(dir, "foo.mdl")
if _, err := os.Stat(lowered); err != nil {
t.Fatalf("file was not lowercased: %v", err)
}
mismatches, err := mdl.CheckNames(lowered)
if err != nil {
t.Fatal(err)
}
if len(mismatches) != 0 {
data, _ := os.ReadFile(lowered)
t.Fatalf("model still has mismatches after fix: %+v\n%s", mismatches, data)
}
}