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>
49 lines
1.3 KiB
Go
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)
|
|
}
|
|
}
|