Files
aego/tests/golden/inspector_test.go

106 lines
2.8 KiB
Go

//go:build aego_golden
package golden
import (
"testing"
"aego/app/assembly"
"aego/app/assembly/builtin"
"aego/asset"
"aego/core/ids"
"aego/core/log"
"aego/core/mathx"
"aego/editor/core/clipboard"
"aego/editor/core/command"
"aego/editor/core/context"
"aego/editor/core/document"
"aego/editor/core/selection"
"aego/editor/core/services"
"aego/editor/ext/inspect"
"aego/editor/panels/inspector"
"aego/engine/module"
"aego/scene"
"aego/schema"
"aego/script/bind"
"aego/ui/dnd"
)
type goldenRefs struct {
None scene.NodeRef `aego:"none"`
Alive scene.NodeRef `aego:"alive"`
Missing scene.NodeRef `aego:"missing"`
NoCam scene.NodeRef `aego:"noCam"`
NoTex asset.Ref[asset.Texture] `aego:"noTex,asset=texture"`
Lost asset.Ref[asset.Texture] `aego:"lost,asset=texture"`
}
type goldenModule struct{}
func (goldenModule) Info() module.Info {
return module.Info{ID: "golden"}
}
func (goldenModule) Register(r *module.Registry) error {
return module.Component[goldenRefs](r, schema.Name("golden.Refs")).Err()
}
func TestEditorInspectorRefs(t *testing.T) {
env := newEditorEnv(t)
types, err := assembly.NewTypes()
if err != nil {
t.Fatal(err)
}
if _, err := builtin.Default().Load(types, bind.NewManifest(), assembly.Options{}, goldenModule{}); err != nil {
t.Fatal(err)
}
if err := types.Schema().Freeze(); err != nil {
t.Fatal(err)
}
td, _ := types.Schema().ByName("golden.Refs")
fd, _ := td.Field("noCam")
fd.Component = "engine.Camera2D"
s := scene.New(types, nil, scene.Options{})
holder := s.Create(s.Root(), "Holder")
target := s.Create(s.Root(), "Target")
gone := s.Create(s.Root(), "Gone")
refs := scene.Add[goldenRefs](s, holder)
refs.Alive = scene.NewNodeRef(s.ID(target))
refs.Missing = scene.NewNodeRef(s.ID(gone))
refs.NoCam = scene.NewNodeRef(s.ID(target))
refs.Lost.SetAssetRefID(ids.AssetID{Hi: 0x1234, Lo: 0x5678})
s.Destroy(gone)
s.Flush()
ctx := &context.Editor{
UI: env.ui,
Types: types,
Docs: document.NewManager(document.Options{Root: t.TempDir(), Types: types, Log: log.Nop()}),
Selection: selection.New(),
Commands: command.New(),
DnD: &dnd.State{},
Settings: context.DefaultSettings(),
Collapsed: map[string]bool{},
}
ctx.Docs.New("scenes/refs.aescene", s)
ctx.Select(s.ID(holder))
reg := inspect.NewRegistry()
if err := reg.Load(types.Schema()); err != nil {
t.Fatal(err)
}
reg.SetEditor(ctx)
p := inspector.New(reg, inspector.Deps{
Docs: ctx,
Selection: ctx,
Commands: ctx.Commands,
Notices: ctx,
Nav: ctx,
Problems: ctx,
Clip: clipboard.EnvOf(ctx),
Collapsed: ctx.Collapsed,
})
img, err := env.draw(func(full mathx.Rect) { p.Draw(&services.Frame{UI: env.ui, DnD: ctx.DnD}, full) })
checkGolden(t, "editor_inspector_refs", img, err)
}