Add topdata bridge commands and handoff
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package topdata
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"gitea.westgate.pw/ShadowsOverWestgate/sow-tools/internal/project"
|
||||
)
|
||||
|
||||
func TestValidateProjectAcceptsCanonicalTopDataLayout(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
mkdirAll(t, filepath.Join(root, "src"))
|
||||
mkdirAll(t, filepath.Join(root, "assets"))
|
||||
mkdirAll(t, filepath.Join(root, "build"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "data", "feat", "modules"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "tlk", "modules"))
|
||||
writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), "{}\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "data", "feat", "base.json"), `{"output":"feat.2da","columns":["LABEL"],"rows":[{"id":0,"LABEL":"Feat","key":"feat:test"}]}`+"\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "data", "feat", "lock.json"), `{"feat:test":0}`+"\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "data", "feat", "modules", "entry.json"), `{"overrides":[{"id":0,"LABEL":"Feat"}]}`+"\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "tlk", "base.json"), `{"language":"en","entries":{"feat:test.name":"Feat"}}`+"\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "tlk", "lock.json"), `{"feat:test.name":0}`+"\n")
|
||||
mkdirAll(t, filepath.Join(root, "reference"))
|
||||
writeFile(t, filepath.Join(root, "reference", "build.py"), "print('ok')\n")
|
||||
|
||||
p := &project.Project{
|
||||
Root: root,
|
||||
Config: project.Config{
|
||||
Module: project.ModuleConfig{Name: "Test", ResRef: "test"},
|
||||
Paths: project.PathConfig{Source: "src", Assets: "assets", Build: "build"},
|
||||
TopData: project.TopDataConfig{
|
||||
Source: "topdata",
|
||||
Build: "build/topdata",
|
||||
ReferenceBuilder: "reference",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
report := ValidateProject(p)
|
||||
if report.HasErrors() {
|
||||
t.Fatalf("expected no topdata validation errors, got %#v", report.Diagnostics)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildReferenceAndCompareReference(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
mkdirAll(t, filepath.Join(root, "src"))
|
||||
mkdirAll(t, filepath.Join(root, "assets"))
|
||||
mkdirAll(t, filepath.Join(root, "build"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "data"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "tlk"))
|
||||
writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), "{}\n")
|
||||
mkdirAll(t, filepath.Join(root, "reference"))
|
||||
writeFile(t, filepath.Join(root, "reference", "build.py"), `#!/usr/bin/env python3
|
||||
import os, sys
|
||||
out = None
|
||||
tlk = None
|
||||
args = sys.argv[1:]
|
||||
for i, arg in enumerate(args):
|
||||
if arg == "--out":
|
||||
out = args[i + 1]
|
||||
if arg == "--tlk-dir":
|
||||
tlk = args[i + 1]
|
||||
os.makedirs(out, exist_ok=True)
|
||||
os.makedirs(tlk, exist_ok=True)
|
||||
with open(os.path.join(out, "feat.2da"), "w", encoding="utf-8") as f:
|
||||
f.write("2DA V2.0\n\n")
|
||||
with open(os.path.join(tlk, "sow_tlk.tlk"), "wb") as f:
|
||||
f.write(b"TLK")
|
||||
`)
|
||||
|
||||
p := &project.Project{
|
||||
Root: root,
|
||||
Config: project.Config{
|
||||
Module: project.ModuleConfig{Name: "Test", ResRef: "test"},
|
||||
Paths: project.PathConfig{Source: "src", Assets: "assets", Build: "build"},
|
||||
TopData: project.TopDataConfig{
|
||||
Source: "topdata",
|
||||
Build: "build/topdata",
|
||||
ReferenceBuilder: "reference",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
result, err := BuildReference(p, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BuildReference failed: %v", err)
|
||||
}
|
||||
if result.Files2DA != 1 || result.FilesTLK != 1 {
|
||||
t.Fatalf("unexpected build result: %#v", result)
|
||||
}
|
||||
|
||||
compare, err := CompareReference(p, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("CompareReference failed: %v", err)
|
||||
}
|
||||
if compare.Compared2DA != 1 || compare.ComparedTLK != 1 {
|
||||
t.Fatalf("unexpected compare result: %#v", compare)
|
||||
}
|
||||
}
|
||||
|
||||
func mkdirAll(t *testing.T, path string) {
|
||||
t.Helper()
|
||||
if err := os.MkdirAll(path, 0o755); err != nil {
|
||||
t.Fatalf("mkdir %s: %v", path, err)
|
||||
}
|
||||
}
|
||||
|
||||
func writeFile(t *testing.T, path, content string) {
|
||||
t.Helper()
|
||||
if err := os.WriteFile(path, []byte(content), 0o755); err != nil {
|
||||
t.Fatalf("write %s: %v", path, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user