Files
aego/app/docsview/script_attachment_workflow_test.go
sanspie a46347e2c6
ci-platforms / darwin arm64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 12m19s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
github-native / gitea-pending (push) Skipped
github-native / darwin amd64 native (push) Skipped
github-native / linux amd64 native (push) Skipped
github-native / windows amd64 native (push) Skipped
github-native / darwin arm64 native (push) Skipped
github-native / gitea-result (push) Skipped
ci / checks (push) Failing after 23m57s
ci / release (push) Skipped
GitHub / windows amd64 native GitHub-hosted native CI: failure
GitHub / darwin arm64 native GitHub-hosted native CI: failure
GitHub / darwin amd64 native GitHub-hosted native CI: failure
GitHub / linux amd64 native GitHub-hosted native CI: success
editor: add art studio and stage 12.5 workflows
2026-11-08 18:47:57 +03:00

118 lines
3.5 KiB
Go

//go:build aego_editor
package docsview
import (
"encoding/json"
"testing"
"aego/app/playground"
"aego/scene/scriptcomp"
)
func TestScriptTryTogglesActualAttachmentWithHistoryAndReset(t *testing.T) {
p, err := playground.New()
if err != nil {
t.Fatal(err)
}
e, ok := p.Docs().Get("engine.Script")
if !ok || e.Demo == nil {
t.Fatal("Script contract is absent")
}
code, err := p.TryCode(e.TryScript)
if err != nil {
t.Fatal(err)
}
a := newHeadless(t)
req, err := json.Marshal(map[string]any{"scene": e.Try, "select": e.TrySelect, "code": code, "prefabs": e.TryPrefabs, "artifacts": e.TryArtifacts})
if err != nil {
t.Fatal(err)
}
if r := a.Call("load", req); r.Error != "" {
t.Fatal(r.Error)
}
check := func(enabled bool, x float64) {
t.Helper()
if err := a.Step(10); err != nil {
t.Fatal(err)
}
sc := a.session.Controller().Scene()
h := sc.Find(sc.Root(), "Script target")
scripts, ok := scriptcomp.ScriptsOf(sc, h)
if !ok || len(scripts.Attachments) != 1 || scripts.Attachments[0].TypeName != "game.demo.MoveOnReady" || scripts.Attachments[0].Enabled != enabled || float64(sc.WorldPosition(h).X) != x {
t.Fatalf("real script attachment/position does not match enabled=%v x=%v", enabled, x)
}
r := a.Call("inspect", []byte(`{"component":"engine.Script","fields":["engine.Script.AttachmentEnabled","engine.Script.PositionX"]}`))
if r.Error != "" || r.Inspection == nil || r.Inspection.Observables["engine.Script.AttachmentEnabled"] != enabled || r.Inspection.Observables["engine.Script.PositionX"] != x {
t.Fatalf("real script inspection: %+v", r)
}
}
check(false, -2)
for _, payload := range []string{
`{}`, `{"script":"game.demo.MoveOnReady"}`,
`{"script":"game.demo.MoveOnReady","enabled":null}`,
`{"script":"game.demo.MoveOnReady","enabled":1}`,
`{"script":"game.demo.Missing","enabled":true}`,
} {
if r := a.Call("scriptEnabled", []byte(payload)); r.Error == "" {
t.Fatalf("accepted invalid script attachment action %s", payload)
}
}
if a.session.State().CanUndo {
t.Fatal("invalid attachment actions changed history")
}
if r := a.Call("scriptEnabled", []byte(`{"script":"game.demo.MoveOnReady","enabled":true}`)); r.Error != "" {
t.Fatal(r.Error)
}
check(true, 2)
if r := a.Call("undo", nil); r.Error != "" {
t.Fatal(r.Error)
}
check(false, -2)
if r := a.Call("redo", nil); r.Error != "" {
t.Fatal(r.Error)
}
check(true, 2)
if r := a.Call("reset", nil); r.Error != "" {
t.Fatal(r.Error)
}
check(false, -2)
if messages := errorsOf(a); len(messages) != 0 {
t.Fatalf("Script Try runtime errors: %v", messages)
}
}
func TestScriptGuideOriginalStillAnimates(t *testing.T) {
p, err := playground.New()
if err != nil {
t.Fatal(err)
}
e, ok := p.Docs().Get("language/script-example")
if !ok || e.Try == "" || e.TryScript == "" {
t.Fatal("original Script guide is unavailable")
}
code, err := p.TryCode(e.TryScript)
if err != nil {
t.Fatal(err)
}
a := newHeadless(t)
req, err := json.Marshal(map[string]any{"scene": e.Try, "select": e.TrySelect, "code": code, "prefabs": e.TryPrefabs, "artifacts": e.TryArtifacts})
if err != nil {
t.Fatal(err)
}
if r := a.Call("load", req); r.Error != "" {
t.Fatal(r.Error)
}
if err := a.Step(20); err != nil {
t.Fatal(err)
}
sc := a.session.Controller().Scene()
h := sc.Find(sc.Root(), "Spinner")
if !sc.IsAlive(h) || sc.Local(h).Rotation == 0 {
t.Fatal("the original Spinner script did not animate")
}
if messages := errorsOf(a); len(messages) != 0 {
t.Fatalf("original Script guide runtime errors: %v", messages)
}
}