Some checks failed
release / build-release (push) Failing after 27s
- internal/sim: rutbaserad Mover (4 riktningar, riktningsbyte vid rutgräns, bildrute-exakt ankomst) och Camera (följer, klampar, centrerar små kartor), med tester - internal/game: scener meny -> bana -> resultat, tangentbord + gamepad, tileset och spelaranimation, HUD, skriptläge (-script) för deterministiska skärmdumpar och tester - tools/genart genererar placeholder-grafik (tiles.png, player.png); tools/shots tar doc/img/*.png som README och wiki visar - bana 002-shinjuku (33x21) för kamerascroll; level.List/LoadFile/TrainAt - .gitea/workflows/release.yaml: vet + test + linux/windows-zippar till rullande latest på brasse-linux01-runnern (linux-amd64) - docs: roadmap M1 klar, tester, plan, README med bilder och styrning Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package res
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func existsIn(paths ...string) func(string) bool {
|
|
set := map[string]bool{}
|
|
for _, p := range paths {
|
|
set[filepath.Clean(p)] = true
|
|
}
|
|
return func(p string) bool { return set[filepath.Clean(p)] }
|
|
}
|
|
|
|
func TestLocate_EnvWins(t *testing.T) {
|
|
got, err := Locate("/opt/custom", "/bin", "/work", existsIn("/opt/custom", "/bin/resources"))
|
|
if err != nil || got != "/opt/custom" {
|
|
t.Fatalf("got %q, %v; want /opt/custom", got, err)
|
|
}
|
|
}
|
|
|
|
func TestLocate_EnvMissingIsError(t *testing.T) {
|
|
_, err := Locate("/nope", "/bin", "/work", existsIn("/bin/resources"))
|
|
if err == nil || !strings.Contains(err.Error(), EnvVar) {
|
|
t.Fatalf("expected error mentioning %s, got %v", EnvVar, err)
|
|
}
|
|
}
|
|
|
|
func TestLocate_ExeDirBeforeCwd(t *testing.T) {
|
|
got, err := Locate("", "/app", "/work", existsIn("/app/resources", "/work/resources"))
|
|
if err != nil || got != filepath.Join("/app", DirName) {
|
|
t.Fatalf("got %q, %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestLocate_WalksUpFromCwd(t *testing.T) {
|
|
// Som vid `go run`/dlv: binären i en temp-mapp, cwd djupt inne i repot.
|
|
got, err := Locate("", "/tmp/go-build123", "/repo/internal/level", existsIn("/repo/resources"))
|
|
if err != nil || got != filepath.Join("/repo", DirName) {
|
|
t.Fatalf("got %q, %v", got, err)
|
|
}
|
|
}
|
|
|
|
func TestLocate_NothingFound(t *testing.T) {
|
|
_, err := Locate("", "/a", "/b/c", existsIn())
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
}
|
|
|
|
// TestDir_RealRepo kör mot det riktiga repot: testet körs med cwd = paketmappen,
|
|
// så uppsökningen måste hitta <repo>/resources.
|
|
func TestDir_RealRepo(t *testing.T) {
|
|
d, err := Dir()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if filepath.Base(d) != DirName {
|
|
t.Fatalf("unexpected dir %q", d)
|
|
}
|
|
if _, err := ReadFile("text", "sv.json"); err != nil {
|
|
t.Fatalf("resources/text/sv.json ska finnas: %v", err)
|
|
}
|
|
var m map[string]string
|
|
if err := LoadJSON(&m, "text", "sv.json"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if m["game.title"] == "" {
|
|
t.Fatal("sv.json saknar game.title")
|
|
}
|
|
if _, err := LoadImage("sprites", "player.png"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|