140 lines
3.2 KiB
Go
140 lines
3.2 KiB
Go
package integration
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"aego/app/assembly"
|
|
"aego/app/assembly/builtin"
|
|
"aego/editor/core/templates"
|
|
"aego/editor/ext/inspect"
|
|
"aego/editor/panels/inspector"
|
|
"aego/scene"
|
|
"aego/scene/scriptcomp"
|
|
"aego/schema"
|
|
"aego/script/bind"
|
|
"aego/script/bind/manifest"
|
|
"aego/sdk"
|
|
)
|
|
|
|
var updateModules = flag.Bool("update-modules", false, "rewrite module golden files")
|
|
|
|
type probeRotator struct {
|
|
Speed float32 `aego:"speed"`
|
|
}
|
|
|
|
type probeModule struct{}
|
|
|
|
func (probeModule) Info() sdk.ModuleInfo {
|
|
return sdk.ModuleInfo{ID: "rotator"}
|
|
}
|
|
|
|
func (probeModule) Register(r *sdk.Registry) error {
|
|
return sdk.Component[probeRotator](r, sdk.Name("game.Rotator")).Template("Rotator", nil).Err()
|
|
}
|
|
|
|
func moduleGolden(t *testing.T, name string, got string) {
|
|
t.Helper()
|
|
path := filepath.Join("testdata", name)
|
|
if *updateModules {
|
|
if err := os.MkdirAll("testdata", 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(path, []byte(got), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return
|
|
}
|
|
want, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("golden missing, run with -update-modules: %v", err)
|
|
}
|
|
if string(want) != got {
|
|
t.Fatalf("%s differs:\n--- want\n%s\n--- got\n%s", name, want, got)
|
|
}
|
|
}
|
|
|
|
func probeTypes(t *testing.T) (*scene.Types, []schema.TemplateDesc) {
|
|
t.Helper()
|
|
types, err := assembly.NewTypes()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
man, err := builtin.Default().Load(types, bind.New(), assembly.Options{Seed: 1}, sdk.Adapt(probeModule{}))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := types.Schema().Freeze(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return types, man.Templates
|
|
}
|
|
|
|
func TestCreateMenuLayout(t *testing.T) {
|
|
_, descs := probeTypes(t)
|
|
reg := templates.New()
|
|
if err := reg.Load(descs); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var b strings.Builder
|
|
for _, sec := range templates.Layout(reg, templates.Place{}) {
|
|
for _, it := range sec.Items {
|
|
if sec.Title != "" {
|
|
b.WriteString(sec.Title + "/")
|
|
}
|
|
b.WriteString(it.Name + "\n")
|
|
}
|
|
}
|
|
moduleGolden(t, "create_menu.txt", b.String())
|
|
}
|
|
|
|
func TestInspectorSections(t *testing.T) {
|
|
types, _ := probeTypes(t)
|
|
sr := types.Schema()
|
|
reg := inspect.NewRegistry()
|
|
if err := reg.Load(sr); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var list []schema.TypeID
|
|
for _, td := range sr.Components() {
|
|
if td.FullName == "engine.Unknown" || td.ID == scriptcomp.ScriptTypeID || td.Hidden {
|
|
continue
|
|
}
|
|
list = append(list, td.ID)
|
|
}
|
|
var b strings.Builder
|
|
for _, sec := range inspector.Sections(reg, sr, list) {
|
|
for _, id := range sec.Types {
|
|
td, _ := sr.ByID(id)
|
|
m := reg.Meta(td)
|
|
badge := m.Badge
|
|
if badge == "" {
|
|
badge = "-"
|
|
}
|
|
b.WriteString(strings.Join([]string{sec.Category, td.FullName, m.DisplayName, m.Icon, badge}, "\t") + "\n")
|
|
}
|
|
}
|
|
moduleGolden(t, "inspector.txt", b.String())
|
|
}
|
|
|
|
func withoutLoc(data []byte) string {
|
|
var b strings.Builder
|
|
for _, line := range strings.Split(string(data), "\n") {
|
|
if !strings.Contains(line, "loc=") {
|
|
b.WriteString(line + "\n")
|
|
}
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
func TestBindingsManifestUnchanged(t *testing.T) {
|
|
m, err := builtin.Manifest()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
moduleGolden(t, "bindings.aetext", withoutLoc(manifest.Encode(m)))
|
|
}
|