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>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user