assets builder tools (#39)
Reviewed-on: #39 Reviewed-by: xtul <mpiasecki720@protonmail.com>
This commit was merged in pull request #39.
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user