assets builder tools (#39)
build-binaries / build-binaries (push) Successful in 2m5s
test / test (push) Successful in 1m23s

Reviewed-on: #39
Reviewed-by: xtul <mpiasecki720@protonmail.com>
This commit was merged in pull request #39.
This commit is contained in:
2026-07-12 12:51:17 +00:00
parent 87fd3d8c04
commit 5ebef57160
26 changed files with 4625 additions and 10 deletions
+114
View File
@@ -0,0 +1,114 @@
package mdl
import (
"os"
"path/filepath"
"testing"
)
func writeMDL(t *testing.T, name, body string) string {
t.Helper()
p := filepath.Join(t.TempDir(), name)
if err := os.WriteFile(p, []byte(body), 0o644); err != nil {
t.Fatal(err)
}
return p
}
func TestIsASCII(t *testing.T) {
ascii := writeMDL(t, "foo.mdl", "newmodel foo\nbeginmodelgeom foo\n")
if ok, err := IsASCII(ascii); err != nil || !ok {
t.Fatalf("ascii: ok=%v err=%v, want true nil", ok, err)
}
bin := writeMDL(t, "bar.mdl", "\x00\x01binary\x00garbage")
if ok, err := IsASCII(bin); err != nil || ok {
t.Fatalf("binary: ok=%v err=%v, want false nil", ok, err)
}
hash := writeMDL(t, "baz.mdl", "# a comment\nnewmodel baz\n")
if ok, _ := IsASCII(hash); !ok {
t.Fatal("leading # should be ascii")
}
}
func TestExpectedName(t *testing.T) {
for in, want := range map[string]string{
"a/b/Foo.MDL": "Foo",
"waxbt_b_091.mdl": "waxbt_b_091",
"x.mdl": "x",
} {
if got := ExpectedName(in); got != want {
t.Errorf("ExpectedName(%q)=%q want %q", in, got, want)
}
}
}
func TestCheckNames(t *testing.T) {
// Header token mismatch + base-node mismatch in one file.
body := "newmodel wrong\n" +
"setsupermodel wrong a_base\n" +
"beginmodelgeom foo\n" +
" node dummy Wmgst_m_081\n" +
" parent null\n" +
" endnode\n" +
"endmodelgeom foo\n" +
"donemodel foo\n"
p := writeMDL(t, "foo.mdl", body)
got, err := CheckNames(p)
if err != nil {
t.Fatal(err)
}
// Expected stem "foo": newmodel(wrong), setsupermodel(wrong), base node(Wmgst_m_081).
if len(got) != 3 {
t.Fatalf("got %d mismatches, want 3: %+v", len(got), got)
}
if got[0].What != "newmodel" || got[0].Got != "wrong" || got[0].Line != 1 {
t.Errorf("first mismatch = %+v", got[0])
}
base := got[len(got)-1]
if base.What != "root node" || base.Got != "Wmgst_m_081" || base.Line != 0 {
t.Errorf("base mismatch = %+v", base)
}
// Clean model -> no mismatches.
clean := writeMDL(t, "bar.mdl",
"newmodel bar\nbeginmodelgeom bar\n node dummy bar\n parent null\n endnode\nendmodelgeom bar\ndonemodel bar\n")
if got, _ := CheckNames(clean); len(got) != 0 {
t.Fatalf("clean model reported mismatches: %+v", got)
}
// Binary model -> nil, no error.
bin := writeMDL(t, "b.mdl", "\x00\x00binary")
if got, _ := CheckNames(bin); got != nil {
t.Fatalf("binary reported mismatches: %+v", got)
}
}
func TestFixNamesRoundTrips(t *testing.T) {
body := "newmodel wrong\n" +
"setsupermodel wrong\n" +
"beginmodelgeom wrong\n" +
" node dummy Wmgst_m_081\n" +
" parent null\n" +
" endnode\n" +
"endmodelgeom wrong\n" +
"donemodel wrong\n"
out, changed := FixNames([]byte(body), "foo")
if !changed {
t.Fatal("expected changed=true")
}
p := filepath.Join(t.TempDir(), "foo.mdl")
if err := os.WriteFile(p, out, 0o644); err != nil {
t.Fatal(err)
}
got, err := CheckNames(p)
if err != nil {
t.Fatal(err)
}
if len(got) != 0 {
t.Fatalf("fixed model still has mismatches: %+v\n%s", got, out)
}
// Idempotent: fixing a clean model changes nothing.
if _, changed := FixNames(out, "foo"); changed {
t.Fatal("second fix reported a change")
}
}